@bizdoc/core 1.15.7 → 1.16.0
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/bizdoc-schema.json +14 -13
- package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +115 -44
- package/esm2020/lib/admin/configuration-designer/designer.base.mjs +29 -37
- package/esm2020/lib/admin/configuration-designer/designer.component.mjs +80 -63
- package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +8 -6
- package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +4 -4
- package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +5 -7
- package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +32 -25
- package/esm2020/lib/admin/configuration-designer/elements/cube-index-utility.component.mjs +32 -0
- package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +65 -53
- package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +2 -2
- package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +11 -11
- package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +31 -41
- package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +25 -19
- package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +5 -5
- package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +2 -2
- package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +12 -8
- package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +11 -15
- package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +12 -8
- package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +9 -3
- package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +11 -11
- package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +5 -6
- package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +2 -2
- package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +11 -11
- package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +12 -8
- package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +9 -11
- package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +10 -4
- package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +6 -1
- package/esm2020/lib/admin/configuration-designer/privileges.component.mjs +25 -15
- package/esm2020/lib/admin/form/designer/designer.component.mjs +15 -7
- package/esm2020/lib/admin/patterns/patterns.component.mjs +1 -1
- package/esm2020/lib/core/layout/layout.component.mjs +18 -30
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/translations.mjs +3 -1
- package/esm2020/lib/cube/cube-info.service.mjs +1 -1
- package/esm2020/lib/cube/cube.service.mjs +1 -1
- package/esm2020/lib/cube/declarations.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.base.mjs +2 -2
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +1 -1
- package/esm2020/lib/cube/matrix/table.component.mjs +19 -19
- package/esm2020/lib/cube/sum/sum.component.mjs +1 -1
- package/esm2020/lib/reports/cube/usage-base.mjs +1 -1
- package/esm2020/lib/shared.module.mjs +3 -1
- package/esm2020/lib/system.module.mjs +7 -6
- package/esm2020/lib/views/cube/parallel.component.mjs +1 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/bizdoc-core.mjs +5844 -5707
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +6297 -6159
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/configuration-designer/designer-element.component.d.ts +30 -10
- package/lib/admin/configuration-designer/designer.base.d.ts +40 -31
- package/lib/admin/configuration-designer/designer.component.d.ts +10 -7
- package/lib/admin/configuration-designer/elements/action.component.d.ts +2 -0
- package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts +4 -4
- package/lib/admin/configuration-designer/elements/cube-index-utility.component.d.ts +12 -0
- package/lib/admin/configuration-designer/elements/cube.component.d.ts +15 -5
- package/lib/admin/configuration-designer/elements/folder.component.d.ts +4 -1
- package/lib/admin/configuration-designer/elements/form.component.d.ts +8 -2
- package/lib/admin/configuration-designer/elements/guide.component.d.ts +5 -2
- package/lib/admin/configuration-designer/elements/pivot-view.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/report.component.d.ts +4 -1
- package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +2 -4
- package/lib/admin/configuration-designer/elements/role.component.d.ts +3 -0
- package/lib/admin/configuration-designer/elements/rule.component.d.ts +3 -0
- package/lib/admin/configuration-designer/elements/state.component.d.ts +4 -1
- package/lib/admin/configuration-designer/elements/type.component.d.ts +3 -1
- package/lib/admin/configuration-designer/elements/utility.component.d.ts +4 -1
- package/lib/admin/configuration-designer/elements/view.component.d.ts +4 -6
- package/lib/admin/configuration-designer/elements/widget.component.d.ts +2 -0
- package/lib/admin/configuration-designer/privileges.component.d.ts +6 -4
- package/lib/admin/patterns/patterns.component.d.ts +2 -2
- package/lib/core/layout/layout.component.d.ts +0 -2
- package/lib/core/models.d.ts +2 -2
- package/lib/core/translations.d.ts +2 -0
- package/lib/cube/cube-info.service.d.ts +3 -2
- package/lib/cube/cube.service.d.ts +8 -8
- package/lib/cube/declarations.d.ts +2 -0
- package/lib/cube/matrix/matrix.base.d.ts +4 -3
- package/lib/cube/matrix/matrix.pane.component.d.ts +3 -2
- package/lib/cube/matrix/table.component.d.ts +8 -5
- package/lib/reports/cube/usage-base.d.ts +2 -2
- package/lib/shared.module.d.ts +1 -1
- package/lib/system.module.d.ts +49 -48
- package/lib/views/cube/parallel.component.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +4 -2
@@ -819,18 +819,19 @@
|
|
819
819
|
"type": "string"
|
820
820
|
},
|
821
821
|
"Rules": {
|
822
|
-
"
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
}
|
833
|
-
}
|
822
|
+
"type": "array",
|
823
|
+
"items": {
|
824
|
+
"type": "object",
|
825
|
+
"properties": {
|
826
|
+
"Roles": {
|
827
|
+
"type": "array",
|
828
|
+
"items": { "type": "string" }
|
829
|
+
},
|
830
|
+
"Rule": { "type": "string" },
|
831
|
+
"Title": { "type": "string" },
|
832
|
+
"Name": { "type": "string" }
|
833
|
+
},
|
834
|
+
"required": [ "Name" ]
|
834
835
|
}
|
835
836
|
},
|
836
837
|
"History": {
|
@@ -840,7 +841,7 @@
|
|
840
841
|
}
|
841
842
|
}
|
842
843
|
},
|
843
|
-
"required":
|
844
|
+
"required":
|
844
845
|
"Format",
|
845
846
|
"Workflow"
|
846
847
|
]
|
@@ -1,79 +1,150 @@
|
|
1
|
-
import { Component, EventEmitter, Injector, Input, Optional,
|
1
|
+
import { Component, EventEmitter, HostListener, Injector, Input, Optional, ViewChild, ViewContainerRef } from "@angular/core";
|
2
|
+
import { Validators } from "@angular/forms";
|
2
3
|
import { Subject, takeUntil } from "rxjs";
|
3
|
-
import { DesignerRef } from "./designer.base";
|
4
|
+
import { DesignerRef, programName } from "./designer.base";
|
4
5
|
import * as i0 from "@angular/core";
|
5
6
|
import * as i1 from "../../core/slots/pane-ref";
|
6
|
-
import * as i2 from "
|
7
|
+
import * as i2 from "@angular/forms";
|
8
|
+
import * as i3 from "../../core/component-factory-resolver";
|
9
|
+
import * as i4 from "@angular/common";
|
10
|
+
import * as i5 from "@angular/material/toolbar";
|
11
|
+
import * as i6 from "@angular/material/form-field";
|
12
|
+
import * as i7 from "@angular/material/button";
|
13
|
+
import * as i8 from "@angular/material/input";
|
14
|
+
import * as i9 from "@angular/material/icon";
|
15
|
+
import * as i10 from "../../core/pipes/translate.pipe";
|
7
16
|
/**/
|
8
17
|
export class DesignerItemComponent {
|
9
|
-
constructor(_injector,
|
18
|
+
constructor(_injector, _pane, _fb, _cfr) {
|
10
19
|
this._injector = _injector;
|
20
|
+
this._pane = _pane;
|
21
|
+
this._fb = _fb;
|
11
22
|
this._cfr = _cfr;
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
23
|
+
if (_pane && _pane.dialog) {
|
24
|
+
const { designer, editMode, isNew, model, template } = _pane.data;
|
25
|
+
this._model = model;
|
26
|
+
this._isNew = isNew;
|
27
|
+
Object.assign(this, {
|
28
|
+
designer, editMode,
|
29
|
+
model: JSON.parse(JSON.stringify(model)),
|
30
|
+
template
|
31
|
+
});
|
32
|
+
}
|
16
33
|
}
|
17
|
-
|
18
|
-
this.
|
34
|
+
save() {
|
35
|
+
if (this._isNew) {
|
36
|
+
}
|
37
|
+
Object.assign(this._model, this.model);
|
38
|
+
this._pane.close();
|
19
39
|
}
|
20
40
|
ngOnInit() {
|
21
|
-
|
41
|
+
if (!this.model.options)
|
42
|
+
this.model.options = {};
|
43
|
+
if (!this.model.privileges)
|
44
|
+
this.model.privileges = {};
|
45
|
+
const injector = Injector.create([{
|
46
|
+
provide: DesignerRef, useValue: new DesignerRef(this.designer, this.model)
|
47
|
+
}], this._injector);
|
48
|
+
let typeinstance;
|
49
|
+
let factory = this._cfr.resolve(this.template);
|
50
|
+
let cRef = this._container.createComponent(factory, 0, injector);
|
51
|
+
cRef.instance.model = this.model;
|
52
|
+
cRef.instance.editMode = this.editMode;
|
53
|
+
typeinstance = cRef.instance;
|
54
|
+
let elementinstance;
|
55
|
+
if (this.model.template) {
|
56
|
+
let factory = this._cfr.resolve(this.model.template);
|
57
|
+
let cRef = this._econtainer.createComponent(factory, 0, injector);
|
58
|
+
cRef.instance.model = this.model;
|
59
|
+
cRef.instance.editMode = this.editMode;
|
60
|
+
elementinstance = cRef.instance;
|
61
|
+
}
|
22
62
|
if (this.editMode) {
|
23
|
-
this.
|
24
|
-
this.
|
63
|
+
this.change = new EventEmitter();
|
64
|
+
this.form = this._fb.group({
|
65
|
+
name: this._fb.control(null, Validators.required),
|
66
|
+
title: this._fb.control(null, Validators.required),
|
67
|
+
});
|
68
|
+
this._destroy = new Subject();
|
69
|
+
const { name, title } = this.form.controls;
|
70
|
+
!this.model.draft && name.disable();
|
71
|
+
this.model.draft && title.valueChanges.pipe(takeUntil(this._destroy)).subscribe((t) => !typeinstance.disablefancyname && t && name.setValue(programName(t)));
|
72
|
+
this.form.patchValue(this.model);
|
73
|
+
this.form.valueChanges.pipe(takeUntil(this._destroy)).
|
25
74
|
subscribe(v => {
|
26
75
|
Object.assign(this.model, v);
|
76
|
+
this.dirty = true;
|
27
77
|
this.change.emit();
|
28
78
|
});
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
this.
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
79
|
+
let state, typestate, elementstate;
|
80
|
+
function validate() {
|
81
|
+
return (!typestate || typestate === 'VALID') && (!state || state === 'VALID') && (!elementstate || elementstate === 'VALID');
|
82
|
+
}
|
83
|
+
this.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
|
84
|
+
state = s;
|
85
|
+
this.valid = validate();
|
86
|
+
});
|
87
|
+
typeinstance.form.patchValue(this.model);
|
88
|
+
typeinstance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
|
89
|
+
typestate = s;
|
90
|
+
this.valid = validate();
|
91
|
+
});
|
92
|
+
typeinstance.form.valueChanges.pipe(takeUntil(this._destroy)).subscribe(v => {
|
93
|
+
Object.assign(this.model, v);
|
94
|
+
this.dirty = true;
|
38
95
|
this.change.emit();
|
39
96
|
});
|
97
|
+
if (elementinstance) {
|
98
|
+
elementinstance.form.patchValue(this.model.options);
|
99
|
+
elementinstance.form.valueChanges.pipe(takeUntil(this._destroy)).
|
100
|
+
subscribe(v => this.assignargs(v));
|
101
|
+
elementinstance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
|
102
|
+
typestate = s;
|
103
|
+
this.valid = validate();
|
104
|
+
});
|
105
|
+
}
|
40
106
|
}
|
41
107
|
}
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
108
|
+
assignargs(evt) {
|
109
|
+
Object.assign(this.model.options, evt);
|
110
|
+
this.dirty = true;
|
111
|
+
this.change.emit();
|
112
|
+
}
|
113
|
+
/**
|
114
|
+
* Ctrl-s save
|
115
|
+
* @param event
|
116
|
+
*/
|
117
|
+
handleKeyboardEvent(event) {
|
118
|
+
if (event.ctrlKey && (event.which === 83 || event.which === 115)) {
|
119
|
+
this.valid && this.save();
|
120
|
+
event.preventDefault();
|
55
121
|
}
|
56
122
|
}
|
123
|
+
ngOnDestroy() {
|
124
|
+
this._destroy?.next();
|
125
|
+
}
|
57
126
|
}
|
58
|
-
DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.Injector }, { token: i1.PaneRef, optional: true }, { token: i2.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });
|
59
|
-
DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: {
|
127
|
+
DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.Injector }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });
|
128
|
+
DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { template: "template", model: "model", designer: "designer" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"editMode; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\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 </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #container></ng-container>\r\n<ng-container #econtainer></ng-container>\r\n\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.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: i8.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: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
|
60
129
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, decorators: [{
|
61
130
|
type: Component,
|
62
|
-
args: [{ selector: 'bizdoc-designer-element', template: '<span
|
131
|
+
args: [{ selector: 'bizdoc-designer-element', template: "<ng-container *ngIf=\"editMode; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\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 </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #container></ng-container>\r\n<ng-container #econtainer></ng-container>\r\n\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"] }]
|
63
132
|
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.PaneRef, decorators: [{
|
64
133
|
type: Optional
|
65
|
-
}] }, { type: i2.BizDocComponentFactoryResolver }]; }, propDecorators: {
|
66
|
-
type: Input
|
67
|
-
}], template: [{
|
134
|
+
}] }, { type: i2.FormBuilder }, { type: i3.BizDocComponentFactoryResolver }]; }, propDecorators: { template: [{
|
68
135
|
type: Input
|
69
136
|
}], model: [{
|
70
137
|
type: Input
|
71
138
|
}], designer: [{
|
72
139
|
type: Input
|
73
|
-
}], change: [{
|
74
|
-
type: Output
|
75
140
|
}], _container: [{
|
76
141
|
type: ViewChild,
|
77
142
|
args: ['container', { static: true, read: ViewContainerRef }]
|
143
|
+
}], _econtainer: [{
|
144
|
+
type: ViewChild,
|
145
|
+
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
146
|
+
}], handleKeyboardEvent: [{
|
147
|
+
type: HostListener,
|
148
|
+
args: ['document:keydown', ['$event']]
|
78
149
|
}] } });
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHMUMsT0FBTyxFQUFFLFdBQVcsRUFBeUQsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUNyRyxJQUFJO0FBTUosTUFBTSxPQUNFLHFCQUFxQjtJQVkzQixZQUNVLFNBQW1CLEVBQ2YsSUFBYSxFQUNqQixJQUFvQztRQUZwQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBRW5CLFNBQUksR0FBSixJQUFJLENBQWdDO1FBUjNCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBSXBDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBSzlDLElBQUksSUFBSTtZQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElB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aXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbXBvbmVudC1mYWN0b3J5LXJlc29sdmVyXCI7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiAsRWxlbWVudE1vZGVsLCBEZXNpZ25lckVsZW1lbnRDb21wb25lbnQsIERlc2lnbmVyTW9kZWwgfSBmcm9tIFwiLi9kZXNpZ25lci5iYXNlXCI7XHJcbi8qKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZTogJzxzcGFuPjwvc3Bhbj48bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+J1xyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBlZGl0TW9kZT86IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1vZGVsITogRWxlbWVudE1vZGVsO1xyXG4gIEBJbnB1dCgpIGRlc2lnbmVyITogRGVzaWduZXJNb2RlbDtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9jb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+O1xyXG4gIHByaXZhdGUgX29wdGlvbnNpbnN0YW5jZTogRGVzaWduZXJFbGVtZW50Q29tcG9uZW50PGFueT47XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBAT3B0aW9uYWwoKSBwYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuICAgIGlmIChwYW5lKSBPYmplY3QuYXNzaWduKHRoaXMsIHBhbmUuZGF0YSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5zdGFuY2UgPSB0aGlzLl9jb21wb25lbnQodGhpcy50ZW1wbGF0ZSk7XHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLl9pbnN0YW5jZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbCk7XHJcbiAgICAgIHRoaXMuX2luc3RhbmNlLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgICBzdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHYpO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZWwudGVtcGxhdGUpIHtcclxuICAgICAgaWYgKCF0aGlzLm1vZGVsLm9wdGlvbnMpIHRoaXMubW9kZWwub3B0aW9ucyA9IHt9O1xyXG4gICAgICB0aGlzLl9vcHRpb25zaW5zdGFuY2UgPSB0aGlzLl9jb21wb25lbnQodGhpcy5tb2RlbC50ZW1wbGF0ZSk7XHJcbiAgICAgIHRoaXMuX29wdGlvbnNpbnN0YW5jZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbC5vcHRpb25zKTtcclxuICAgICAgdGhpcy5fb3B0aW9uc2luc3RhbmNlLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgICBzdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwub3B0aW9ucywgdik7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnQodGVtcGxhdGU6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoW3tcclxuICAgICAgICBwcm92aWRlOiBEZXNpZ25lclJlZiwgdXNlVmFsdWU6IG5ldyBEZXNpZ25lclJlZih0aGlzLmRlc2lnbmVyKVxyXG4gICAgICB9XSwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUodGVtcGxhdGUpO1xyXG4gICAgICBjb25zdCBjUmVmID0gdGhpcy5fY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ+KGZhY3RvcnksIDAsIGluamVjdG9yKTtcclxuICAgICAgY1JlZi5pbnN0YW5jZS5tb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgIGNSZWYuaW5zdGFuY2UuZWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlO1xyXG4gICAgICByZXR1cm4gY1JlZi5pbnN0YW5jZTtcclxuXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGAke3RlbXBsYXRlfSwgJHtlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFVLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQTZDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQXVGLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFTaEosSUFBSTtBQU1KLE1BQU0sT0FDRSxxQkFBcUI7SUFjM0IsWUFDVSxTQUFtQixFQUNQLEtBQWMsRUFDMUIsR0FBZ0IsRUFDaEIsSUFBb0M7UUFIcEMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNQLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUFnQztRQUU1QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQWtCLENB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QzdCakUsZzVCQXlCQTsyRkRKUSxxQkFBcUI7a0JBTjVCLFNBQVM7K0JBQ0UseUJBQXlCOzswQkFxQmhDLFFBQVE7bUhBYkYsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFNEQsVUFBVTtzQkFBM0UsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxXQUFXO3NCQUE3RSxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQW1IakUsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sU3RhdHVzLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyUmVmLCBFbGVtZW50TW9kZWwsIERlc2lnbmVyRWxlbWVudENvbXBvbmVudCwgRGVzaWduZXJNb2RlbCwgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCwgcHJvZ3JhbU5hbWUgfSBmcm9tIFwiLi9kZXNpZ25lci5iYXNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1ldERhdGEge1xyXG4gIGVkaXRNb2RlOiBib29sZWFuO1xyXG4gIGlzTmV3OiBib29sZWFuO1xyXG4gIHRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDtcclxuICBkZXNpZ25lcjogRGVzaWduZXJNb2RlbDtcclxufVxyXG4vKiovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQnLFxyXG4gIHN0eWxlVXJsczogWydkZXNpZ25lci1lbGVtZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGVVcmw6ICdkZXNpZ25lci1lbGVtZW50LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIGVkaXRNb2RlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1vZGVsITogRWxlbWVudE1vZGVsO1xyXG4gIEBJbnB1dCgpIGRlc2lnbmVyITogRGVzaWduZXJNb2RlbDtcclxuICBjaGFuZ2U6IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBfY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Vjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBfZWNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuICBkaXJ0eTogYm9vbGVhbjtcclxuICBwcml2YXRlIF9pc05ldzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9tb2RlbDogRWxlbWVudE1vZGVsPGFueT47XHJcbiAgcHJpdmF0ZSBfZGVzdHJveTogU3ViamVjdDx2b2lkPjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3BhbmU6IFBhbmVSZWYsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9jZnI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICApIHtcclxuICAgIGlmIChfcGFuZSAmJiBfcGFuZS5kaWFsb2cpIHtcclxuICAgICAgY29uc3QgeyBkZXNpZ25lciwgZWRpdE1vZGUsIGlzTmV3LCBtb2RlbCwgdGVtcGxhdGUgfSA9IF9wYW5lLmRhdGEgYXMgRWxlbWV0RGF0YTtcclxuICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcclxuICAgICAgdGhpcy5faXNOZXcgPSBpc05ldztcclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XHJcbiAgICAgICAgZGVzaWduZXIsIGVkaXRNb2RlLFxyXG4gICAgICAgIG1vZGVsOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1vZGVsKSksXHJcbiAgICAgICAgdGVtcGxhdGVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5faXNOZXcpIHtcclxuICAgIH1cclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fbW9kZWwsIHRoaXMubW9kZWwpO1xyXG4gICAgdGhpcy5fcGFuZS5jbG9zZSgpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5tb2RlbC5vcHRpb25zKSB0aGlzLm1vZGVsLm9wdGlvbnMgPSB7fTtcclxuICAgIGlmICghdGhpcy5tb2RlbC5wcml2aWxlZ2VzKSB0aGlzLm1vZGVsLnByaXZpbGVnZXMgPSB7fTtcclxuXHJcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShbe1xyXG4gICAgICBwcm92aWRlOiBEZXNpZ25lclJlZiwgdXNlVmFsdWU6IG5ldyBEZXNpZ25lclJlZih0aGlzLmRlc2lnbmVyLCB0aGlzLm1vZGVsKVxyXG4gICAgfV0sIHRoaXMuX2luamVjdG9yKTtcclxuXHJcbiAgICBsZXQgdHlwZWluc3RhbmNlO1xyXG5cclxuICAgIGxldCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUodGhpcy50ZW1wbGF0ZSk7XHJcblxyXG4gICAgbGV0IGNSZWYgPSB0aGlzLl9jb250YWluZXIuY3JlYXRlQ29tcG9uZW50PERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQ+KGZhY3RvcnksIDAsIGluamVjdG9yKTtcclxuICAgIGNSZWYuaW5zdGFuY2UubW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgY1JlZi5pbnN0YW5jZS5lZGl0TW9kZSA9IHRoaXMuZWRpdE1vZGU7XHJcbiAgICB0eXBlaW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG5cclxuICAgIGxldCBlbGVtZW50aW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwudGVtcGxhdGUpIHtcclxuICAgICAgbGV0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGxldCBjUmVmID0gdGhpcy5fZWNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8RGVzaWduZXJFbGVtZW50Q29tcG9uZW50PihmYWN0b3J5LCAwLCBpbmplY3Rvcik7XHJcbiAgICAgIGNSZWYuaW5zdGFuY2UubW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLmVkaXRNb2RlID0gdGhpcy5lZGl0TW9kZTtcclxuICAgICAgZWxlbWVudGluc3RhbmNlID0gY1JlZi5pbnN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgICAgY29uc3QgeyBuYW1lLCB0aXRsZSB9ID0gdGhpcy5mb3JtLmNvbnRyb2xzO1xyXG4gICAgICAhdGhpcy5tb2RlbC5kcmFmdCAmJiBuYW1lLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5tb2RlbC5kcmFmdCAmJiB0aXRsZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICF0eXBlaW5zdGFuY2UuZGlzYWJsZWZhbmN5bmFtZSAmJiB0ICYmIG5hbWUuc2V0VmFsdWUocHJvZ3JhbU5hbWUodCkpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgICBzdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHYpO1xyXG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGxldCBzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXMsIHR5cGVzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXMsIGVsZW1lbnRzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXM7XHJcbiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAoIXR5cGVzdGF0ZSB8fCB0eXBlc3RhdGUgPT09ICdWQUxJRCcpICYmICghc3RhdGUgfHwgc3RhdGUgPT09ICdWQUxJRCcpICYmICghZWxlbWVudHN0YXRlIHx8IGVsZW1lbnRzdGF0ZSA9PT0gJ1ZBTElEJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgICBzdGF0ZSA9IHM7XHJcbiAgICAgICAgdGhpcy52YWxpZCA9IHZhbGlkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0eXBlaW5zdGFuY2UuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0eXBlaW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgdHlwZXN0YXRlID0gcztcclxuICAgICAgICB0aGlzLnZhbGlkID0gdmFsaWRhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHR5cGVpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdik7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVsZW1lbnRpbnN0YW5jZSkge1xyXG4gICAgICAgIGVsZW1lbnRpbnN0YW5jZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbC5vcHRpb25zKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICAgICAgc3Vic2NyaWJlKHYgPT4gdGhpcy5hc3NpZ25hcmdzKHYpKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgICB0eXBlc3RhdGUgPSBzO1xyXG4gICAgICAgICAgdGhpcy52YWxpZCA9IHZhbGlkYXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYXNzaWduYXJncyhldnQpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbC5vcHRpb25zLCBldnQpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRNb2RlOyBlbHNlIGluZm9cIj5cclxuICA8bWF0LXRvb2xiYXI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiF2YWxpZFwiPjxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L21hdC10b29sYmFyPlxyXG4gIDxzcGFuIGNsYXNzPVwiaGVscFwiPnt7bW9kZWwuaGVscH19PC9zcGFuPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgJm5ic3A7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNpbmZvPlxyXG4gIDxzcGFuIGNsYXNzPVwiZmFtaWx5XCI+e3ttb2RlbC5mYW1pbHl9fTwvc3Bhbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPG5nLWNvbnRhaW5lciAjZWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiJdfQ==
|