@bizdoc/core 1.16.9 → 1.16.12
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/assets/system/{Microsoft_Azure.svg → Azure.svg} +0 -0
- package/assets/system/QAD.svg +12 -358
- package/assets/system/priority.svg +19 -0
- package/esm2020/lib/admin/configuration-designer/cube-axes-filter.component.mjs +2 -2
- package/esm2020/lib/admin/configuration-designer/declarations.mjs +108 -0
- package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +125 -224
- package/esm2020/lib/admin/configuration-designer/designer.base.mjs +23 -82
- package/esm2020/lib/admin/configuration-designer/designer.component.mjs +5 -3
- package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +13 -12
- package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +13 -12
- package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +89 -75
- package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +4 -3
- package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +6 -5
- package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +1 -1
- package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +6 -12
- package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +1 -1
- package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +5 -11
- package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +3 -3
- package/esm2020/lib/core/translations.mjs +10 -4
- package/esm2020/lib/home/sign/sign.component.mjs +6 -1
- package/esm2020/lib/system.module.mjs +6 -6
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/bizdoc-core.mjs +478 -522
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +473 -509
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts +1 -1
- package/lib/admin/configuration-designer/declarations.d.ts +203 -0
- package/lib/admin/configuration-designer/designer-element.component.d.ts +48 -66
- package/lib/admin/configuration-designer/designer.base.d.ts +5 -197
- package/lib/admin/configuration-designer/designer.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/cube.component.d.ts +30 -26
- package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/folder.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/form.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/report.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/role.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/rule.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/view.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/widget.component.d.ts +3 -2
- package/lib/core/translations.d.ts +9 -3
- package/lib/system.module.d.ts +16 -16
- package/package.json +1 -1
- package/public-api.d.ts +2 -2
@@ -1,136 +1,117 @@
|
|
1
|
-
import { Component, ContentChild,
|
1
|
+
import { Component, ContentChild, Directive, EventEmitter, Inject, Input, Optional, Output } from "@angular/core";
|
2
2
|
import { FormGroup, Validators } from "@angular/forms";
|
3
|
-
import { Subject, takeUntil } from "rxjs";
|
3
|
+
import { debounceTime, Subject, takeUntil } from "rxjs";
|
4
|
+
import { DesignerRef, programName, FAMILY_SVG } from "./declarations";
|
4
5
|
import { LayoutComponent } from "../../core/layout/layout.component";
|
5
|
-
import {
|
6
|
+
import { ComponentPortal } from "@angular/cdk/portal";
|
6
7
|
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "../../core/
|
8
|
-
import * as i2 from "@angular/
|
9
|
-
import * as i3 from "../../core/
|
10
|
-
import * as i4 from "
|
11
|
-
import * as i5 from "@angular/
|
12
|
-
import * as i6 from "@angular/
|
13
|
-
import * as i7 from "@angular/
|
14
|
-
import * as i8 from "
|
15
|
-
import * as i9 from "@angular/material/
|
16
|
-
import * as i10 from "@angular/material/
|
17
|
-
import * as i11 from "@angular/material/
|
18
|
-
import * as i12 from "@angular/material/
|
8
|
+
import * as i1 from "../../core/slots/pane-ref";
|
9
|
+
import * as i2 from "@angular/forms";
|
10
|
+
import * as i3 from "../../core/component-factory-resolver";
|
11
|
+
import * as i4 from "../system.service";
|
12
|
+
import * as i5 from "@angular/common";
|
13
|
+
import * as i6 from "@angular/cdk/portal";
|
14
|
+
import * as i7 from "@angular/material/list";
|
15
|
+
import * as i8 from "@angular/material/toolbar";
|
16
|
+
import * as i9 from "@angular/material/form-field";
|
17
|
+
import * as i10 from "@angular/material/button";
|
18
|
+
import * as i11 from "@angular/material/input";
|
19
|
+
import * as i12 from "@angular/material/icon";
|
19
20
|
import * as i13 from "../core/ace.input";
|
20
|
-
import * as i14 from "../../core/pipes/
|
21
|
-
import * as i15 from "../../core/
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
this.
|
26
|
-
this.svg = FAMILY_SVG;
|
27
|
-
this.model = _ref.model;
|
28
|
-
}
|
29
|
-
ngOnInit() {
|
30
|
-
if (this.model.template) {
|
31
|
-
const factory = this._cfr.resolve(this.model.template);
|
32
|
-
const cRef = this._econtainer.createComponent(factory, 0);
|
33
|
-
cRef.instance.model = this.model;
|
34
|
-
cRef.instance.mode = 'widget';
|
35
|
-
}
|
36
|
-
else if (this.model.arguments?.length) {
|
37
|
-
}
|
21
|
+
import * as i14 from "../../core/pipes/sanitize-html.pipe";
|
22
|
+
import * as i15 from "../../core/pipes/translate.pipe";
|
23
|
+
import * as i16 from "./declarations";
|
24
|
+
export class EditContentDirective {
|
25
|
+
constructor(templateRef) {
|
26
|
+
this.templateRef = templateRef;
|
38
27
|
}
|
39
28
|
}
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
<ng-container #econtainer></ng-container>
|
45
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SanitizeHtmlPipe, name: "sanitizeHtml" }] });
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementInfoComponent, decorators: [{
|
47
|
-
type: Component,
|
29
|
+
EditContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EditContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
30
|
+
EditContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: EditContentDirective, selector: "[bizdocEditContent]", ngImport: i0 });
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EditContentDirective, decorators: [{
|
32
|
+
type: Directive,
|
48
33
|
args: [{
|
49
|
-
selector: '
|
50
|
-
<div [innerHTML]="(svg[model.family]|sanitizeHtml)||model.family" *ngIf="model.family"></div>
|
51
|
-
<ng-content></ng-content>
|
52
|
-
<ng-container #econtainer></ng-container>
|
53
|
-
`
|
34
|
+
selector: '[bizdocEditContent]'
|
54
35
|
}]
|
55
|
-
}], ctorParameters: function () { return [{ type:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
type: ViewChild,
|
60
|
-
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
61
|
-
}], _arguments: [{
|
62
|
-
type: ViewChild,
|
63
|
-
args: ['arguments', { static: true, read: ViewContainerRef }]
|
64
|
-
}] } });
|
65
|
-
export class DesignerElementAddComponent {
|
66
|
-
constructor(_ref, _injector, _cfr) {
|
67
|
-
this._ref = _ref;
|
68
|
-
this._injector = _injector;
|
69
|
-
this._cfr = _cfr;
|
70
|
-
this.form = new FormGroup({});
|
71
|
-
this.complete = new EventEmitter();
|
36
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
37
|
+
export class WidgetContentDirective {
|
38
|
+
constructor(templateRef) {
|
39
|
+
this.templateRef = templateRef;
|
72
40
|
}
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
}
|
41
|
+
}
|
42
|
+
WidgetContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
43
|
+
WidgetContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: WidgetContentDirective, selector: "[bizdocContent]", ngImport: i0 });
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetContentDirective, decorators: [{
|
45
|
+
type: Directive,
|
46
|
+
args: [{
|
47
|
+
selector: '[bizdocContent]'
|
48
|
+
}]
|
49
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
50
|
+
export class AddContentDirective {
|
51
|
+
constructor(templateRef) {
|
52
|
+
this.templateRef = templateRef;
|
82
53
|
}
|
83
54
|
}
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
<div class="row">
|
89
|
-
<span class="divider"></span>
|
90
|
-
<button mat-icon-button [disabled]="!form.valid" (click)="complete.emit()"><mat-icon>play_circle_outline</mat-icon></button>
|
91
|
-
</div>`, isInline: true, dependencies: [{ kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementAddComponent, decorators: [{
|
93
|
-
type: Component,
|
55
|
+
AddContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
56
|
+
AddContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: AddContentDirective, selector: "[bizdocAddContent]", ngImport: i0 });
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddContentDirective, decorators: [{
|
58
|
+
type: Directive,
|
94
59
|
args: [{
|
95
|
-
selector: '
|
96
|
-
template: `
|
97
|
-
<ng-content></ng-content>
|
98
|
-
<ng-container #econtainer></ng-container>
|
99
|
-
<div class="row">
|
100
|
-
<span class="divider"></span>
|
101
|
-
<button mat-icon-button [disabled]="!form.valid" (click)="complete.emit()"><mat-icon>play_circle_outline</mat-icon></button>
|
102
|
-
</div>`
|
60
|
+
selector: '[bizdocAddContent]'
|
103
61
|
}]
|
104
|
-
}], ctorParameters: function () { return [{ type:
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
}], complete: [{
|
110
|
-
type: Output
|
111
|
-
}], _econtainer: [{
|
112
|
-
type: ViewChild,
|
113
|
-
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
114
|
-
}] } });
|
115
|
-
export class DesignerElementPhaseComponent {
|
116
|
-
constructor(_ref, _fb, _injector, _cfr, _componentFactoryResolver, _service, _element) {
|
62
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
63
|
+
/**
|
64
|
+
*/
|
65
|
+
export class DesignerItemComponent {
|
66
|
+
constructor(_ref, _element, _pane, _fb, _cfr, _service) {
|
117
67
|
this._ref = _ref;
|
68
|
+
this._element = _element;
|
69
|
+
this._pane = _pane;
|
118
70
|
this._fb = _fb;
|
119
|
-
this._injector = _injector;
|
120
71
|
this._cfr = _cfr;
|
121
|
-
this._componentFactoryResolver = _componentFactoryResolver;
|
122
72
|
this._service = _service;
|
123
|
-
this.
|
73
|
+
this.svg = FAMILY_SVG;
|
74
|
+
this.form = new FormGroup({});
|
75
|
+
//@Input() state: string;
|
76
|
+
this.onContinue = new EventEmitter();
|
124
77
|
this.onSave = new EventEmitter();
|
125
78
|
this._destroy = new Subject();
|
126
|
-
this.model = _ref.model;
|
127
79
|
this.mode = _ref.mode;
|
80
|
+
this.model = _ref.model;
|
81
|
+
}
|
82
|
+
attached(componentRef) {
|
83
|
+
const { instance } = componentRef;
|
84
|
+
if (this.model.template) {
|
85
|
+
this._options = instance;
|
86
|
+
instance.model = this.model;
|
87
|
+
if (this.mode === 'add' && !this._options.onContinue) {
|
88
|
+
this.mode = 'edit';
|
89
|
+
this.form.markAsDirty();
|
90
|
+
this.onContinue.emit();
|
91
|
+
}
|
92
|
+
this._options.mode = this.mode;
|
93
|
+
}
|
94
|
+
else {
|
95
|
+
instance.fields = this.model.arguments;
|
96
|
+
instance.formulate();
|
97
|
+
}
|
98
|
+
this.mode !== 'widget' &&
|
99
|
+
this.form.addControl('options', instance.form, { emitEvent: false });
|
128
100
|
}
|
129
101
|
ngOnInit() {
|
130
|
-
if (this.
|
131
|
-
|
132
|
-
|
133
|
-
|
102
|
+
if (this.model.template) {
|
103
|
+
const comp = this._cfr.component(this.model.template);
|
104
|
+
this.options = new ComponentPortal(comp);
|
105
|
+
}
|
106
|
+
else if (this.mode !== 'widget' && this.model.arguments?.length)
|
107
|
+
this.options = new ComponentPortal(LayoutComponent);
|
108
|
+
switch (this.mode) {
|
109
|
+
case 'add':
|
110
|
+
case 'edit':
|
111
|
+
this._addForm();
|
112
|
+
}
|
113
|
+
}
|
114
|
+
_addForm() {
|
134
115
|
const name = this._fb.control(null, Validators.required), title = this._fb.control(null, Validators.required);
|
135
116
|
this.model.resource && title.disable();
|
136
117
|
if (this.model.draft)
|
@@ -140,6 +121,10 @@ export class DesignerElementPhaseComponent {
|
|
140
121
|
this.form.addControl('name', name);
|
141
122
|
this.form.addControl('title', title);
|
142
123
|
if (this.model.privileges) {
|
124
|
+
this.rolesfilter = this._fb.control(null);
|
125
|
+
this.rolesfilter.valueChanges.pipe(debounceTime(150)).subscribe(v => {
|
126
|
+
this.froles = this.roles.filter(r => (r.title || r.name).indexOf(v) > -1);
|
127
|
+
});
|
143
128
|
this.form.addControl('privileges', this._fb.group({
|
144
129
|
rule: null,
|
145
130
|
roles: this._fb.control(null),
|
@@ -154,46 +139,32 @@ export class DesignerElementPhaseComponent {
|
|
154
139
|
})));
|
155
140
|
});
|
156
141
|
}
|
157
|
-
if (this.model.template) {
|
158
|
-
const factory = this._cfr.resolve(this.model.template);
|
159
|
-
const cRef = this._econtainer.createComponent(factory, 0, this._injector);
|
160
|
-
const instance = cRef.instance;
|
161
|
-
instance.model = this.model;
|
162
|
-
instance.mode = this._ref.mode;
|
163
|
-
this.form.addControl('options', instance.form, { emitEvent: false });
|
164
|
-
}
|
165
|
-
else if (this.model.arguments?.length) {
|
166
|
-
const factory = this._componentFactoryResolver.resolveComponentFactory(LayoutComponent);
|
167
|
-
const cRef = this._arguments.createComponent(factory);
|
168
|
-
const instance = cRef.instance;
|
169
|
-
instance.fields = this.model.arguments;
|
170
|
-
instance.formulate();
|
171
|
-
this.form.addControl('options', instance.form, { emitEvent: false });
|
172
|
-
}
|
173
|
-
this.form.patchValue(this.model, { emitEvent: false });
|
174
142
|
this.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
|
175
|
-
this.valid = s === 'VALID';
|
176
|
-
this.dirty = true;
|
177
143
|
});
|
178
|
-
this.
|
179
|
-
}
|
180
|
-
refresh() {
|
181
|
-
this.mode = 'edit';
|
182
|
-
this.form.patchValue(this.model);
|
144
|
+
this.form.patchValue(this.model, { emitEvent: !this.model.draft });
|
183
145
|
}
|
184
146
|
ngAfterViewInit() {
|
185
|
-
|
147
|
+
if (this.mode !== 'widget') {
|
148
|
+
setTimeout(() => this._element.nativeElement.querySelector('input')?.focus());
|
149
|
+
}
|
186
150
|
}
|
187
151
|
unlock(evt) {
|
188
152
|
if (evt.srcElement.tagName !== 'A')
|
189
153
|
return;
|
190
154
|
this.model.resource = null;
|
191
155
|
this.form.get('title').enable();
|
192
|
-
this._ref.
|
156
|
+
this._ref._unlock$.next(false);
|
157
|
+
}
|
158
|
+
continue() {
|
159
|
+
this._ref._state$.next(null);
|
160
|
+
this._options.onContinue && this._options.onContinue();
|
161
|
+
this.onContinue.emit();
|
162
|
+
this.mode = 'edit';
|
193
163
|
}
|
194
164
|
save() {
|
195
165
|
Object.assign(this.model, this.form.value);
|
196
166
|
this.onSave.emit(this.model);
|
167
|
+
this._pane.close();
|
197
168
|
}
|
198
169
|
/**
|
199
170
|
* Ctrl-s save
|
@@ -201,7 +172,7 @@ export class DesignerElementPhaseComponent {
|
|
201
172
|
*/
|
202
173
|
handleKeyboardEvent(event) {
|
203
174
|
if (event.ctrlKey && (event.which === 83 || event.which === 115)) {
|
204
|
-
this.valid && this.save();
|
175
|
+
this.form.valid && this.save();
|
205
176
|
event.preventDefault();
|
206
177
|
}
|
207
178
|
}
|
@@ -210,99 +181,29 @@ export class DesignerElementPhaseComponent {
|
|
210
181
|
this._destroy?.complete();
|
211
182
|
}
|
212
183
|
}
|
213
|
-
|
214
|
-
|
215
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type:
|
184
|
+
DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: DesignerRef }, { token: i0.ElementRef }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.BizDocComponentFactoryResolver }, { token: i4.SystemService }], target: i0.ɵɵFactoryTarget.Component });
|
185
|
+
DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { form: "form" }, outputs: { onContinue: "continue", onSave: "save" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }], ngImport: i0, template: "<ng-conatiner [ngSwitch]=\"mode\">\r\n <ng-container *ngSwitchCase=\"'add'\">\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"!form.valid\" (click)=\"continue()\">{{'Continue'|translate}} <mat-icon>double_arrow</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'edit'\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.valid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\"\r\n (document:keydown)=\"handleKeyboardEvent($event)\">\r\n <!--<ng-container #econtainer></ng-container>-->\r\n <div class=\"row\" *ngIf=\"form.contains('name')\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n \r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </div>\r\n\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n\r\n <ng-container *ngIf=\"form.contains('privileges')\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <input matInput [formControl]=\"rolesfilter\"/>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title||r.name}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n </form>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n <ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n </ng-container>\r\n</ng-conatiner>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}.actions{margin:8px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { 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: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i6.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i7.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i7.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i14.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] });
|
186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
|
216
187
|
type: Component,
|
217
|
-
args: [{ selector: 'bizdoc-designer-element
|
218
|
-
}], ctorParameters: function () { return [{ type:
|
188
|
+
args: [{ selector: 'bizdoc-designer-element', template: "<ng-conatiner [ngSwitch]=\"mode\">\r\n <ng-container *ngSwitchCase=\"'add'\">\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"!form.valid\" (click)=\"continue()\">{{'Continue'|translate}} <mat-icon>double_arrow</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'edit'\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.valid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\"\r\n (document:keydown)=\"handleKeyboardEvent($event)\">\r\n <!--<ng-container #econtainer></ng-container>-->\r\n <div class=\"row\" *ngIf=\"form.contains('name')\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n \r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </div>\r\n\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n\r\n <ng-container *ngIf=\"form.contains('privileges')\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <input matInput [formControl]=\"rolesfilter\"/>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title||r.name}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n </form>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n <ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n </ng-container>\r\n</ng-conatiner>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}.actions{margin:8px}\n"] }]
|
189
|
+
}], ctorParameters: function () { return [{ type: i16.DesignerRef, decorators: [{
|
219
190
|
type: Inject,
|
220
191
|
args: [DesignerRef]
|
221
|
-
}] }, { type:
|
222
|
-
|
223
|
-
|
192
|
+
}] }, { type: i0.ElementRef }, { type: i1.PaneRef, decorators: [{
|
193
|
+
type: Optional
|
194
|
+
}] }, { type: i2.FormBuilder }, { type: i3.BizDocComponentFactoryResolver }, { type: i4.SystemService }]; }, propDecorators: { form: [{
|
224
195
|
type: Input
|
196
|
+
}], onContinue: [{
|
197
|
+
type: Output,
|
198
|
+
args: ['continue']
|
225
199
|
}], onSave: [{
|
226
200
|
type: Output,
|
227
201
|
args: ['save']
|
228
|
-
}],
|
229
|
-
type: ViewChild,
|
230
|
-
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
231
|
-
}], _arguments: [{
|
232
|
-
type: ViewChild,
|
233
|
-
args: ['arguments', { static: true, read: ViewContainerRef }]
|
234
|
-
}], handleKeyboardEvent: [{
|
235
|
-
type: HostListener,
|
236
|
-
args: ['document:keydown', ['$event']]
|
237
|
-
}] } });
|
238
|
-
/**
|
239
|
-
*/
|
240
|
-
export class DesignerItemComponent {
|
241
|
-
constructor(_ref, _pane) {
|
242
|
-
this._ref = _ref;
|
243
|
-
this._pane = _pane;
|
244
|
-
this.save = new EventEmitter();
|
245
|
-
this.mode = _ref.mode;
|
246
|
-
this.model = _ref.model;
|
247
|
-
}
|
248
|
-
ngOnChanges() {
|
249
|
-
//if (this.state) this.phase = this.phases?.find(p => p.state === this.state);
|
250
|
-
//else this.phase = this.phases?.first;
|
251
|
-
}
|
252
|
-
ngAfterContentInit() {
|
253
|
-
if (this.mode !== 'widget') {
|
254
|
-
this.phases?.forEach(p => p.onSave.subscribe(e => {
|
255
|
-
this.save.emit(e);
|
256
|
-
this._pane.close();
|
257
|
-
}));
|
258
|
-
this.add?.complete.subscribe(() => {
|
259
|
-
this._ref.mode = this.mode = 'edit';
|
260
|
-
this._ref._state$.next(null);
|
261
|
-
this.phases.first.refresh();
|
262
|
-
});
|
263
|
-
}
|
264
|
-
}
|
265
|
-
}
|
266
|
-
DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: DesignerRef }, { token: i15.PaneRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
267
|
-
DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { state: "state" }, outputs: { save: "save" }, queries: [{ propertyName: "info", first: true, predicate: DesignerElementInfoComponent, descendants: true }, { propertyName: "add", first: true, predicate: DesignerElementAddComponent, descendants: true }, { propertyName: "phases", predicate: DesignerElementPhaseComponent }], usesOnChanges: true, ngImport: i0, template: `
|
268
|
-
<ng-content select="bizdoc-designer-element-widget"
|
269
|
-
*ngIf="mode==='widget'; else addedit"></ng-content>
|
270
|
-
<ng-template #addedit>
|
271
|
-
<ng-content select="bizdoc-designer-element-add"
|
272
|
-
*ngIf="mode === 'add' && add; else edit"></ng-content>
|
273
|
-
</ng-template>
|
274
|
-
<ng-template #edit>
|
275
|
-
<ng-content select="bizdoc-designer-element-edit"></ng-content>
|
276
|
-
</ng-template>`, isInline: true, styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
277
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
|
278
|
-
type: Component,
|
279
|
-
args: [{ selector: 'bizdoc-designer-element', template: `
|
280
|
-
<ng-content select="bizdoc-designer-element-widget"
|
281
|
-
*ngIf="mode==='widget'; else addedit"></ng-content>
|
282
|
-
<ng-template #addedit>
|
283
|
-
<ng-content select="bizdoc-designer-element-add"
|
284
|
-
*ngIf="mode === 'add' && add; else edit"></ng-content>
|
285
|
-
</ng-template>
|
286
|
-
<ng-template #edit>
|
287
|
-
<ng-content select="bizdoc-designer-element-edit"></ng-content>
|
288
|
-
</ng-template>`, styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"] }]
|
289
|
-
}], ctorParameters: function () { return [{ type: i4.DesignerRef, decorators: [{
|
290
|
-
type: Inject,
|
291
|
-
args: [DesignerRef]
|
292
|
-
}] }, { type: i15.PaneRef, decorators: [{
|
293
|
-
type: Optional
|
294
|
-
}] }]; }, propDecorators: { info: [{
|
202
|
+
}], editContent: [{
|
295
203
|
type: ContentChild,
|
296
|
-
args: [
|
297
|
-
}],
|
204
|
+
args: [EditContentDirective]
|
205
|
+
}], widgetContent: [{
|
298
206
|
type: ContentChild,
|
299
|
-
args: [
|
300
|
-
}], phases: [{
|
301
|
-
type: ContentChildren,
|
302
|
-
args: [DesignerElementPhaseComponent]
|
303
|
-
}], state: [{
|
304
|
-
type: Input
|
305
|
-
}], save: [{
|
306
|
-
type: Output
|
207
|
+
args: [WidgetContentDirective]
|
307
208
|
}] } });
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBNEIsWUFBWSxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQTBCLFNBQVMsRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM1IsT0FBTyxFQUFlLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFJckUsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsV0FBVyxFQUFjLFVBQVUsRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRM0gsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUNVLElBQW9DLEVBQ2YsSUFBc0I7UUFEM0MsU0FBSSxHQUFKLElBQUksQ0FBZ0M7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQU5yRCxRQUFHLEdBQUcsVUFBVSxDQUFDO1FBUWYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBcUIsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFD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QXFCLGtCQVlqQixXQUFXO3NHQVpmLHFCQUFxQix3SkFDYiw0QkFBNEIsc0VBQzVCLDJCQUEyQiw0REFDeEIsNkJBQTZCLGtEQWZwQzs7Ozs7Ozs7O21CQVNPOzJGQUdYLHFCQUFxQjtrQkFmNUIsU0FBUzsrQkFDRSx5QkFBeUIsWUFFekI7Ozs7Ozs7OzttQkFTTzs7MEJBZWQsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs0Q0FaaUMsSUFBSTtzQkFBL0MsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBQ0MsR0FBRztzQkFBN0MsWUFBWTt1QkFBQywyQkFBMkI7Z0JBQ08sTUFBTTtzQkFBckQsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBQ3JDLEtBQUs7c0JBQWIsS0FBSztnQkFDYSxJQUFJO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvbGF5b3V0L2xheW91dC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWZcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgRWxlbWVudE1vZGVsLCBwcm9ncmFtTmFtZSwgRGVzaWduTW9kZSwgRkFNSUxZX1NWRywgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudC13aWRnZXQnLCB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgW2lubmVySFRNTF09XCIoc3ZnW21vZGVsLmZhbWlseV18c2FuaXRpemVIdG1sKXx8bW9kZWwuZmFtaWx5XCIgKm5nSWY9XCJtb2RlbC5mYW1pbHlcIj48L2Rpdj5cclxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48bmctY29udGFpbmVyICNlY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG5gIH0pXHJcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckVsZW1lbnRJbmZvQ29tcG9uZW50IHtcclxuICBzdmcgPSBGQU1JTFlfU1ZHO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw8YW55PjtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYXJndW1lbnRzJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2FyZ3VtZW50czogVmlld0NvbnRhaW5lclJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NmcjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICkge1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCk7XHJcbiAgICAgIGNSZWYuaW5zdGFuY2UubW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGUgPSAnd2lkZ2V0JztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtYWRkJyxcclxuICB0ZW1wbGF0ZTogYFxyXG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiIChjbGljayk9XCJjb21wbGV0ZS5lbWl0KClcIj48bWF0LWljb24+cGxheV9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+PC9idXR0b24+XHJcbjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyRWxlbWVudEFkZENvbXBvbmVudCB7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSBwcml2YXRlIF9yZWY6IERlc2lnbmVyUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9jZnI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCh0aGlzLl9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsKS50ZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUoKHRoaXMuX3JlZi5tb2RlbCBhcyBFbGVtZW50TW9kZWwpLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5fcmVmLm1vZGVsO1xyXG4gICAgICBpbnN0YW5jZS5tb2RlID0gJ2FkZCc7XHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1kZXNpZ25lci1lbGVtZW50LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyRWxlbWVudFBoYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzdGF0ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQE91dHB1dCgnc2F2ZScpIHJlYWRvbmx5IG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvL0BWaWV3Q2hpbGQoJ1tiaXpkb2NDb250ZW50XScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KSBfdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9lY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2FyZ3VtZW50cycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9hcmd1bWVudHM6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHJvbGVzOiBSb2xlW107XHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgZGlydHk6IGJvb2xlYW47XHJcbiAgICBtb2RlOiBEZXNpZ25Nb2RlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gICAgdGhpcy5tb2RlID0gX3JlZi5tb2RlO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICd3aWRnZXQnKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkJykgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSAmJiB0aXRsZS5kaXNhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgdCAmJiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKVxyXG4gICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnbmFtZScsIG5hbWUpO1xyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3RpdGxlJywgdGl0bGUpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwucHJpdmlsZWdlcykge1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgncHJpdmlsZWdlcycsXHJcbiAgICAgICAgdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgcnVsZTogbnVsbCxcclxuICAgICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnJvbGVzKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSByLmNvbmNhdCgodGhpcy5fcmVmLmRlc2lnbmVyLnJvbGVzIGFzIEVsZW1lbnRNb2RlbFtdKS5cclxuICAgICAgICAgIGZpbHRlcihyID0+ICFyLmRpc2FibGVkKS5cclxuICAgICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiByLmRhdGFUeXBlXHJcbiAgICAgICAgICB9KSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgaW5zdGFuY2UubW9kZSA9IHRoaXMuX3JlZi5tb2RlO1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIGluc3RhbmNlLmZvcm0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMYXlvdXRDb21wb25lbnQpO1xyXG4gICAgICBjb25zdCBjUmVmID0gdGhpcy5fYXJndW1lbnRzLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcclxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG4gICAgICBpbnN0YW5jZS5maWVsZHMgPSB0aGlzLm1vZGVsLmFyZ3VtZW50cztcclxuICAgICAgaW5zdGFuY2UuZm9ybXVsYXRlKCk7XHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWQgPSBzID09PSAnVkFMSUQnO1xyXG4gICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMubW9kZSA9ICdlZGl0JztcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpKTtcclxuICB9XHJcbiAgdW5sb2NrKGV2dDogRXZlbnQpIHtcclxuICAgIGlmICgoZXZ0LnNyY0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09ICdBJykgcmV0dXJuO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSA9IG51bGw7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCd0aXRsZScpLmVuYWJsZSgpO1xyXG4gICAgdGhpcy5fcmVmLl9sb2NrJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtd2lkZ2V0XCJcclxuICAgICAgKm5nSWY9XCJtb2RlPT09J3dpZGdldCc7IGVsc2UgYWRkZWRpdFwiPjwvbmctY29udGVudD5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWRkZWRpdD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtYWRkXCJcclxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdhZGQnICYmIGFkZDsgZWxzZSBlZGl0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWRpdD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtZWRpdFwiPjwvbmctY29udGVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+YFxyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQge1xyXG4gIEBDb250ZW50Q2hpbGQoRGVzaWduZXJFbGVtZW50SW5mb0NvbXBvbmVudCkgaW5mbzogRGVzaWduZXJFbGVtZW50SW5mb0NvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKERlc2lnbmVyRWxlbWVudEFkZENvbXBvbmVudCkgYWRkOiBEZXNpZ25lckVsZW1lbnRBZGRDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihEZXNpZ25lckVsZW1lbnRQaGFzZUNvbXBvbmVudCkgcGhhc2VzOiBRdWVyeUxpc3Q8RGVzaWduZXJFbGVtZW50UGhhc2VDb21wb25lbnQ+O1xyXG4gIEBJbnB1dCgpIHN0YXRlOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgbW9kZTogRGVzaWduTW9kZTtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuICBkaXJ0eTogYm9vbGVhbjtcclxuICBtb2RlbDogRWxlbWVudE1vZGVsPGFueT47XHJcbiAgcGhhc2U6IERlc2lnbmVyRWxlbWVudFBoYXNlQ29tcG9uZW50O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZixcclxuICApIHtcclxuICAgIHRoaXMubW9kZSA9IF9yZWYubW9kZTtcclxuICAgIHRoaXMubW9kZWwgPSBfcmVmLm1vZGVsIGFzIEVsZW1lbnRNb2RlbDtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAvL2lmICh0aGlzLnN0YXRlKSB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXM/LmZpbmQocCA9PiBwLnN0YXRlID09PSB0aGlzLnN0YXRlKTtcclxuICAgIC8vZWxzZSB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXM/LmZpcnN0O1xyXG4gIH1cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnd2lkZ2V0Jykge1xyXG4gICAgICB0aGlzLnBoYXNlcz8uZm9yRWFjaChwID0+IHAub25TYXZlLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0aGlzLnNhdmUuZW1pdChlKTtcclxuICAgICAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgICAgIH0pKTtcclxuICAgICAgdGhpcy5hZGQ/LmNvbXBsZXRlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVmLm1vZGUgPSB0aGlzLm1vZGUgPSAnZWRpdCc7XHJcbiAgICAgICAgdGhpcy5fcmVmLl9zdGF0ZSQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnBoYXNlcy5maXJzdC5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhdmFsaWQgfHwgIWRpcnR5XCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG48L21hdC10b29sYmFyPlxyXG48cCBjbGFzcz1cImhlbHBcIj57e21vZGVsLmhlbHB9fTwvcD5cclxuPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkICN0aXRsZSAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8cCAqbmdJZj1cIm1vZGVsLnJlc291cmNlXCIgY2xhc3M9XCJtZXNzYWdlXCIgKGNsaWNrKT1cInVubG9jaygkZXZlbnQpXCIgW2lubmVySFRNTF09XCInVW5sb2NrJ3x0cmFuc2xhdGVcIj48L3A+XHJcblxyXG4gICAgPCEtLTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfdGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj4tLT5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAjZWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiAjYXJndW1lbnRzPjwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5jb250cm9scy5wcml2aWxlZ2VzXCIgZm9ybUdyb3VwTmFtZT1cInByaXZpbGVnZXNcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J1ByaXZpbGVnZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgZm9ybUNvbnRyb2xOYW1lPVwicm9sZXNcIiAqbmdJZj1cInJvbGVzXCI+XHJcbiAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfX08L21hdC1saXN0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0NvbmRpdGlvbid8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwicnVsZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnUHJvZ3JhbW1hYmxlRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT5cclxuIl19
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBMEMsWUFBWSxFQUFtQixTQUFTLEVBQWMsWUFBWSxFQUFnQixNQUFNLEVBQVksS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFxRSxNQUFNLGVBQWUsQ0FBQztBQUN2VSxPQUFPLEVBQTRCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEQsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsV0FBVyxFQUFjLFVBQVUsRUFBNEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFtQixlQUFlLEVBQVUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTS9FLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFBbUIsV0FBaUM7UUFBakMsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO0lBQUksQ0FBQzs7aUhBRDlDLG9CQUFvQjtxR0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7O0FBT0QsTUFBTSxPQUFPLHNCQUFz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RCxZQUFZO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyUmVmLCBFbGVtZW50TW9kZWwsIHByb2dyYW1OYW1lLCBEZXNpZ25Nb2RlLCBGQU1JTFlfU1ZHLCBEZXNpZ25lckVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvbGF5b3V0L2xheW91dC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ2RrUG9ydGFsT3V0bGV0LCBDb21wb25lbnRQb3J0YWwsIFBvcnRhbCB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYml6ZG9jRWRpdENvbnRlbnRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdENvbnRlbnREaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHsgfVxyXG59XHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2JpemRvY0NvbnRlbnRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29udGVudERpcmVjdGl2ZSB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPikgeyB9XHJcbn1cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYml6ZG9jQWRkQ29udGVudF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRDb250ZW50RGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7IH1cclxufVxyXG5cclxuLyoqXHJcbiovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgRGVzaWduZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICByZWFkb25seSBzdmcgPSBGQU1JTFlfU1ZHO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIC8vQElucHV0KCkgc3RhdGU6IHN0cmluZztcclxuICBAT3V0cHV0KCdjb250aW51ZScpIHJlYWRvbmx5IG9uQ29udGludWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgnc2F2ZScpIHJlYWRvbmx5IG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudE1vZGVsPigpO1xyXG4gIHJvbGVzOiBSb2xlW107XHJcbiAgZnJvbGVzOiBSb2xlW107XHJcbiAgQENvbnRlbnRDaGlsZChFZGl0Q29udGVudERpcmVjdGl2ZSkgZWRpdENvbnRlbnQ6IEVkaXRDb250ZW50RGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoV2lkZ2V0Q29udGVudERpcmVjdGl2ZSkgd2lkZ2V0Q29udGVudDogV2lkZ2V0Q29udGVudERpcmVjdGl2ZTtcclxuICBvcHRpb25zOiBQb3J0YWw8YW55PjtcclxuICBtb2RlOiBEZXNpZ25Nb2RlO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw8YW55PjtcclxuICByb2xlc2ZpbHRlcjogRm9ybUNvbnRyb2w7XHJcbiAgcHJpdmF0ZSBfb3B0aW9uczogRGVzaWduZXJFbGVtZW50Q29tcG9uZW50PGFueT47XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSBwcml2YXRlIF9yZWY6IERlc2lnbmVyUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3BhbmU6IFBhbmVSZWYsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9jZnI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLm1vZGUgPSBfcmVmLm1vZGU7XHJcbiAgICB0aGlzLm1vZGVsID0gX3JlZi5tb2RlbCBhcyBFbGVtZW50TW9kZWw7XHJcbiAgfVxyXG4gIGF0dGFjaGVkKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+PiB8IENvbXBvbmVudFJlZjxMYXlvdXRDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCB7IGluc3RhbmNlIH0gPSBjb21wb25lbnRSZWY7XHJcbiAgICBpZiAodGhpcy5tb2RlbC50ZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLl9vcHRpb25zID0gaW5zdGFuY2UgYXMgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50PGFueT47XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2FkZCcgJiYgIXRoaXMuX29wdGlvbnMub25Db250aW51ZSkge1xyXG4gICAgICAgIHRoaXMubW9kZSA9ICdlZGl0JztcclxuICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgICAgICB0aGlzLm9uQ29udGludWUuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX29wdGlvbnMubW9kZSA9IHRoaXMubW9kZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAoaW5zdGFuY2UgYXMgTGF5b3V0Q29tcG9uZW50KS5maWVsZHMgPSB0aGlzLm1vZGVsLmFyZ3VtZW50cztcclxuICAgICAgKGluc3RhbmNlIGFzIExheW91dENvbXBvbmVudCkuZm9ybXVsYXRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGUgIT09ICd3aWRnZXQnICYmXHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9jZnIuY29tcG9uZW50KHRoaXMubW9kZWwudGVtcGxhdGUpO1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSBuZXcgQ29tcG9uZW50UG9ydGFsPERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+Pihjb21wKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZSAhPT0gJ3dpZGdldCcgJiYgdGhpcy5tb2RlbC5hcmd1bWVudHM/Lmxlbmd0aClcclxuICAgICAgdGhpcy5vcHRpb25zID0gbmV3IENvbXBvbmVudFBvcnRhbChMYXlvdXRDb21wb25lbnQpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XHJcbiAgICAgIGNhc2UgJ2FkZCc6XHJcbiAgICAgIGNhc2UgJ2VkaXQnOlxyXG4gICAgICAgIHRoaXMuX2FkZEZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfYWRkRm9ybSgpIHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB0aXRsZSA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLm1vZGVsLnJlc291cmNlICYmIHRpdGxlLmRpc2FibGUoKTtcclxuICAgIGlmICh0aGlzLm1vZGVsLmRyYWZ0KSB0aXRsZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgodDogc3RyaW5nKSA9PlxyXG4gICAgICB0ICYmIG5hbWUuc2V0VmFsdWUocHJvZ3JhbU5hbWUodCkpXHJcbiAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICBuYW1lLmRpc2FibGUoKTtcclxuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCduYW1lJywgbmFtZSk7XHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgndGl0bGUnLCB0aXRsZSk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5wcml2aWxlZ2VzKSB7XHJcbiAgICAgIHRoaXMucm9sZXNmaWx0ZXIgPSB0aGlzLl9mYi5jb250cm9sKG51bGwpO1xyXG4gICAgICB0aGlzLnJvbGVzZmlsdGVyLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxNTApKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgdGhpcy5mcm9sZXMgPSB0aGlzLnJvbGVzLmZpbHRlcihyID0+IChyLnRpdGxlIHx8IHIubmFtZSkuaW5kZXhPZih2KSA+IC0xKVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3ByaXZpbGVnZXMnLFxyXG4gICAgICAgIHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgICAgIHJ1bGU6IG51bGwsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5fZmIuY29udHJvbDxzdHJpbmdbXT4obnVsbCksXHJcbiAgICAgICAgfSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5fc2VydmljZS5yb2xlcygpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICB0aGlzLnJvbGVzID0gci5jb25jYXQoKHRoaXMuX3JlZi5kZXNpZ25lci5yb2xlcyBhcyBFbGVtZW50TW9kZWxbXSkuXHJcbiAgICAgICAgICBmaWx0ZXIociA9PiAhci5kaXNhYmxlZCkuXHJcbiAgICAgICAgICBtYXAociA9PiAoe1xyXG4gICAgICAgICAgICBuYW1lOiByLm5hbWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogci5kYXRhVHlwZVxyXG4gICAgICAgICAgfSkpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHMgPT4ge1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsLCB7IGVtaXRFdmVudDogIXRoaXMubW9kZWwuZHJhZnQgfSk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgIT09ICd3aWRnZXQnKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LmZvY3VzKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICB1bmxvY2soZXZ0OiBFdmVudCkge1xyXG4gICAgaWYgKChldnQuc3JjRWxlbWVudCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSAhPT0gJ0EnKSByZXR1cm47XHJcbiAgICB0aGlzLm1vZGVsLnJlc291cmNlID0gbnVsbDtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3RpdGxlJykuZW5hYmxlKCk7XHJcbiAgICB0aGlzLl9yZWYuX3VubG9jayQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG4gIGNvbnRpbnVlKCkge1xyXG4gICAgdGhpcy5fcmVmLl9zdGF0ZSQubmV4dChudWxsKTtcclxuICAgIHRoaXMuX29wdGlvbnMub25Db250aW51ZSAmJiB0aGlzLl9vcHRpb25zLm9uQ29udGludWUoKTtcclxuICAgIHRoaXMub25Db250aW51ZS5lbWl0KCk7XHJcbiAgICB0aGlzLm1vZGUgPSAnZWRpdCc7XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgdGhpcy5fcGFuZS5jbG9zZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jdHJsS2V5ICYmIChldmVudC53aGljaCA9PT0gODMgfHwgZXZlbnQud2hpY2ggPT09IDExNSkpIHtcclxuICAgICAgdGhpcy5mb3JtLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb25hdGluZXIgW25nU3dpdGNoXT1cIm1vZGVcIj5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWRkJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNcIiAoYXR0YWNoZWQpPVwiYXR0YWNoZWQoJGV2ZW50KVwiIFtjZGtQb3J0YWxPdXRsZXRdPVwib3B0aW9uc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBhY3Rpb25zXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkXCIgKGNsaWNrKT1cImNvbnRpbnVlKClcIj57eydDb250aW51ZSd8dHJhbnNsYXRlfX0mbmJzcDs8bWF0LWljb24+ZG91YmxlX2Fycm93PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlZGl0J1wiPlxyXG4gICAgPG1hdC10b29sYmFyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8ICFmb3JtLmRpcnR5XCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9tYXQtdG9vbGJhcj5cclxuICAgIDxwIGNsYXNzPVwiaGVscFwiPnt7bW9kZWwuaGVscH19PC9wPlxyXG4gICAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIlxyXG4gICAgICAgICAgKGRvY3VtZW50OmtleWRvd24pPVwiaGFuZGxlS2V5Ym9hcmRFdmVudCgkZXZlbnQpXCI+XHJcbiAgICAgIDwhLS08bmctY29udGFpbmVyICNlY29udGFpbmVyPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmb3JtLmNvbnRhaW5zKCduYW1lJylcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgcmVxdWlyZWQgI3RpdGxlIC8+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cCAqbmdJZj1cIm1vZGVsLnJlc291cmNlXCIgY2xhc3M9XCJtZXNzYWdlXCIgKGNsaWNrKT1cInVubG9jaygkZXZlbnQpXCIgW2lubmVySFRNTF09XCInVW5sb2NrJ3x0cmFuc2xhdGVcIj48L3A+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVkaXRDb250ZW50Py50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNcIiAoYXR0YWNoZWQpPVwiYXR0YWNoZWQoJGV2ZW50KVwiIFtjZGtQb3J0YWxPdXRsZXRdPVwib3B0aW9uc1wiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0uY29udGFpbnMoJ3ByaXZpbGVnZXMnKVwiIGZvcm1Hcm91cE5hbWU9XCJwcml2aWxlZ2VzXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3snUHJpdmlsZWdlcyd8dHJhbnNsYXRlfX08L2gyPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwicm9sZXNmaWx0ZXJcIi8+XHJcbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBmb3JtQ29udHJvbE5hbWU9XCJyb2xlc1wiICpuZ0lmPVwicm9sZXNcIj5cclxuICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfHxyLm5hbWV9fTwvbWF0LWxpc3Qtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxiaXpkb2MtYWNlLWlucHV0IFtwbGFjZWhvbGRlcl09XCInQ29uZGl0aW9uJ3x0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJydWxlXCI+PC9iaXpkb2MtYWNlLWlucHV0PlxyXG4gICAgICAgICAgPG1hdC1oaW50PiB7eyAnUHJvZ3JhbW1hYmxlRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICA8ZGl2IFtpbm5lckhUTUxdPVwiKHN2Z1ttb2RlbC5mYW1pbHldfHNhbml0aXplSHRtbCl8fG1vZGVsLmZhbWlseVwiICpuZ0lmPVwibW9kZWwuZmFtaWx5XCI+PC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndpZGdldENvbnRlbnQ/LnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc1wiIChhdHRhY2hlZCk9XCJhdHRhY2hlZCgkZXZlbnQpXCIgW2Nka1BvcnRhbE91dGxldF09XCJvcHRpb25zXCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29uYXRpbmVyPlxyXG4iXX0=
|