@dignite-ng/expand.file-explorer 3.0.0-rc.34 → 3.0.0-rc.35
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/esm2022/lib/components/file-modal/file-modal.component.mjs +274 -68
- package/esm2022/lib/components/file-modal-tree/file-modal-tree.component.mjs +125 -52
- package/esm2022/lib/components/file-picker/file-picker.component.mjs +14 -5
- package/esm2022/lib/file-explorer.module.mjs +14 -3
- package/esm2022/lib/pipe/get-directory-name.pipe.mjs +20 -0
- package/esm2022/lib/proxy/dignite/file-explorer/files/file-descriptor.service.mjs +10 -3
- package/esm2022/lib/proxy/dignite/file-explorer/files/models.mjs +1 -1
- package/fesm2022/dignite-ng-expand.file-explorer.mjs +448 -131
- package/fesm2022/dignite-ng-expand.file-explorer.mjs.map +1 -1
- package/lib/components/file-modal/file-modal.component.d.ts +61 -20
- package/lib/components/file-modal-tree/file-modal-tree.component.d.ts +21 -10
- package/lib/components/file-picker/file-picker.component.d.ts +2 -0
- package/lib/file-explorer.module.d.ts +4 -1
- package/lib/pipe/get-directory-name.pipe.d.ts +7 -0
- package/lib/proxy/dignite/file-explorer/files/file-descriptor.service.d.ts +3 -1
- package/lib/proxy/dignite/file-explorer/files/models.d.ts +5 -2
- package/package.json +1 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/* eslint-disable @angular-eslint/component-selector */
|
|
2
|
-
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
|
|
3
3
|
import { FormBuilder, Validators } from '@angular/forms';
|
|
4
4
|
import * as DescriptorService from '../../proxy/dignite/file-explorer/directories';
|
|
5
|
-
import { ToasterService } from '@abp/ng.theme.shared';
|
|
6
|
-
import { of } from 'rxjs';
|
|
5
|
+
import { ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
|
|
6
|
+
import { finalize, map, of, tap } from 'rxjs';
|
|
7
7
|
import { FileApiService } from '../../services/file-api.service';
|
|
8
8
|
import { LocalizationService } from '@abp/ng.core';
|
|
9
|
+
import { ValidatorsService } from '@dignite-ng/expand.core';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
import * as i1 from "../../proxy/dignite/file-explorer/directories";
|
|
11
12
|
import * as i2 from "@angular/forms";
|
|
@@ -15,15 +16,16 @@ import * as i5 from "@abp/ng.core";
|
|
|
15
16
|
import * as i6 from "@angular/common";
|
|
16
17
|
import * as i7 from "@ngx-validate/core";
|
|
17
18
|
import * as i8 from "@ng-bootstrap/ng-bootstrap";
|
|
18
|
-
import * as i9 from "ng
|
|
19
|
+
import * as i9 from "@abp/ng.components/tree";
|
|
19
20
|
var that;
|
|
20
21
|
export class FileModalTreeComponent {
|
|
21
|
-
constructor(_DescriptorService, fb, toaster, _FileApiService, _LocalizationService) {
|
|
22
|
+
constructor(_DescriptorService, fb, toaster, _FileApiService, _LocalizationService, confirmation) {
|
|
22
23
|
this._DescriptorService = _DescriptorService;
|
|
23
24
|
this.fb = fb;
|
|
24
25
|
this.toaster = toaster;
|
|
25
26
|
this._FileApiService = _FileApiService;
|
|
26
27
|
this._LocalizationService = _LocalizationService;
|
|
28
|
+
this.confirmation = confirmation;
|
|
27
29
|
/**文件分组列表 */
|
|
28
30
|
this.fileGroupList = [];
|
|
29
31
|
/**选择的tree节点 */
|
|
@@ -34,25 +36,41 @@ export class FileModalTreeComponent {
|
|
|
34
36
|
this.anExpandedNode = [];
|
|
35
37
|
/**tree节点选择回调 */
|
|
36
38
|
this.nodeClick = new EventEmitter();
|
|
37
|
-
|
|
39
|
+
/**获取数据后回调给file-modal */
|
|
40
|
+
this.treeNodeData = new EventEmitter();
|
|
41
|
+
/**查看所有文件回调函数,在file-modal中处理逻辑 */
|
|
42
|
+
this.lookAllBtn = new EventEmitter();
|
|
43
|
+
this.handleClick = event => event.stopPropagation();
|
|
44
|
+
this.selectedNode = [];
|
|
38
45
|
/**判断节点是否选中 */
|
|
39
|
-
this.isNodeSelected =
|
|
46
|
+
this.isNodeSelected = el => {
|
|
47
|
+
return el.key === this._theSelectedTreeNode?.key;
|
|
48
|
+
};
|
|
40
49
|
/**分组 */
|
|
41
50
|
/**模态框-状态-是否打开 */
|
|
42
51
|
this.ModalDescriptorOpen = false;
|
|
43
52
|
/**模态框-descriptor-繁忙状态-用于确定模态的繁忙状态是否为真 */
|
|
44
53
|
this.ModalDescriptorBusy = false;
|
|
54
|
+
this.formValidation = '';
|
|
55
|
+
this._ValidatorsService = inject(ValidatorsService);
|
|
45
56
|
that = this;
|
|
46
57
|
}
|
|
47
58
|
set theSelectedTreeNode(v) {
|
|
48
59
|
this._theSelectedTreeNode = v;
|
|
49
|
-
if (v
|
|
60
|
+
if (v == '') {
|
|
50
61
|
this.loadData();
|
|
51
62
|
}
|
|
52
63
|
}
|
|
53
64
|
set fileContainerName(v) {
|
|
54
65
|
if (v) {
|
|
55
66
|
this._fileContainerName = v;
|
|
67
|
+
// this.loadData();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
ngAfterContentInit() {
|
|
71
|
+
//Called after ngOnInit when the component's or directive's content has been initialized.
|
|
72
|
+
//Add 'implements AfterContentInit' to the class.
|
|
73
|
+
if (this._fileContainerName) {
|
|
56
74
|
this.loadData();
|
|
57
75
|
}
|
|
58
76
|
}
|
|
@@ -63,48 +81,70 @@ export class FileModalTreeComponent {
|
|
|
63
81
|
}
|
|
64
82
|
/**获取文件分组 */
|
|
65
83
|
getFileGroupList() {
|
|
66
|
-
this._DescriptorService
|
|
84
|
+
this._DescriptorService
|
|
85
|
+
.getList({
|
|
67
86
|
containerName: this._fileContainerName,
|
|
68
|
-
})
|
|
87
|
+
})
|
|
88
|
+
.subscribe(async (res) => {
|
|
69
89
|
this.fileGroupList = await this.setTheValueOfTheNodeRecursively(res.items);
|
|
90
|
+
this.treeNodeData.emit(this.fileGroupList);
|
|
70
91
|
});
|
|
71
92
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
93
|
+
/**查看所有文件 */
|
|
94
|
+
onLookAllBtn() {
|
|
95
|
+
this.lookAllBtn.emit();
|
|
96
|
+
}
|
|
97
|
+
/**递归-将列表转化为父子级结构 */
|
|
98
|
+
setTheValueOfTheNodeRecursively(array, parentId = null, root) {
|
|
99
|
+
let rootList = root || array;
|
|
100
|
+
let result = array.filter(item => item.parentId === parentId);
|
|
101
|
+
result.sort((a, b) => a.order - b.order);
|
|
102
|
+
result.map((el) => {
|
|
103
|
+
el.title = el.name;
|
|
104
|
+
el.key = el.id;
|
|
105
|
+
el.entity = el.id; /** 节点值 */
|
|
106
|
+
el.expanded = this.anExpandedNode.includes(el.key);
|
|
107
|
+
el.children.sort((a, b) => a.order - b.order);
|
|
108
|
+
if (el.children.length > 0) {
|
|
109
|
+
this.setTheValueOfTheNodeRecursively(el.children, el.id, rootList);
|
|
110
|
+
}
|
|
84
111
|
});
|
|
112
|
+
return result;
|
|
85
113
|
}
|
|
86
114
|
/**tree-拖拽 */
|
|
87
|
-
nzEvent(event) {
|
|
88
|
-
}
|
|
115
|
+
nzEvent(event) { }
|
|
89
116
|
/**tree-拖拽 -验证*/
|
|
90
117
|
beforeDrop(arg) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
118
|
+
const { pos, dragNode, node } = arg;
|
|
119
|
+
// 只处理有效的拖拽位置
|
|
120
|
+
if (pos === 0 || pos === 1 || pos === -1) {
|
|
121
|
+
// 根据不同的拖拽位置计算参数
|
|
122
|
+
const parentId = pos === 0 ? node.key : node.parentNode?.key || '';
|
|
123
|
+
let order;
|
|
124
|
+
if (pos === 1) {
|
|
125
|
+
order = node.origin.order + 1;
|
|
126
|
+
}
|
|
127
|
+
else if (pos === 0) {
|
|
128
|
+
order = node.origin.children.length + 1;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// pos === -1
|
|
132
|
+
order = Math.max(0, node.origin.order - 1);
|
|
133
|
+
}
|
|
134
|
+
// 统一处理移动逻辑
|
|
135
|
+
return that._DescriptorService.move(dragNode.key, { parentId, order }).pipe(tap(() => that.getFileGroupList()), map(() => true));
|
|
102
136
|
}
|
|
137
|
+
return of(false);
|
|
103
138
|
}
|
|
104
139
|
/**tree--选择节点 */
|
|
105
|
-
activeNode(
|
|
106
|
-
|
|
107
|
-
|
|
140
|
+
activeNode(node) {
|
|
141
|
+
if (event?.target?.localName == 'i')
|
|
142
|
+
return;
|
|
143
|
+
if (this._theSelectedTreeNode?.key == node.key)
|
|
144
|
+
return;
|
|
145
|
+
this.selectedNode = [node];
|
|
146
|
+
this._theSelectedTreeNode = node;
|
|
147
|
+
this.nodeClick.emit(node);
|
|
108
148
|
}
|
|
109
149
|
/**点击展开树节点图标触发 */
|
|
110
150
|
nzExpandChange(event) {
|
|
@@ -123,23 +163,32 @@ export class FileModalTreeComponent {
|
|
|
123
163
|
this.ModalDescriptorForm = this.fb.group({
|
|
124
164
|
containerName: [this._fileContainerName || '', Validators.required],
|
|
125
165
|
name: ['', Validators.required],
|
|
126
|
-
parentId: [items?.key || ''
|
|
166
|
+
parentId: [items?.key || ''],
|
|
127
167
|
});
|
|
128
168
|
/**编辑 */
|
|
129
169
|
if (edit) {
|
|
130
170
|
this.theNodeBeingEdited = items.origin;
|
|
131
171
|
this.ModalDescriptorForm.patchValue({
|
|
132
|
-
name: items.origin.name
|
|
172
|
+
name: items.origin.name,
|
|
133
173
|
});
|
|
134
174
|
}
|
|
135
175
|
}
|
|
136
176
|
/**删除分组 */
|
|
137
177
|
deleteDescriptorBtn(node) {
|
|
138
|
-
this.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
178
|
+
this.confirmation
|
|
179
|
+
.warn('', {
|
|
180
|
+
key: '',
|
|
181
|
+
defaultValue: this._LocalizationService.instant(`FileExplorer::DeletionConfirmationMessage`, node.title),
|
|
182
|
+
})
|
|
183
|
+
.subscribe((status) => {
|
|
184
|
+
if (status == 'confirm') {
|
|
185
|
+
this._DescriptorService.delete(node.key).subscribe(res => {
|
|
186
|
+
this.ModalDescriptorOpen = false;
|
|
187
|
+
if (this.theNodeBeingEdited.key == node.key)
|
|
188
|
+
this.theNodeBeingEdited = '';
|
|
189
|
+
this.getFileGroupList();
|
|
190
|
+
});
|
|
191
|
+
}
|
|
143
192
|
});
|
|
144
193
|
}
|
|
145
194
|
/**模态框-descriptor-状态改变回调 */
|
|
@@ -153,32 +202,56 @@ export class FileModalTreeComponent {
|
|
|
153
202
|
/**f分组模态框保存 */
|
|
154
203
|
createOrEditSave() {
|
|
155
204
|
let input = this.ModalDescriptorForm.value;
|
|
205
|
+
this.formValidation = this._ValidatorsService.getFormValidationStatus(this.ModalDescriptorForm);
|
|
206
|
+
if (this._ValidatorsService.isCheckForm(this.formValidation, 'FileExplorer'))
|
|
207
|
+
return;
|
|
208
|
+
if (!this.ModalDescriptorForm.valid)
|
|
209
|
+
return;
|
|
210
|
+
if (this.ModalDescriptorBusy)
|
|
211
|
+
return;
|
|
212
|
+
this.ModalDescriptorBusy = true;
|
|
156
213
|
if (this.theNodeBeingEdited) {
|
|
157
|
-
this._DescriptorService
|
|
214
|
+
this._DescriptorService
|
|
215
|
+
.update(this.theNodeBeingEdited.key, input)
|
|
216
|
+
.pipe(finalize(() => {
|
|
217
|
+
this.ModalDescriptorBusy = false;
|
|
218
|
+
}))
|
|
219
|
+
.subscribe(res => {
|
|
158
220
|
this.ModalDescriptorOpen = false;
|
|
221
|
+
this.ModalDescriptorVisibleChange(false);
|
|
159
222
|
this.getFileGroupList();
|
|
160
223
|
});
|
|
161
224
|
return;
|
|
162
225
|
}
|
|
163
|
-
this._DescriptorService
|
|
226
|
+
this._DescriptorService
|
|
227
|
+
.create(input)
|
|
228
|
+
.pipe(finalize(() => {
|
|
229
|
+
this.ModalDescriptorBusy = false;
|
|
230
|
+
}))
|
|
231
|
+
.subscribe(res => {
|
|
164
232
|
this.ModalDescriptorOpen = false;
|
|
233
|
+
this.ModalDescriptorVisibleChange(false);
|
|
165
234
|
this.getFileGroupList();
|
|
166
235
|
});
|
|
167
236
|
}
|
|
168
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalTreeComponent, deps: [{ token: i1.FileDescriptorService }, { token: i2.FormBuilder }, { token: i3.ToasterService }, { token: i4.FileApiService }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
169
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalTreeComponent, deps: [{ token: i1.FileDescriptorService }, { token: i2.FormBuilder }, { token: i3.ToasterService }, { token: i4.FileApiService }, { token: i5.LocalizationService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
238
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.5", type: FileModalTreeComponent, selector: "fe-file-modal-tree", inputs: { theSelectedTreeNode: "theSelectedTreeNode", fileContainerName: "fileContainerName" }, outputs: { nodeClick: "nodeClick", treeNodeData: "treeNodeData", lookAllBtn: "lookAllBtn" }, viewQueries: [{ propertyName: "ModalFormDescriptorSubmit", first: true, predicate: ["ModalFormDescriptorSubmit"], descendants: true }], ngImport: i0, template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0 btn-link\" role=\"button\" (click.stop)=\"onLookAllBtn()\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n@if(fileGroupList.length>0){\n<abp-tree [nodes]=\"fileGroupList\" (nzExpandChange)=\"nzExpandChange($event)\" [draggable]=\"true\"\n (dropOver)=\"nzEvent($event)\" [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\" [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\">\n\n <ng-template #menu let-node>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-pencil\"></i>{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node,true)\"><i\n class=\" me-1 fa fa-plus\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"deleteDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n </ng-template>\n\n <ng-template #minusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\n </svg>\n </ng-template>\n\n <ng-template #plusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\n </svg>\n </ng-template>\n</abp-tree>\n\n}\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"ModalDescriptorBusy\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: [""], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i7.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i7.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i8.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i8.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i9.ExpandedIconTemplateDirective, selector: "[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]" }, { kind: "component", type: i9.TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
170
239
|
}
|
|
171
240
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalTreeComponent, decorators: [{
|
|
172
241
|
type: Component,
|
|
173
|
-
args: [{ selector: 'fe-file-modal-tree', template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n<
|
|
174
|
-
}], ctorParameters: () => [{ type: i1.FileDescriptorService }, { type: i2.FormBuilder }, { type: i3.ToasterService }, { type: i4.FileApiService }, { type: i5.LocalizationService }], propDecorators: { theSelectedTreeNode: [{
|
|
242
|
+
args: [{ selector: 'fe-file-modal-tree', template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0 btn-link\" role=\"button\" (click.stop)=\"onLookAllBtn()\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n@if(fileGroupList.length>0){\n<abp-tree [nodes]=\"fileGroupList\" (nzExpandChange)=\"nzExpandChange($event)\" [draggable]=\"true\"\n (dropOver)=\"nzEvent($event)\" [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\" [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\">\n\n <ng-template #menu let-node>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-pencil\"></i>{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node,true)\"><i\n class=\" me-1 fa fa-plus\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"deleteDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n </ng-template>\n\n <ng-template #minusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\n </svg>\n </ng-template>\n\n <ng-template #plusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\n </svg>\n </ng-template>\n</abp-tree>\n\n}\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"ModalDescriptorBusy\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>" }]
|
|
243
|
+
}], ctorParameters: () => [{ type: i1.FileDescriptorService }, { type: i2.FormBuilder }, { type: i3.ToasterService }, { type: i4.FileApiService }, { type: i5.LocalizationService }, { type: i3.ConfirmationService }], propDecorators: { theSelectedTreeNode: [{
|
|
175
244
|
type: Input
|
|
176
245
|
}], nodeClick: [{
|
|
177
246
|
type: Output
|
|
247
|
+
}], treeNodeData: [{
|
|
248
|
+
type: Output
|
|
249
|
+
}], lookAllBtn: [{
|
|
250
|
+
type: Output
|
|
178
251
|
}], fileContainerName: [{
|
|
179
252
|
type: Input
|
|
180
253
|
}], ModalFormDescriptorSubmit: [{
|
|
181
254
|
type: ViewChild,
|
|
182
255
|
args: ['ModalFormDescriptorSubmit', { static: false }]
|
|
183
256
|
}] } });
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZpbGUtZXhwbG9yZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbW9kYWwtdHJlZS9maWxlLW1vZGFsLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC10cmVlL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQUcsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFHLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7OztBQUNuRCxJQUFJLElBQUksQ0FBQztBQU1ULE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxrQkFBMkQsRUFDM0QsRUFBZSxFQUNmLE9BQXVCLEVBQ3hCLGVBQStCLEVBQy9CLG9CQUF5QztRQUp4Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXlDO1FBQzNELE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN4Qixv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LEdBQUcsS0FBSyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3pCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs4R0F0TFUsc0JBQXNCO2tHQUF0QixzQkFBc0IsdVVDaEJuQywrMEhBOERZOzsyRkQ5Q0Msc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjtnTkFxQm5CLG1CQUFtQjtzQkFEN0IsS0FBSztnQkFrQkksU0FBUztzQkFBbEIsTUFBTTtnQkFJSSxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBd0hxRCx5QkFBeUI7c0JBQW5GLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE56Rm9ybWF0RW1pdEV2ZW50IH0gZnJvbSAnbmctem9ycm8tYW50ZC90cmVlJztcbmltcG9ydCAqIGFzIERlc2NyaXB0b3JTZXJ2aWNlIGZyb20gJy4uLy4uL3Byb3h5L2RpZ25pdGUvZmlsZS1leHBsb3Jlci9kaXJlY3Rvcmllcyc7XG5pbXBvcnQgeyAgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBOekZvcm1hdEJlZm9yZURyb3BFdmVudCB9IGZyb20gJ25nLXpvcnJvLWFudGQvdHJlZSc7XG5pbXBvcnQgeyAgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbnZhciB0aGF0O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmUtZmlsZS1tb2RhbC10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNb2RhbFRyZWVDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9EZXNjcmlwdG9yU2VydmljZTogRGVzY3JpcHRvclNlcnZpY2UuRmlsZURlc2NyaXB0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXG4gICAgcHVibGljIF9GaWxlQXBpU2VydmljZTogRmlsZUFwaVNlcnZpY2UsXG4gICAgcHVibGljIF9Mb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICApIHtcbiAgICB0aGF0ID0gdGhpc1xuICB9XG5cbiAgLyoq5paH5Lu25YiG57uE5YiX6KGoICovXG4gIGZpbGVHcm91cExpc3Q6IGFueVtdID0gW107XG5cbiAgLyoq6YCJ5oup55qEdHJlZeiKgueCuSAqL1xuICBfdGhlU2VsZWN0ZWRUcmVlTm9kZTogYW55ID0gJyc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGhlU2VsZWN0ZWRUcmVlTm9kZSh2OiBhbnkpIHtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gdjtcbiAgICBpZiAodi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKClcbiAgICB9XG4gIH1cblxuICAvKirmraPlnKjnvJbovpHnmoToioLngrkgKi9cbiAgdGhlTm9kZUJlaW5nRWRpdGVkOiBhbnkgPSAnJztcblxuICAvKirlt7LlsZXlvIDnmoToioLngrkgKi9cbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XG5cbiAgLyoq5Zu+54mH5a655ZmoICovXG4gIF9maWxlQ29udGFpbmVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKnRyZWXoioLngrnpgInmi6nlm57osIMgKi9cbiAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZmlsZUNvbnRhaW5lck5hbWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lID0gdjtcbiAgICAgIHRoaXMubG9hZERhdGEoKVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrID0gKGV2ZW50KSA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICBsb2FkRGF0YSgpIHtcbiAgICBpZiAodGhpcy5fZmlsZUNvbnRhaW5lck5hbWUpIHtcbiAgICAgIHRoaXMuZ2V0RmlsZUdyb3VwTGlzdCgpXG4gICAgfVxuICB9XG5cblxuICAvKirojrflj5bmlofku7bliIbnu4QgKi9cbiAgZ2V0RmlsZUdyb3VwTGlzdCgpIHtcbiAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZS5nZXRMaXN0KHtcbiAgICAgIGNvbnRhaW5lck5hbWU6IHRoaXMuX2ZpbGVDb250YWluZXJOYW1lLFxuICAgIH0pLnN1YnNjcmliZShhc3luYyAocmVzKSA9PiB7XG4gICAgICB0aGlzLmZpbGVHcm91cExpc3QgPSBhd2FpdCB0aGlzLnNldFRoZVZhbHVlT2ZUaGVOb2RlUmVjdXJzaXZlbHkocmVzLml0ZW1zKVxuICAgIH0pXG4gIH1cbiAgXG4gIC8qKumAkuW9kuiuvue9ruiKgueCueeahOWAvCAqL1xuICBzZXRUaGVWYWx1ZU9mVGhlTm9kZVJlY3Vyc2l2ZWx5KGFycmF5OiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNsb3ZlLCByZWplY3RzKSA9PiB7XG4gICAgICBhcnJheS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBlbC50aXRsZSA9IGVsLm5hbWVcbiAgICAgICAgZWwua2V5ID0gZWwuaWRcbiAgICAgICAgZWwuZXhwYW5kZWQgPSB0aGlzLmFuRXhwYW5kZWROb2RlLmluY2x1ZGVzKGVsLmtleSlcbiAgICAgICAgaWYgKGVsLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNldFRoZVZhbHVlT2ZUaGVOb2RlUmVjdXJzaXZlbHkoZWwuY2hpbGRyZW4pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXNsb3ZlKGFycmF5KVxuICAgIH0pXG4gIH1cblxuICAvKip0cmVlLeaLluaLvSAqL1xuICBuekV2ZW50KGV2ZW50OiBOekZvcm1hdEVtaXRFdmVudCk6IHZvaWQge1xuICB9XG5cbiAgLyoqdHJlZS3mi5bmi70gLemqjOivgSovXG4gIGJlZm9yZURyb3AoYXJnOiBOekZvcm1hdEJlZm9yZURyb3BFdmVudCkge1xuICAgIGlmIChhcmcucG9zID09PSAwIHx8IGFyZy5wb3MgPT09IDEpIHtcbiAgICAgIHRoYXQuX0Rlc2NyaXB0b3JTZXJ2aWNlLm1vdmUoYXJnLmRyYWdOb2RlLmtleSwge1xuICAgICAgICBcInBhcmVudElkXCI6IGFyZy5wb3MgPT09IDEgPyAoYXJnLm5vZGUucGFyZW50Tm9kZT8ua2V5fHwnJykgOiBhcmcubm9kZS5rZXksXG4gICAgICAgIFwib3JkZXJcIjogYXJnLnBvcyA9PT0gMSA/IGFyZy5ub2RlLm9yaWdpbi5vcmRlciArIDEgOiBhcmcubm9kZS5vcmlnaW4uY2hpbGRyZW4ubGVuZ3RoICsgMVxuICAgICAgfSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoYXQuZ2V0RmlsZUdyb3VwTGlzdCgpXG4gICAgICB9KVxuICAgICAgcmV0dXJuIG9mKHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqdHJlZS0t6YCJ5oup6IqC54K5ICovXG4gIGFjdGl2ZU5vZGUoZXZlbnQpIHtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gZXZlbnQubm9kZVxuICAgIHRoaXMubm9kZUNsaWNrLmVtaXQoZXZlbnQubm9kZSlcbiAgfVxuXG4gIC8qKuWIpOaWreiKgueCueaYr+WQpumAieS4rSAqL1xuICBpc05vZGVTZWxlY3RlZCA9IChlbCkgPT4gZWwua2V5ID09PSB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlPy5rZXlcblxuICAvKirngrnlh7vlsZXlvIDmoJHoioLngrnlm77moIfop6blj5EgKi9cbiAgbnpFeHBhbmRDaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgYW5FeHBhbmRlZE5vZGUgPSB0aGlzLmFuRXhwYW5kZWROb2RlXG4gICAgaWYgKGFuRXhwYW5kZWROb2RlLmluY2x1ZGVzKGV2ZW50Lm5vZGUua2V5KSkge1xuICAgICAgYW5FeHBhbmRlZE5vZGUgPSBhbkV4cGFuZGVkTm9kZS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gZXZlbnQubm9kZS5rZXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFuRXhwYW5kZWROb2RlLnB1c2goZXZlbnQubm9kZS5rZXkpXG4gICAgfVxuICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBhbkV4cGFuZGVkTm9kZVxuICB9XG5cblxuICAvKirlop7liqDliIbnu4QgKi9cbiAgYWRkRGVzY3JpcHRvckJ0bihpdGVtczogYW55ID0gJycsIGVkaXQgPSBmYWxzZSkge1xuICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IHRydWVcbiAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbnRhaW5lck5hbWU6IFt0aGlzLl9maWxlQ29udGFpbmVyTmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFyZW50SWQ6IFtpdGVtcz8ua2V5IHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICB9KVxuICAgIC8qKue8lui+kSAqL1xuICAgIGlmIChlZGl0KSB7XG4gICAgICB0aGlzLnRoZU5vZGVCZWluZ0VkaXRlZCA9IGl0ZW1zLm9yaWdpblxuICAgICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBuYW1lOiBpdGVtcy5vcmlnaW4ubmFtZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKirliKDpmaTliIbnu4QgKi9cbiAgZGVsZXRlRGVzY3JpcHRvckJ0bihub2RlKSB7XG4gICAgdGhpcy5fRGVzY3JpcHRvclNlcnZpY2UuZGVsZXRlKG5vZGUua2V5KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IGZhbHNlXG4gICAgICBpZiAodGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQua2V5ID09IG5vZGUua2V5KSB0aGlzLnRoZU5vZGVCZWluZ0VkaXRlZCA9ICcnXG4gICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKVxuICAgIH0pXG4gIH1cblxuICBcblxuICAvKirliIbnu4QgKi9cbiAgLyoq5qih5oCB5qGGLeeKtuaAgS3mmK/lkKbmiZPlvIAgKi9cbiAgTW9kYWxEZXNjcmlwdG9yT3BlbjogYm9vbGVhbiA9IGZhbHNlXG5cbiAgLyoq5qih5oCB5qGGLWRlc2NyaXB0b3It57mB5b+Z54q25oCBLeeUqOS6juehruWumuaooeaAgeeahOe5geW/meeKtuaAgeaYr+WQpuS4uuecnyAqL1xuICBNb2RhbERlc2NyaXB0b3JCdXN5OiBib29sZWFuID0gZmFsc2VcblxuICAvKirmqKHmgIHmoYYtZGVzY3JpcHRvci3ooajljZUgKi9cbiAgTW9kYWxEZXNjcmlwdG9yRm9ybTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuICBcbiAgLyoq5qih5oCB5qGGLWRlc2NyaXB0b3It6KGo5Y2VLS3mjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXG4gIEBWaWV3Q2hpbGQoJ01vZGFsRm9ybURlc2NyaXB0b3JTdWJtaXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgTW9kYWxGb3JtRGVzY3JpcHRvclN1Ym1pdDogRWxlbWVudFJlZjtcblxuICAvKirmqKHmgIHmoYYtZGVzY3JpcHRvci3nirbmgIHmlLnlj5jlm57osIMgKi9cbiAgTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybSA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQgPSAnJ1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgLyoqZuWIhue7hOaooeaAgeahhuS/neWtmCAqL1xuICBjcmVhdGVPckVkaXRTYXZlKCkge1xuICAgIGxldCBpbnB1dCA9IHRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybS52YWx1ZVxuICAgIGlmICh0aGlzLnRoZU5vZGVCZWluZ0VkaXRlZCkge1xuICAgICAgdGhpcy5fRGVzY3JpcHRvclNlcnZpY2UudXBkYXRlKHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkLmtleSwgaW5wdXQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvck9wZW4gPSBmYWxzZVxuICAgICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZS5jcmVhdGUoaW5wdXQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JPcGVuID0gZmFsc2VcbiAgICAgIHRoaXMuZ2V0RmlsZUdyb3VwTGlzdCgpXG4gICAgfSlcbiAgfVxuXG5cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgIHAtMCBtYi0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8aDYgY2xhc3M9XCJoNiBtYi0wXCI+e3snRmlsZUV4cGxvcmVyOjpNeURpcmVjdG9yaWVzJyB8IGFicExvY2FsaXphdGlvbn19PC9oNj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIG1zLTJcIiAoY2xpY2suc3RvcCk9XCJhZGREZXNjcmlwdG9yQnRuKClcIj48aVxuICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+XG48L2Rpdj5cbjxuei10cmVlIFtuekRhdGFdPVwiZmlsZUdyb3VwTGlzdFwiIGNsYXNzPVwibmctem9ycm8tYW50ZC10cmVlXCIgbnpEcmFnZ2FibGUgbnpCbG9ja05vZGUgbnpTaG93SWNvblxuICAgIFtuekV4cGFuZGVkSWNvbl09XCJtdWx0aUV4cGFuZGVkSWNvblRwbFwiIChuek9uRHJvcCk9XCJuekV2ZW50KCRldmVudClcIiBbbnpCZWZvcmVEcm9wXT1cImJlZm9yZURyb3BcIlxuICAgIChuekNsaWNrKT1cImFjdGl2ZU5vZGUoJGV2ZW50KVwiIChuekV4cGFuZENoYW5nZSk9XCJuekV4cGFuZENoYW5nZSgkZXZlbnQpXCIgW256VHJlZVRlbXBsYXRlXT1cIm56VHJlZVRlbXBsYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlICNuelRyZWVUZW1wbGF0ZSBsZXQtbm9kZSBsZXQtb3JpZ2luPVwib3JpZ2luXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbm9kZSBkLWlubGluZS1ibG9jayAgIG5nLXN0YXItaW5zZXJ0ZWQgZHJvcGRvd25cIiBbdGl0bGVdPVwibm9kZS50aXRsZVwiPlxuICAgICAgICAgICAgPGRpdiAjZHJvcGRvd249XCJuZ2JEcm9wZG93blwiIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiBuZ2JEcm9wZG93biBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250YWluZXI9XCJib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIFtjbGFzcy5zZWxlY3RlZF09XCJpc05vZGVTZWxlY3RlZChub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSAgcC0wIHB4LTFcIj57eyBub2RlLnRpdGxlIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtICBwLTBcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiIG5nYkRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZHJvcGRvd24tdG9nZ2xlXT1cImZhbHNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jYXJldC1kb3duIHRleHQtbXV0ZWQgcC0xXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljay5zdG9wKT1cImFkZERlc2NyaXB0b3JCdG4obm9kZSlcIj57eydGaWxlRXhwbG9yZXI6Ok5ld0RpcmVjdG9yeScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiYWRkRGVzY3JpcHRvckJ0bihub2RlLHRydWUpXCI+e3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljay5zdG9wKT1cImRlbGV0ZURlc2NyaXB0b3JCdG4obm9kZSlcIj57eydBYnBVaTo6RGVsZXRlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI211bHRpRXhwYW5kZWRJY29uVHBsIGxldC1ub2RlIGxldC1vcmlnaW49XCJvcmlnaW5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cIm5vZGUuaXNFeHBhbmRlZCA/ICdmYXMgZmEtY2FyZXQtZG93bicgOiAnZmFzIGZhLWNhcmV0LXJpZ2h0J1wiPjwvaT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbnotdHJlZT5cblxuXG48YWJwLW1vZGFsIFsodmlzaWJsZSldPVwiTW9kYWxEZXNjcmlwdG9yT3BlblwiIFtidXN5XT1cIk1vZGFsRGVzY3JpcHRvckJ1c3lcIlxuICAgICh2aXNpYmxlQ2hhbmdlKT1cIk1vZGFsRGVzY3JpcHRvclZpc2libGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3t0aGVOb2RlQmVpbmdFZGl0ZWQ/KCdBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb24pOignRmlsZUV4cGxvcmVyOjpOZXdEaXJlY3RvcnknIHwgYWJwTG9jYWxpemF0aW9uKX19PC9oMz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXJSZWY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJNb2RhbERlc2NyaXB0b3JGb3JtOyBlbHNlIGxvYWRlclJlZlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJzaXRlcy1tb2RhbC1mb3JtXCIgI215Rm9ybT1cIm5nRm9ybVwiIFtmb3JtR3JvdXBdPVwiTW9kYWxEZXNjcmlwdG9yRm9ybVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoc3VibWl0KT1cImNyZWF0ZU9yRWRpdFNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydGaWxlRXhwbG9yZXI6OkRpcmVjdG9yeU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIk1vZGFsRm9ybURlc2NyaXB0b3JTdWJtaXQubmF0aXZlRWxlbWVudC5jbGljaygpXCI+e3snQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPiJdfQ==
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZpbGUtZXhwbG9yZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbW9kYWwtdHJlZS9maWxlLW1vZGFsLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC10cmVlL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFDNUQsSUFBSSxJQUFJLENBQUM7QUFNVCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1Usa0JBQTJELEVBQzNELEVBQWUsRUFDZixPQUF1QixFQUN4QixlQUErQixFQUMvQixv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SSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztnQkFDakMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNMLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQjthQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUNILFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTFQVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrWEMxQm5DLHNuSUFtRVk7OzJGRHpDQyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9CO2tQQXNCbkIsbUJBQW1CO3NCQUQ3QixLQUFLO2dCQW1CSSxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFHSSxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBZ0txRCx5QkFBeUI7c0JBQW5GLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOekZvcm1hdEVtaXRFdmVudCwgTnpUcmVlTm9kZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvdHJlZSc7XG5pbXBvcnQgKiBhcyBEZXNjcmlwdG9yU2VydmljZSBmcm9tICcuLi8uLi9wcm94eS9kaWduaXRlL2ZpbGUtZXhwbG9yZXIvZGlyZWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50IH0gZnJvbSAnbmctem9ycm8tYW50ZC90cmVlJztcbmltcG9ydCB7IGZpbmFsaXplLCBtYXAsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnNTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xudmFyIHRoYXQ7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmZS1maWxlLW1vZGFsLXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNb2RhbFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRGVzY3JpcHRvclNlcnZpY2U6IERlc2NyaXB0b3JTZXJ2aWNlLkZpbGVEZXNjcmlwdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgKSB7XG4gICAgdGhhdCA9IHRoaXM7XG4gIH1cblxuICAvKirmlofku7bliIbnu4TliJfooaggKi9cbiAgZmlsZUdyb3VwTGlzdDogYW55W10gPSBbXTtcblxuICAvKirpgInmi6nnmoR0cmVl6IqC54K5ICovXG4gIF90aGVTZWxlY3RlZFRyZWVOb2RlOiBhbnkgPSAnJztcbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0aGVTZWxlY3RlZFRyZWVOb2RlKHY6IGFueSkge1xuICAgIHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGUgPSB2O1xuXG4gICAgaWYgKHYgPT0gJycpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICAvKirmraPlnKjnvJbovpHnmoToioLngrkgKi9cbiAgdGhlTm9kZUJlaW5nRWRpdGVkOiBhbnkgPSAnJztcblxuICAvKirlt7LlsZXlvIDnmoToioLngrkgKi9cbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XG5cbiAgLyoq5Zu+54mH5a655ZmoICovXG4gIF9maWxlQ29udGFpbmVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKnRyZWXoioLngrnpgInmi6nlm57osIMgKi9cbiAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoq6I635Y+W5pWw5o2u5ZCO5Zue6LCD57uZZmlsZS1tb2RhbCAqL1xuICBAT3V0cHV0KCkgdHJlZU5vZGVEYXRhID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKirmn6XnnIvmiYDmnInmlofku7blm57osIPlh73mlbDvvIzlnKhmaWxlLW1vZGFs5Lit5aSE55CG6YC76L6RICovXG4gIEBPdXRwdXQoKSBsb29rQWxsQnRuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZmlsZUNvbnRhaW5lck5hbWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lID0gdjtcbiAgICAgIC8vIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vQ2FsbGVkIGFmdGVyIG5nT25Jbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIG9yIGRpcmVjdGl2ZSdzIGNvbnRlbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIGlmICh0aGlzLl9maWxlQ29udGFpbmVyTmFtZSkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrID0gZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuX2ZpbGVDb250YWluZXJOYW1lKSB7XG4gICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKTtcbiAgICB9XG4gIH1cblxuICAvKirojrflj5bmlofku7bliIbnu4QgKi9cbiAgZ2V0RmlsZUdyb3VwTGlzdCgpIHtcbiAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZVxuICAgICAgLmdldExpc3Qoe1xuICAgICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgIHRoaXMuZmlsZUdyb3VwTGlzdCA9IGF3YWl0IHRoaXMuc2V0VGhlVmFsdWVPZlRoZU5vZGVSZWN1cnNpdmVseShyZXMuaXRlbXMpO1xuICAgICAgICB0aGlzLnRyZWVOb2RlRGF0YS5lbWl0KHRoaXMuZmlsZUdyb3VwTGlzdCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKuafpeeci+aJgOacieaWh+S7tiAqL1xuICBvbkxvb2tBbGxCdG4oKSB7XG4gICAgdGhpcy5sb29rQWxsQnRuLmVtaXQoKTtcbiAgfVxuXG4gIC8qKumAkuW9ki3lsIbliJfooajovazljJbkuLrniLblrZDnuqfnu5PmnoQgKi9cbiAgc2V0VGhlVmFsdWVPZlRoZU5vZGVSZWN1cnNpdmVseShhcnJheTogYW55W10sIHBhcmVudElkOiBhbnkgPSBudWxsLCByb290PzogYW55W10pOiBhbnkge1xuICAgIGxldCByb290TGlzdCA9IHJvb3QgfHwgYXJyYXk7XG4gICAgbGV0IHJlc3VsdCA9IGFycmF5LmZpbHRlcihpdGVtID0+IGl0ZW0ucGFyZW50SWQgPT09IHBhcmVudElkKTtcbiAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICAgIHJlc3VsdC5tYXAoKGVsOiBhbnkpID0+IHtcbiAgICAgIGVsLnRpdGxlID0gZWwubmFtZTtcbiAgICAgIGVsLmtleSA9IGVsLmlkO1xuICAgICAgZWwuZW50aXR5ID0gZWwuaWQ7IC8qKiDoioLngrnlgLwgKi9cbiAgICAgIGVsLmV4cGFuZGVkID0gdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhlbC5rZXkpO1xuICAgICAgZWwuY2hpbGRyZW4uc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICAgICAgaWYgKGVsLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZXRUaGVWYWx1ZU9mVGhlTm9kZVJlY3Vyc2l2ZWx5KGVsLmNoaWxkcmVuLCBlbC5pZCwgcm9vdExpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKip0cmVlLeaLluaLvSAqL1xuICBuekV2ZW50KGV2ZW50OiBOekZvcm1hdEVtaXRFdmVudCk6IHZvaWQge31cblxuICAvKip0cmVlLeaLluaLvSAt6aqM6K+BKi9cbiAgYmVmb3JlRHJvcChhcmc6IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50KSB7XG4gICAgY29uc3QgeyBwb3MsIGRyYWdOb2RlLCBub2RlIH0gPSBhcmc7XG4gICAgLy8g5Y+q5aSE55CG5pyJ5pWI55qE5ouW5ou95L2N572uXG4gICAgaWYgKHBvcyA9PT0gMCB8fCBwb3MgPT09IDEgfHwgcG9zID09PSAtMSkge1xuICAgICAgLy8g5qC55o2u5LiN5ZCM55qE5ouW5ou95L2N572u6K6h566X5Y+C5pWwXG4gICAgICBjb25zdCBwYXJlbnRJZCA9IHBvcyA9PT0gMCA/IG5vZGUua2V5IDogbm9kZS5wYXJlbnROb2RlPy5rZXkgfHwgJyc7XG5cbiAgICAgIGxldCBvcmRlcjtcbiAgICAgIGlmIChwb3MgPT09IDEpIHtcbiAgICAgICAgb3JkZXIgPSBub2RlLm9yaWdpbi5vcmRlciArIDE7XG4gICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMCkge1xuICAgICAgICBvcmRlciA9IG5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwb3MgPT09IC0xXG4gICAgICAgIG9yZGVyID0gTWF0aC5tYXgoMCwgbm9kZS5vcmlnaW4ub3JkZXIgLSAxKTtcbiAgICAgIH1cbiAgICAgIC8vIOe7n+S4gOWkhOeQhuenu+WKqOmAu+i+kVxuICAgICAgcmV0dXJuIHRoYXQuX0Rlc2NyaXB0b3JTZXJ2aWNlLm1vdmUoZHJhZ05vZGUua2V5LCB7IHBhcmVudElkLCBvcmRlciB9KS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhhdC5nZXRGaWxlR3JvdXBMaXN0KCkpLFxuICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgfVxuXG4gIHNlbGVjdGVkTm9kZTogTnpUcmVlTm9kZVtdID0gW107XG4gIC8qKnRyZWUtLemAieaLqeiKgueCuSAqL1xuICBhY3RpdmVOb2RlKG5vZGU6IE56VHJlZU5vZGUpIHtcbiAgICBpZiAoKGV2ZW50IGFzIGFueSk/LnRhcmdldD8ubG9jYWxOYW1lID09ICdpJykgcmV0dXJuO1xuICAgIGlmICh0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlPy5rZXkgPT0gbm9kZS5rZXkpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IFtub2RlXTtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gbm9kZTtcbiAgICB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpO1xuICB9XG5cbiAgLyoq5Yik5pat6IqC54K55piv5ZCm6YCJ5LitICovXG4gIGlzTm9kZVNlbGVjdGVkID0gZWwgPT4ge1xuICAgIHJldHVybiBlbC5rZXkgPT09IHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGU/LmtleTtcbiAgfTtcblxuICAvKirngrnlh7vlsZXlvIDmoJHoioLngrnlm77moIfop6blj5EgKi9cbiAgbnpFeHBhbmRDaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgYW5FeHBhbmRlZE5vZGUgPSB0aGlzLmFuRXhwYW5kZWROb2RlO1xuICAgIGlmIChhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhldmVudC5ub2RlLmtleSkpIHtcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5FeHBhbmRlZE5vZGUucHVzaChldmVudC5ub2RlLmtleSk7XG4gICAgfVxuICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBhbkV4cGFuZGVkTm9kZTtcbiAgfVxuXG4gIC8qKuWinuWKoOWIhue7hCAqL1xuICBhZGREZXNjcmlwdG9yQnRuKGl0ZW1zOiBhbnkgPSAnJywgZWRpdCA9IGZhbHNlKSB7XG4gICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbnRhaW5lck5hbWU6IFt0aGlzLl9maWxlQ29udGFpbmVyTmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFyZW50SWQ6IFtpdGVtcz8ua2V5IHx8ICcnXSxcbiAgICB9KTtcbiAgICAvKirnvJbovpEgKi9cbiAgICBpZiAoZWRpdCkge1xuICAgICAgdGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQgPSBpdGVtcy5vcmlnaW47XG4gICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIG5hbWU6IGl0ZW1zLm9yaWdpbi5uYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoq5Yig6Zmk5YiG57uEICovXG4gIGRlbGV0ZURlc2NyaXB0b3JCdG4obm9kZSkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAud2FybignJywge1xuICAgICAgICBrZXk6ICcnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgRmlsZUV4cGxvcmVyOjpEZWxldGlvbkNvbmZpcm1hdGlvbk1lc3NhZ2VgLG5vZGUudGl0bGUpLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogQ29uZmlybWF0aW9uLlN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09ICdjb25maXJtJykge1xuICAgICAgICAgIHRoaXMuX0Rlc2NyaXB0b3JTZXJ2aWNlLmRlbGV0ZShub2RlLmtleSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvck9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRoZU5vZGVCZWluZ0VkaXRlZC5rZXkgPT0gbm9kZS5rZXkpIHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkID0gJyc7XG4gICAgICAgICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKirliIbnu4QgKi9cbiAgLyoq5qih5oCB5qGGLeeKtuaAgS3mmK/lkKbmiZPlvIAgKi9cbiAgTW9kYWxEZXNjcmlwdG9yT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKuaooeaAgeahhi1kZXNjcmlwdG9yLee5geW/meeKtuaAgS3nlKjkuo7noa7lrprmqKHmgIHnmoTnuYHlv5nnirbmgIHmmK/lkKbkuLrnnJ8gKi9cbiAgTW9kYWxEZXNjcmlwdG9yQnVzeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKuaooeaAgeahhi1kZXNjcmlwdG9yLeihqOWNlSAqL1xuICBNb2RhbERlc2NyaXB0b3JGb3JtOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoq5qih5oCB5qGGLWRlc2NyaXB0b3It6KGo5Y2VLS3mjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXG4gIEBWaWV3Q2hpbGQoJ01vZGFsRm9ybURlc2NyaXB0b3JTdWJtaXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgTW9kYWxGb3JtRGVzY3JpcHRvclN1Ym1pdDogRWxlbWVudFJlZjtcblxuICAvKirmqKHmgIHmoYYtZGVzY3JpcHRvci3nirbmgIHmlLnlj5jlm57osIMgKi9cbiAgTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGZvcm1WYWxpZGF0aW9uOiBhbnkgPSAnJztcbiAgcHJpdmF0ZSBfVmFsaWRhdG9yc1NlcnZpY2UgPSBpbmplY3QoVmFsaWRhdG9yc1NlcnZpY2UpO1xuICAvKipm5YiG57uE5qih5oCB5qGG5L+d5a2YICovXG4gIGNyZWF0ZU9yRWRpdFNhdmUoKSB7XG4gICAgbGV0IGlucHV0ID0gdGhpcy5Nb2RhbERlc2NyaXB0b3JGb3JtLnZhbHVlO1xuICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0pO1xuICAgIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnRmlsZUV4cGxvcmVyJykpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybS52YWxpZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLk1vZGFsRGVzY3JpcHRvckJ1c3kpIHJldHVybjtcbiAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckJ1c3kgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkKSB7XG4gICAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZVxuICAgICAgICAudXBkYXRlKHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkLmtleSwgaW5wdXQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yQnVzeSA9IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZShmYWxzZSk7XG4gICAgICAgICAgdGhpcy5nZXRGaWxlR3JvdXBMaXN0KCk7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZVxuICAgICAgLmNyZWF0ZShpbnB1dClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JCdXN5ID0gZmFsc2U7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvclZpc2libGVDaGFuZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgIHAtMCBtYi0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8aDYgY2xhc3M9XCJoNiBtYi0wIGJ0bi1saW5rXCIgcm9sZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cIm9uTG9va0FsbEJ0bigpXCI+e3snRmlsZUV4cGxvcmVyOjpNeURpcmVjdG9yaWVzJyB8IGFicExvY2FsaXphdGlvbn19PC9oNj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIG1zLTJcIiAoY2xpY2suc3RvcCk9XCJhZGREZXNjcmlwdG9yQnRuKClcIj48aVxuICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+XG48L2Rpdj5cbkBpZihmaWxlR3JvdXBMaXN0Lmxlbmd0aD4wKXtcbjxhYnAtdHJlZSBbbm9kZXNdPVwiZmlsZUdyb3VwTGlzdFwiIChuekV4cGFuZENoYW5nZSk9XCJuekV4cGFuZENoYW5nZSgkZXZlbnQpXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCJcbiAgICAoZHJvcE92ZXIpPVwibnpFdmVudCgkZXZlbnQpXCIgW2JlZm9yZURyb3BdPVwiYmVmb3JlRHJvcFwiIChzZWxlY3RlZE5vZGVDaGFuZ2UpPVwiYWN0aXZlTm9kZSgkZXZlbnQpXCIgW2NoYW5nZUNoZWNrYm94V2l0aE5vZGVdPVwidHJ1ZVwiICBbaXNOb2RlU2VsZWN0ZWRdPVwiaXNOb2RlU2VsZWN0ZWRcIj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbWVudSBsZXQtbm9kZT5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiYWRkRGVzY3JpcHRvckJ0bihub2RlKVwiPjxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snRmlsZUV4cGxvcmVyOjpOZXdEaXJlY3RvcnknIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiYWRkRGVzY3JpcHRvckJ0bihub2RlLHRydWUpXCI+PGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cIiBtZS0xIGZhIGZhLXBsdXNcIj48L2k+e3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlRGVzY3JpcHRvckJ0bihub2RlKVwiPjxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVWk6OkRlbGV0ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgYWJwVHJlZUV4cGFuZGVkSWNvblRlbXBsYXRlIGxldC1ub2RlIGxldC1vcmlnaW49XCJvcmlnaW5cIj5cbiAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aD4wXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZS5pc0V4cGFuZGVkID8gbWludXNJY29uIDogcGx1c0ljb25cIj48L25nLWNvbnRhaW5lcj48L2k+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbWludXNJY29uPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAwYzYuMzQ3IDAgMTEuNSA1LjE1MyAxMS41IDExLjVzLTUuMTUzIDExLjUtMTEuNSAxMS41LTExLjUtNS4xNTMtMTEuNS0xMS41IDUuMTUzLTExLjUgMTEuNS0xMS41em0wIDFjNS43OTUgMCAxMC41IDQuNzA1IDEwLjUgMTAuNXMtNC43MDUgMTAuNS0xMC41IDEwLjUtMTAuNS00LjcwNS0xMC41LTEwLjUgNC43MDUtMTAuNSAxMC41LTEwLjV6bS02LjUgMTBoMTN2MWgtMTN2LTF6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjcGx1c0ljb24+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk0xMS41IDBjNi4zNDcgMCAxMS41IDUuMTUzIDExLjUgMTEuNXMtNS4xNTMgMTEuNS0xMS41IDExLjUtMTEuNS01LjE1My0xMS41LTExLjUgNS4xNTMtMTEuNSAxMS41LTExLjV6bTAgMWM1Ljc5NSAwIDEwLjUgNC43MDUgMTAuNSAxMC41cy00LjcwNSAxMC41LTEwLjUgMTAuNS0xMC41LTQuNzA1LTEwLjUtMTAuNSA0LjcwNS0xMC41IDEwLjUtMTAuNXptLjUgMTBoNnYxaC02djZoLTF2LTZoLTZ2LTFoNnYtNmgxdjZ6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLXRyZWU+XG5cbn1cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJNb2RhbERlc2NyaXB0b3JPcGVuXCIgW2J1c3ldPVwiTW9kYWxEZXNjcmlwdG9yQnVzeVwiXG4gICAgKHZpc2libGVDaGFuZ2UpPVwiTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgICAgIDxoMz57e3RoZU5vZGVCZWluZ0VkaXRlZD8oJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbik6KCdGaWxlRXhwbG9yZXI6Ok5ld0RpcmVjdG9yeScgfCBhYnBMb2NhbGl6YXRpb24pfX1cbiAgICAgICAgPC9oMz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXJSZWY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJNb2RhbERlc2NyaXB0b3JGb3JtOyBlbHNlIGxvYWRlclJlZlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJzaXRlcy1tb2RhbC1mb3JtXCIgI215Rm9ybT1cIm5nRm9ybVwiIFtmb3JtR3JvdXBdPVwiTW9kYWxEZXNjcmlwdG9yRm9ybVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoc3VibWl0KT1cImNyZWF0ZU9yRWRpdFNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydGaWxlRXhwbG9yZXI6OkRpcmVjdG9yeU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiBbbG9hZGluZ109XCJNb2RhbERlc2NyaXB0b3JCdXN5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/* eslint-disable @angular-eslint/component-selector */
|
|
2
2
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
3
|
import { FileApiService } from '../../services/file-api.service';
|
|
4
|
+
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "../../services/file-api.service";
|
|
6
7
|
import * as i2 from "@angular/common";
|
|
7
8
|
import * as i3 from "@abp/ng.core";
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
9
|
+
import * as i4 from "@angular/cdk/drag-drop";
|
|
10
|
+
import * as i5 from "../file-modal/file-modal.component";
|
|
11
|
+
import * as i6 from "../../previews/file-preview.component";
|
|
10
12
|
export class FilePickerComponent {
|
|
11
13
|
constructor(_FileApiService) {
|
|
12
14
|
this._FileApiService = _FileApiService;
|
|
@@ -45,12 +47,19 @@ export class FilePickerComponent {
|
|
|
45
47
|
this.selectedFileChange.emit([]);
|
|
46
48
|
this.selectedFileChange.emit(this.selectFormFile);
|
|
47
49
|
}
|
|
50
|
+
/**调整表格位置 */
|
|
51
|
+
drop(event) {
|
|
52
|
+
moveItemInArray(this._fileShowTable, event.previousIndex, event.currentIndex);
|
|
53
|
+
this.selectFormFile = this._fileShowTable;
|
|
54
|
+
this.selectedFileChange.emit(this.selectFormFile);
|
|
55
|
+
// this._fileShowTable.updateValueAndValidity()
|
|
56
|
+
}
|
|
48
57
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FilePickerComponent, deps: [{ token: i1.FileApiService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FilePickerComponent, selector: "fe-file-picker", inputs: { multiple: "multiple", fileContainerName: "fileContainerName", selectFormFile: "selectFormFile" }, outputs: { selectedFileChange: "selectedFileChange" }, usesOnChanges: true, ngImport: i0, template: "<button class=\"btn btn-sm btn-primary ms-2 float-end\" type=\"button\"
|
|
58
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FilePickerComponent, selector: "fe-file-picker", inputs: { multiple: "multiple", fileContainerName: "fileContainerName", selectFormFile: "selectFormFile" }, outputs: { selectedFileChange: "selectedFileChange" }, usesOnChanges: true, ngImport: i0, template: "<button class=\"btn btn-sm btn-primary ms-2 float-end\" type=\"button\"\n (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\"\n (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 30px;\"></th>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>\n <div class=\"drag-handle\" cdkDragHandle>\n <span class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\"\n [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td>{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>", styles: [".table{border-collapse:collapse;table-layout:fixed}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i5.FileModalComponent, selector: "fe-file-modal", inputs: ["fileContainerName", "multiple", "limit", "visible", "selectPickerFile"], outputs: ["visibleChange", "selectFilefn"] }, { kind: "component", type: i6.FilePreviewComponent, selector: "fe-file-preview", inputs: ["width", "src", "preview", "type", "name", "className"] }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
50
59
|
}
|
|
51
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FilePickerComponent, decorators: [{
|
|
52
61
|
type: Component,
|
|
53
|
-
args: [{ selector: 'fe-file-picker', template: "<button class=\"btn btn-sm btn-primary ms-2 float-end\" type=\"button\"
|
|
62
|
+
args: [{ selector: 'fe-file-picker', template: "<button class=\"btn btn-sm btn-primary ms-2 float-end\" type=\"button\"\n (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\"\n (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 30px;\"></th>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>\n <div class=\"drag-handle\" cdkDragHandle>\n <span class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\"\n [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td>{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>", styles: [".table{border-collapse:collapse;table-layout:fixed}\n"] }]
|
|
54
63
|
}], ctorParameters: () => [{ type: i1.FileApiService }], propDecorators: { multiple: [{
|
|
55
64
|
type: Input
|
|
56
65
|
}], fileContainerName: [{
|
|
@@ -60,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
60
69
|
}], selectedFileChange: [{
|
|
61
70
|
type: Output
|
|
62
71
|
}] } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFDVSxlQUErQjtRQUEvQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFNekMsVUFBVTtRQUNWLGNBQVMsR0FBWSxLQUFLLENBQUE7UUFNMUIsVUFBVTtRQUNWLHVCQUFrQixHQUFXLFFBQVEsQ0FBQTtRQWdCM0IsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUVqRCxtQkFBYyxHQUFVLEVBQUUsQ0FBQTtRQVUxQixpQkFBaUI7UUFDakIsY0FBUyxHQUFZLEtBQUssQ0FBQTtJQXhDMUIsQ0FBQztJQUtELElBQ1csUUFBUSxDQUFDLENBQVU7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ1csaUJBQWlCLENBQUMsQ0FBUztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFLRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3RFLElBQUkseUJBQXlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcseUJBQXlCLENBQUE7UUFDakQsQ0FBQztJQUNILENBQUM7SUFNRCxlQUFlO0lBQ2YsYUFBYSxDQUFDLEtBQVk7UUFDeEIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBS0QsYUFBYTtJQUNiLG1CQUFtQixDQUFDLENBQUMsRUFBRSxJQUFJO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBQ0QsWUFBWTtJQUNWLElBQUksQ0FBQyxLQUFVO1FBQ2IsZUFBZSxDQUNiLElBQUksQ0FBQyxjQUFjLEVBQ25CLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDakQsK0NBQStDO0lBQ2pELENBQUM7OEdBbkVRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhPQ1ZoQywyOERBdUNROzsyRkQ3QkssbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjttRkFrQmYsUUFBUTtzQkFEbEIsS0FBSztnQkFRSyxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFTSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZlLWZpbGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICApIHtcblxuICB9XG5cblxuICAvKirmmK/lkKblpJrpgIkgKi9cbiAgX211bHRpcGxlOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtdWx0aXBsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSB2O1xuICB9XG5cbiAgLyoq5Zu+54mH5a655ZmoICovXG4gIF9maWxlQ29udGFpbmVyTmFtZTogc3RyaW5nID0gJ0ltYWdlcydcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmaWxlQ29udGFpbmVyTmFtZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSA9IHY7XG4gIH1cblxuICAvKirlt7LpgInlrprnmoTmlofku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0Rm9ybUZpbGU6IGFueVtdXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGxldCBzZWxlY3RGb3JtRmlsZW5nT25DaGFuZ2VzID0gY2hhbmdlcy5zZWxlY3RGb3JtRmlsZVsnY3VycmVudFZhbHVlJ11cbiAgICBpZiAoc2VsZWN0Rm9ybUZpbGVuZ09uQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9maWxlU2hvd1RhYmxlID0gc2VsZWN0Rm9ybUZpbGVuZ09uQ2hhbmdlc1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBfZmlsZVNob3dUYWJsZTogYW55W10gPSBbXVxuXG4gIC8qKuihqOagvOmAieaLqeeahOaWh+S7tuWbnuiwgyAqL1xuICBfc2VsZWN0RmlsZWZuKGV2ZW50OiBhbnlbXSkge1xuICAgIGxldCBfZmlsZVNob3dUYWJsZSA9IHRoaXMuX0ZpbGVBcGlTZXJ2aWNlLmRlZXBDbG9uZShldmVudClcbiAgICB0aGlzLl9maWxlU2hvd1RhYmxlID0gX2ZpbGVTaG93VGFibGVcbiAgICB0aGlzLnNlbGVjdEZvcm1GaWxlID0gX2ZpbGVTaG93VGFibGVcbiAgICB0aGlzLnNlbGVjdGVkRmlsZUNoYW5nZS5lbWl0KF9maWxlU2hvd1RhYmxlKVxuICB9XG5cbiAgLyoq5qih5oCB5qGGLeeKtuaAgS3mmK/lkKbmiZPlvIAgKi9cbiAgTW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2VcblxuICAvKirliKDpmaTmlofku7booajmoLzpobkgKi9cbiAgZGVsZXRlRmlsZVRhYmxlSXRlbShpLCBmaWxlKSB7XG4gICAgdGhpcy5fZmlsZVNob3dUYWJsZS5zcGxpY2UoaSwgMSlcbiAgICB0aGlzLnNlbGVjdEZvcm1GaWxlID0gdGhpcy5fZmlsZVNob3dUYWJsZVxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ2hhbmdlLmVtaXQoW10pXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdEZvcm1GaWxlKVxuICB9XG4gIC8qKuiwg+aVtOihqOagvOS9jee9riAqL1xuICAgIGRyb3AoZXZlbnQ6IGFueSkge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgICB0aGlzLl9maWxlU2hvd1RhYmxlLFxuICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdEZvcm1GaWxlID0gdGhpcy5fZmlsZVNob3dUYWJsZVxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdEZvcm1GaWxlKVxuICAgICAgLy8gdGhpcy5fZmlsZVNob3dUYWJsZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtcy0yIGZsb2F0LWVuZFwiIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljay5zdG9wKT1cIk1vZGFsT3BlbiA9IHRydWVcIj57eydGaWxlRXhwbG9yZXI6OlNlbGVjdEZpbGUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cblxuPGZlLWZpbGUtbW9kYWwgWyh2aXNpYmxlKV09XCJNb2RhbE9wZW5cIiBbc2VsZWN0UGlja2VyRmlsZV09XCJzZWxlY3RGb3JtRmlsZVwiIFttdWx0aXBsZV09XCJfbXVsdGlwbGVcIlxuICAgIChzZWxlY3RGaWxlZm4pPVwiX3NlbGVjdEZpbGVmbigkZXZlbnQpXCIgW2ZpbGVDb250YWluZXJOYW1lXT1cIl9maWxlQ29udGFpbmVyTmFtZVwiPjwvZmUtZmlsZS1tb2RhbD5cbjx0YWJsZSBjbGFzcz1cInRhYmxlXCIgKm5nSWY9XCJfZmlsZVNob3dUYWJsZS5sZW5ndGg+MFwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOiAzMHB4O1wiPjwvdGg+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj48L3RoPlxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snRmlsZUV4cGxvcmVyOjpGaWxlTmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvdGg+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVTaXplJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2ZpbGVTaG93VGFibGU7bGV0IGkgPWluZGV4XCI+XG4gICAgICAgICAgICA8dHIgY2RrRHJhZyBjZGtEcmFnTG9ja0F4aXM9XCJ5XCIgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8ZmUtZmlsZS1wcmV2aWV3IFt3aWR0aF09XCInODBweCdcIiBbc3JjXT1cIml0ZW0udXJsfHxpdGVtLlVybFwiIFtuYW1lXT1cIml0ZW0ubmFtZXx8aXRlbS5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIml0ZW0ubWltZVR5cGV8fGl0ZW0uTWltZVR5cGVcIiBbcHJldmlld109XCJ0cnVlXCI+PC9mZS1maWxlLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57e2l0ZW0ubmFtZXx8aXRlbS5OYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDx0ZD57e19GaWxlQXBpU2VydmljZS5mb3JtYXRGaWxlU2l6ZShpdGVtLlNpemV8fGl0ZW0uc2l6ZSl9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwLTAgYnRuLWxpZ2h0IFwiIChjbGljay5zdG9wKT1cImRlbGV0ZUZpbGVUYWJsZUl0ZW0oaSxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggcC0yXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90Ym9keT5cbjwvdGFibGU+Il19
|