@daypilot/daypilot-lite-angular 5.9.0 → 5.10.0-sandbox.850
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core/daypilot-core.mjs +429 -358
- package/esm2022/lib/daypilot-scheduler.component.mjs +219 -43
- package/fesm2022/daypilot-daypilot-lite-angular.mjs +645 -398
- package/fesm2022/daypilot-daypilot-lite-angular.mjs.map +1 -1
- package/lib/daypilot-scheduler.component.d.ts +43 -3
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from "@angular/core";
|
|
2
|
-
import { effect } from
|
|
2
|
+
import { effect } from "@angular/core";
|
|
3
3
|
import { DayPilot } from "./core/daypilot-core";
|
|
4
4
|
import { optHash, rand } from "./util";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -9,66 +9,92 @@ class DayPilotSchedulerComponent {
|
|
|
9
9
|
config;
|
|
10
10
|
_requestUpdateFull = false;
|
|
11
11
|
_requestUpdateEvents = false;
|
|
12
|
+
_requestUpdateResources = false;
|
|
12
13
|
_requestViewChange = false;
|
|
14
|
+
_visibleRange = {
|
|
15
|
+
start: new DayPilot.Date(),
|
|
16
|
+
end: new DayPilot.Date()
|
|
17
|
+
};
|
|
13
18
|
_hashOptions = "";
|
|
14
19
|
_hashEvents = "";
|
|
20
|
+
_hashResources = "";
|
|
15
21
|
_eventsSet = false;
|
|
22
|
+
_resourcesSet = false;
|
|
16
23
|
_events = [];
|
|
24
|
+
_resources = [];
|
|
25
|
+
_signalInitialized = false;
|
|
26
|
+
_signalConfig = undefined;
|
|
27
|
+
_signalEvents = undefined;
|
|
28
|
+
_signalResources = undefined;
|
|
29
|
+
_id = "dp_" + new Date().getTime() + rand();
|
|
17
30
|
get events() {
|
|
18
|
-
if (typeof this._events === 'function') {
|
|
19
|
-
return this._events();
|
|
20
|
-
}
|
|
21
31
|
return this._events;
|
|
22
32
|
}
|
|
23
33
|
set events(value) {
|
|
24
34
|
this._eventsSet = true;
|
|
25
35
|
this._events = value;
|
|
26
36
|
}
|
|
27
|
-
|
|
37
|
+
get resources() {
|
|
38
|
+
return this._resources;
|
|
39
|
+
}
|
|
40
|
+
set resources(value) {
|
|
41
|
+
this._resourcesSet = true;
|
|
42
|
+
this._resources = value;
|
|
43
|
+
}
|
|
28
44
|
get configResolved() {
|
|
29
|
-
return typeof this.config ===
|
|
45
|
+
return typeof this.config === "function"
|
|
46
|
+
? this.config()
|
|
47
|
+
: this.config;
|
|
48
|
+
}
|
|
49
|
+
get eventsResolved() {
|
|
50
|
+
return typeof this._events === "function"
|
|
51
|
+
? this._events()
|
|
52
|
+
: this._events;
|
|
53
|
+
}
|
|
54
|
+
get resourcesResolved() {
|
|
55
|
+
return typeof this._resources === "function"
|
|
56
|
+
? this._resources()
|
|
57
|
+
: this._resources;
|
|
30
58
|
}
|
|
31
59
|
get id() {
|
|
32
60
|
return this._id;
|
|
33
61
|
}
|
|
34
62
|
constructor() {
|
|
35
63
|
effect(() => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
const control = this.control;
|
|
40
|
-
const events = this._events();
|
|
41
|
-
if (control) {
|
|
42
|
-
control.internal.upd({ events });
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
effect(() => {
|
|
46
|
-
if (typeof this.config !== 'function') {
|
|
64
|
+
const update = this.signalUpdateResolved();
|
|
65
|
+
if (!update) {
|
|
47
66
|
return;
|
|
48
67
|
}
|
|
49
68
|
const control = this.control;
|
|
50
|
-
const config = this.config();
|
|
51
69
|
if (control) {
|
|
52
|
-
control.internal.upd(
|
|
70
|
+
control.internal.upd(update);
|
|
53
71
|
}
|
|
54
72
|
});
|
|
55
73
|
}
|
|
56
|
-
async ngOnInit() {
|
|
74
|
+
async ngOnInit() {
|
|
75
|
+
}
|
|
57
76
|
ngOnDestroy() {
|
|
58
77
|
this.dispose();
|
|
59
78
|
}
|
|
60
79
|
ngAfterViewInit() {
|
|
61
80
|
this.control = new DayPilot.Scheduler(this.id);
|
|
81
|
+
const control = this.control;
|
|
82
|
+
control.internal.enableAngular2();
|
|
62
83
|
this.updateOptions();
|
|
84
|
+
this.updateResources();
|
|
63
85
|
this.updateEvents();
|
|
64
|
-
|
|
65
|
-
|
|
86
|
+
// The configuration and standalone inputs have just been loaded.
|
|
87
|
+
// init() performs the initial rendering, so no additional update is needed.
|
|
88
|
+
this._requestUpdateFull = false;
|
|
89
|
+
this._requestUpdateResources = false;
|
|
90
|
+
this._requestUpdateEvents = false;
|
|
66
91
|
this.control.init();
|
|
67
92
|
}
|
|
68
93
|
ngDoCheck() {
|
|
69
|
-
const eventsAsSignal = typeof this._events ===
|
|
70
|
-
const
|
|
71
|
-
|
|
94
|
+
const eventsAsSignal = typeof this._events === "function" || !this._eventsSet;
|
|
95
|
+
const resourcesAsSignal = typeof this._resources === "function" || !this._resourcesSet;
|
|
96
|
+
const configAsSignal = typeof this.config === "function" || !this.config;
|
|
97
|
+
if (eventsAsSignal && resourcesAsSignal && configAsSignal) {
|
|
72
98
|
return;
|
|
73
99
|
}
|
|
74
100
|
if (!this.control) {
|
|
@@ -77,69 +103,219 @@ class DayPilotSchedulerComponent {
|
|
|
77
103
|
if (!configAsSignal) {
|
|
78
104
|
this.updateOptions();
|
|
79
105
|
}
|
|
106
|
+
if (!resourcesAsSignal) {
|
|
107
|
+
this.updateResources();
|
|
108
|
+
}
|
|
80
109
|
if (!eventsAsSignal) {
|
|
81
110
|
this.updateEvents();
|
|
82
111
|
}
|
|
83
112
|
const control = this.control;
|
|
84
113
|
if (this._requestUpdateFull) {
|
|
85
114
|
control.internal.upd();
|
|
115
|
+
control.internal.postInit();
|
|
86
116
|
this._requestUpdateFull = false;
|
|
117
|
+
this._requestUpdateResources = false;
|
|
87
118
|
this._requestUpdateEvents = false;
|
|
88
119
|
}
|
|
89
|
-
else
|
|
90
|
-
|
|
91
|
-
this.
|
|
120
|
+
else {
|
|
121
|
+
const update = {};
|
|
122
|
+
if (this._requestUpdateResources) {
|
|
123
|
+
update.resources = this.resourcesResolved;
|
|
124
|
+
}
|
|
125
|
+
if (this._requestUpdateEvents) {
|
|
126
|
+
update.events = this.eventsResolved;
|
|
127
|
+
}
|
|
128
|
+
if (this._requestUpdateResources || this._requestUpdateEvents) {
|
|
129
|
+
control.internal.upd(update);
|
|
130
|
+
this._requestUpdateResources = false;
|
|
131
|
+
this._requestUpdateEvents = false;
|
|
132
|
+
}
|
|
92
133
|
}
|
|
93
134
|
if (this._requestViewChange) {
|
|
94
135
|
this._requestViewChange = false;
|
|
95
136
|
const args = {};
|
|
137
|
+
args.visibleRangeChanged =
|
|
138
|
+
this._visibleRange.start !== this.control.visibleStart() ||
|
|
139
|
+
this._visibleRange.end !== this.control.visibleEnd();
|
|
140
|
+
this._visibleRange.start = this.control.visibleStart();
|
|
141
|
+
this._visibleRange.end = this.control.visibleEnd();
|
|
96
142
|
this.viewChange.emit(args);
|
|
97
143
|
}
|
|
98
144
|
}
|
|
99
145
|
dispose() {
|
|
100
146
|
if (this.control) {
|
|
101
147
|
this.control.dispose();
|
|
102
|
-
|
|
148
|
+
// @ts-ignore
|
|
103
149
|
this.control = null;
|
|
104
150
|
}
|
|
105
151
|
}
|
|
106
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Resolves signal inputs and returns a single Scheduler update.
|
|
154
|
+
*
|
|
155
|
+
* A standalone events/resources input takes precedence over the same
|
|
156
|
+
* property supplied through config.
|
|
157
|
+
*/
|
|
158
|
+
signalUpdateResolved() {
|
|
159
|
+
const configIsSignal = typeof this.config === "function";
|
|
160
|
+
const eventsIsSignal = typeof this._events === "function";
|
|
161
|
+
const resourcesIsSignal = typeof this._resources === "function";
|
|
162
|
+
if (!configIsSignal && !eventsIsSignal && !resourcesIsSignal) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const config = configIsSignal
|
|
166
|
+
? this.configResolved
|
|
167
|
+
: undefined;
|
|
168
|
+
const events = eventsIsSignal
|
|
169
|
+
? this.eventsResolved
|
|
170
|
+
: undefined;
|
|
171
|
+
const resources = resourcesIsSignal
|
|
172
|
+
? this.resourcesResolved
|
|
173
|
+
: undefined;
|
|
174
|
+
const configChanged = configIsSignal && config !== this._signalConfig;
|
|
175
|
+
const eventsChanged = eventsIsSignal && events !== this._signalEvents;
|
|
176
|
+
const resourcesChanged = resourcesIsSignal && resources !== this._signalResources;
|
|
177
|
+
this._signalConfig = config;
|
|
178
|
+
this._signalEvents = events;
|
|
179
|
+
this._signalResources = resources;
|
|
180
|
+
if (!this._signalInitialized) {
|
|
181
|
+
this._signalInitialized = true;
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
if (!configChanged && !eventsChanged && !resourcesChanged) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
if (configChanged) {
|
|
188
|
+
return this.fullSignalUpdateResolved();
|
|
189
|
+
}
|
|
190
|
+
const update = {};
|
|
191
|
+
if (eventsChanged) {
|
|
192
|
+
update.events = events;
|
|
193
|
+
}
|
|
194
|
+
if (resourcesChanged) {
|
|
195
|
+
update.resources = resources;
|
|
196
|
+
}
|
|
197
|
+
return update;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Creates a full update when a signal-based config changes.
|
|
201
|
+
*
|
|
202
|
+
* Explicit standalone inputs override config.events and
|
|
203
|
+
* config.resources.
|
|
204
|
+
*/
|
|
205
|
+
fullSignalUpdateResolved() {
|
|
107
206
|
const config = this.configResolved;
|
|
207
|
+
const update = config ? { ...config } : {};
|
|
208
|
+
if (this._eventsSet) {
|
|
209
|
+
update.events = this.eventsResolved;
|
|
210
|
+
}
|
|
211
|
+
if (this._resourcesSet) {
|
|
212
|
+
update.resources = this.resourcesResolved;
|
|
213
|
+
}
|
|
214
|
+
return update;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Removes properties from config that are supplied using standalone
|
|
218
|
+
* Angular inputs.
|
|
219
|
+
*/
|
|
220
|
+
configResolvedForUpdate() {
|
|
221
|
+
const config = this.configResolved;
|
|
222
|
+
if (!config) {
|
|
223
|
+
return config;
|
|
224
|
+
}
|
|
225
|
+
if (!this._eventsSet && !this._resourcesSet) {
|
|
226
|
+
return config;
|
|
227
|
+
}
|
|
228
|
+
const result = { ...config };
|
|
229
|
+
if (this._eventsSet) {
|
|
230
|
+
delete result.events;
|
|
231
|
+
}
|
|
232
|
+
if (this._resourcesSet) {
|
|
233
|
+
delete result.resources;
|
|
234
|
+
}
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
updateOptions() {
|
|
238
|
+
const config = this.configResolvedForUpdate();
|
|
108
239
|
const hash = optHash(config);
|
|
109
240
|
if (hash !== this._hashOptions) {
|
|
110
241
|
const control = this.control;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
242
|
+
if (config && config.resources && !this._resourcesSet) {
|
|
243
|
+
control.internal.resourcesFromAttr();
|
|
244
|
+
}
|
|
245
|
+
if (control.internal.skipUpdate()) {
|
|
246
|
+
control.internal.skipped();
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
control.internal.loadOptions(config);
|
|
250
|
+
this._requestUpdateFull = true;
|
|
251
|
+
this._requestViewChange = true;
|
|
252
|
+
}
|
|
114
253
|
}
|
|
115
254
|
this._hashOptions = hash;
|
|
116
255
|
}
|
|
256
|
+
updateResources() {
|
|
257
|
+
if (!this._resourcesSet) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const resources = this.resourcesResolved;
|
|
261
|
+
const hash = optHash(resources);
|
|
262
|
+
if (hash === this._hashResources) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const control = this.control;
|
|
266
|
+
control.resources = resources;
|
|
267
|
+
control.internal.resourcesFromAttr();
|
|
268
|
+
if (control.internal.skipUpdate()) {
|
|
269
|
+
control.internal.skipped();
|
|
270
|
+
this._hashResources = hash;
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
this._requestUpdateResources = true;
|
|
274
|
+
this._requestViewChange = true;
|
|
275
|
+
this._hashResources = hash;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Replaces the complete event list.
|
|
279
|
+
*
|
|
280
|
+
* No individual event diffing is performed. Signal inputs are detected
|
|
281
|
+
* by reference in signalUpdateResolved(); ordinary array inputs are
|
|
282
|
+
* checked using optHash() from ngDoCheck().
|
|
283
|
+
*/
|
|
117
284
|
updateEvents() {
|
|
118
285
|
if (!this._eventsSet) {
|
|
119
286
|
return;
|
|
120
287
|
}
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
this._requestUpdateEvents = true;
|
|
288
|
+
const events = this.eventsResolved;
|
|
289
|
+
const hash = optHash(events);
|
|
290
|
+
if (hash === this._hashEvents) {
|
|
291
|
+
return;
|
|
126
292
|
}
|
|
293
|
+
const control = this.control;
|
|
294
|
+
control.events.list = events;
|
|
295
|
+
if (control.internal.skipUpdate()) {
|
|
296
|
+
control.internal.skipped();
|
|
297
|
+
this._hashEvents = hash;
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
this._requestUpdateEvents = true;
|
|
127
301
|
this._hashEvents = hash;
|
|
128
302
|
}
|
|
129
303
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayPilotSchedulerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DayPilotSchedulerComponent, selector: "daypilot-scheduler", inputs: { config: "config", events: "events" }, outputs: { viewChange: "viewChange" }, ngImport: i0, template: `
|
|
131
|
-
<div id=
|
|
304
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DayPilotSchedulerComponent, selector: "daypilot-scheduler", inputs: { config: "config", events: "events", resources: "resources" }, outputs: { viewChange: "viewChange" }, ngImport: i0, template: `
|
|
305
|
+
<div id="{{id}}"></div>`, isInline: true, styles: [""] });
|
|
132
306
|
}
|
|
133
307
|
export { DayPilotSchedulerComponent };
|
|
134
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayPilotSchedulerComponent, decorators: [{
|
|
135
309
|
type: Component,
|
|
136
|
-
args: [{ selector:
|
|
137
|
-
<div id=
|
|
310
|
+
args: [{ selector: "daypilot-scheduler", template: `
|
|
311
|
+
<div id="{{id}}"></div>` }]
|
|
138
312
|
}], ctorParameters: function () { return []; }, propDecorators: { viewChange: [{
|
|
139
313
|
type: Output
|
|
140
314
|
}], config: [{
|
|
141
315
|
type: Input
|
|
142
316
|
}], events: [{
|
|
143
317
|
type: Input
|
|
318
|
+
}], resources: [{
|
|
319
|
+
type: Input
|
|
144
320
|
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlsb3Qtc2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL2RheXBpbG90LXNjaGVkdWxlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVcsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxNQUFNLEVBQUcsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUE0QixNQUFNLFFBQVEsQ0FBQzs7QUFFaEUsTUFNYSwwQkFBMEI7SUFFOUIsT0FBTyxDQUFzQjtJQUMxQixVQUFVLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQzdFLE1BQU0sQ0FBc0I7SUFDN0Isa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBQ3BDLG9CQUFvQixHQUFZLEtBQUssQ0FBQztJQUN0QyxrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFFNUIsT0FBTyxHQUF5QyxFQUFFLENBQUM7SUFFM0QsSUFBVyxNQUFNO1FBQ2YsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUNXLE1BQU0sQ0FBQyxLQUEyQztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2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LElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzt3R0FwSlUsMEJBQTBCOzRGQUExQiwwQkFBMEIsaUpBSjNCOzRCQUNnQjs7U0FHZiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSxvQkFBb0IsWUFDcEI7NEJBQ2dCOzBFQU1oQixVQUFVO3NCQUFuQixNQUFNO2dCQUNFLE1BQU07c0JBQWQsS0FBSztnQkFrQkssTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgZWZmZWN0ICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXlQaWxvdH0gZnJvbSBcIi4vY29yZS9kYXlwaWxvdC1jb3JlXCI7XG5pbXBvcnQge29wdEhhc2gsIHJhbmQsIEV2ZW50RGlmZiwgT3B0aW9uYWxTaWduYWx9IGZyb20gXCIuL3V0aWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF5cGlsb3Qtc2NoZWR1bGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGlkPSd7e2lkfX0nPjwvZGl2PmAsXG4gIHN0eWxlczogW2BgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXlQaWxvdFNjaGVkdWxlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcblxuICBwdWJsaWMgY29udHJvbCE6IERheVBpbG90LlNjaGVkdWxlcjtcbiAgQE91dHB1dCgpIHZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXlQaWxvdC5EYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF5UGlsb3QuRGF0ZT4oKTtcbiAgQElucHV0KCkgY29uZmlnOiBPcHRpb25hbFNpZ25hbDxhbnk+O1xuICBwcml2YXRlIF9yZXF1ZXN0VXBkYXRlRnVsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1ZXN0VXBkYXRlRXZlbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVlc3RWaWV3Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc2hPcHRpb25zOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9oYXNoRXZlbnRzOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9ldmVudHNTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9ldmVudHM6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LkV2ZW50RGF0YVtdPiA9IFtdO1xuXG4gIHB1YmxpYyBnZXQgZXZlbnRzKCk6IERheVBpbG90LkV2ZW50RGF0YVtdIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2V2ZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBldmVudHModmFsdWU6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LkV2ZW50RGF0YVtdPikge1xuICAgIHRoaXMuX2V2ZW50c1NldCA9IHRydWU7XG4gICAgdGhpcy5fZXZlbnRzID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pZDogc3RyaW5nID0gXCJkcF9cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgcmFuZCgpO1xuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZ1Jlc29sdmVkKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZygpIDogdGhpcy5jb25maWc7XG4gIH1cblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXZlbnRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuY29udHJvbDtcbiAgICAgIGNvbnN0IGV2ZW50cyA9ICg8YW55PnRoaXMuX2V2ZW50cykoKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29udHJvbC5pbnRlcm5hbC51cGQoe2V2ZW50c30pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29uc3QgY29uZmlnID0gKDxhbnk+dGhpcy5jb25maWcpKCk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHsgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbCA9IG5ldyBEYXlQaWxvdC5TY2hlZHVsZXIodGhpcy5pZCk7XG4gICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVFdmVudHMoKTtcbiAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRnVsbCA9IGZhbHNlOyAvLyBjb25maWcganVzdCBsb2FkZWQgYW5kIGNhbGxpbmcgaW5pdCgpLCBubyBuZWVkIHRvIGNhbGwgdXBkYXRlIGFnYWluXG4gICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlOyAvLyBjb25maWcganVzdCBsb2FkZWQgYW5kIGNhbGxpbmcgaW5pdCgpLCBubyBuZWVkIHRvIGNhbGwgdXBkYXRlIGFnYWluXG4gICAgdGhpcy5jb250cm9sLmluaXQoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcblxuICAgIGNvbnN0IGV2ZW50c0FzU2lnbmFsID0gdHlwZW9mIHRoaXMuX2V2ZW50cyA9PT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5fZXZlbnRzU2V0O1xuICAgIGNvbnN0IGNvbmZpZ0FzU2lnbmFsID0gdHlwZW9mIHRoaXMuY29uZmlnID09PSAnZnVuY3Rpb24nIHx8ICF0aGlzLmNvbmZpZztcblxuICAgIGlmIChldmVudHNBc1NpZ25hbCAmJiBjb25maWdBc1NpZ25hbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWdBc1NpZ25hbCkge1xuICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgfVxuICAgIGlmICghZXZlbnRzQXNTaWduYWwpIHtcbiAgICAgIHRoaXMudXBkYXRlRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuXG4gICAgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGVGdWxsKSB7XG4gICAgICBjb250cm9sLmludGVybmFsLnVwZCgpO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMpIHtcbiAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKHtcImV2ZW50c1wiOiB0aGlzLmV2ZW50c30pO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVxdWVzdFZpZXdDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3RWaWV3Q2hhbmdlID0gZmFsc2U7XG4gICAgICBjb25zdCBhcmdzOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuZGlzcG9zZSgpO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLmNvbnRyb2wgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnUmVzb2x2ZWQ7XG5cbiAgICBjb25zdCBoYXNoID0gb3B0SGFzaChjb25maWcpO1xuICAgIGlmIChoYXNoICE9PSB0aGlzLl9oYXNoT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29udHJvbC5pbnRlcm5hbC5sb2FkT3B0aW9ucyhjb25maWcpO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSB0cnVlO1xuICAgICAgdGhpcy5fcmVxdWVzdFZpZXdDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9oYXNoT3B0aW9ucyA9IGhhc2g7XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRXZlbnRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZXZlbnRzU2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaCA9IG9wdEhhc2godGhpcy5ldmVudHMpO1xuICAgIGlmIChoYXNoICE9PSB0aGlzLl9oYXNoRXZlbnRzKSB7XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb250cm9sLmV2ZW50cy5saXN0ID0gdGhpcy5ldmVudHM7XG4gICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRXZlbnRzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faGFzaEV2ZW50cyA9IGhhc2g7XG4gIH1cbn1cbiJdfQ==
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlsb3Qtc2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL2RheXBpbG90LXNjaGVkdWxlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBa0IsTUFBTSxRQUFRLENBQUM7O0FBRXZELE1BTWEsMEJBQTBCO0lBRTlCLE9BQU8sQ0FBc0I7SUFHcEMsVUFBVSxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUc1RSxNQUFNLENBQXNCO0lBRXBCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxvQkFBb0IsR0FBWSxLQUFLLENBQUM7SUFDdEMsdUJBQXVCLEdBQVksS0FBSyxDQUFDO0lBQ3pDLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUVwQyxhQUFhLEdBQUc7UUFDdEIsS0FBSyxFQUFFLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtRQUMxQixHQUFHLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO0tBQ3pCLENBQUM7SUFFTSxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFXLEVBQUUsQ0FBQztJQUU1QixVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFFL0IsT0FBTyxHQUF5QyxFQUFFLENBQUM7SUFDbkQsVUFBVSxHQUE0QyxFQUFFLENB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O1lBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO3dHQWpaVSwwQkFBMEI7NEZBQTFCLDBCQUEwQix5S0FKM0I7NEJBQ2dCOztTQUdmLDBCQUEwQjs0RkFBMUIsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLG9CQUFvQixZQUNwQjs0QkFDZ0I7MEVBUTFCLFVBQVU7c0JBRFQsTUFBTTtnQkFJUCxNQUFNO3NCQURMLEtBQUs7Z0JBbUNLLE1BQU07c0JBRGhCLEtBQUs7Z0JBV0ssU0FBUztzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERheVBpbG90IH0gZnJvbSBcIi4vY29yZS9kYXlwaWxvdC1jb3JlXCI7XG5pbXBvcnQgeyBvcHRIYXNoLCByYW5kLCBPcHRpb25hbFNpZ25hbCB9IGZyb20gXCIuL3V0aWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImRheXBpbG90LXNjaGVkdWxlclwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgaWQ9XCJ7e2lkfX1cIj48L2Rpdj5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgRGF5UGlsb3RTY2hlZHVsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG5cbiAgcHVibGljIGNvbnRyb2whOiBEYXlQaWxvdC5TY2hlZHVsZXI7XG5cbiAgQE91dHB1dCgpXG4gIHZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXlQaWxvdC5EYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF5UGlsb3QuRGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBjb25maWc6IE9wdGlvbmFsU2lnbmFsPGFueT47XG5cbiAgcHJpdmF0ZSBfcmVxdWVzdFVwZGF0ZUZ1bGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVxdWVzdFVwZGF0ZUV2ZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1ZXN0VXBkYXRlUmVzb3VyY2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVlc3RWaWV3Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZVJhbmdlID0ge1xuICAgIHN0YXJ0OiBuZXcgRGF5UGlsb3QuRGF0ZSgpLFxuICAgIGVuZDogbmV3IERheVBpbG90LkRhdGUoKVxuICB9O1xuXG4gIHByaXZhdGUgX2hhc2hPcHRpb25zOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9oYXNoRXZlbnRzOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9oYXNoUmVzb3VyY2VzOiBzdHJpbmcgPSBcIlwiO1xuXG4gIHByaXZhdGUgX2V2ZW50c1NldDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXNvdXJjZXNTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9ldmVudHM6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LkV2ZW50RGF0YVtdPiA9IFtdO1xuICBwcml2YXRlIF9yZXNvdXJjZXM6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LlJlc291cmNlRGF0YVtdPiA9IFtdO1xuXG4gIHByaXZhdGUgX3NpZ25hbEluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NpZ25hbENvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIF9zaWduYWxFdmVudHM6IERheVBpbG90LkV2ZW50RGF0YVtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIF9zaWduYWxSZXNvdXJjZXM6IERheVBpbG90LlJlc291cmNlRGF0YVtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgPSBcImRwX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyByYW5kKCk7XG5cbiAgcHVibGljIGdldCBldmVudHMoKTogT3B0aW9uYWxTaWduYWw8RGF5UGlsb3QuRXZlbnREYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBldmVudHModmFsdWU6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LkV2ZW50RGF0YVtdPikge1xuICAgIHRoaXMuX2V2ZW50c1NldCA9IHRydWU7XG4gICAgdGhpcy5fZXZlbnRzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc291cmNlcygpOiBPcHRpb25hbFNpZ25hbDxEYXlQaWxvdC5SZXNvdXJjZURhdGFbXT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZXM7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJlc291cmNlcyh2YWx1ZTogT3B0aW9uYWxTaWduYWw8RGF5UGlsb3QuUmVzb3VyY2VEYXRhW10+KSB7XG4gICAgdGhpcy5fcmVzb3VyY2VzU2V0ID0gdHJ1ZTtcbiAgICB0aGlzLl9yZXNvdXJjZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZ1Jlc29sdmVkKCk6IGFueSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmNvbmZpZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRoaXMuY29uZmlnKClcbiAgICAgIDogdGhpcy5jb25maWc7XG4gIH1cblxuICBwcml2YXRlIGdldCBldmVudHNSZXNvbHZlZCgpOiBEYXlQaWxvdC5FdmVudERhdGFbXSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9ldmVudHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0aGlzLl9ldmVudHMoKVxuICAgICAgOiB0aGlzLl9ldmVudHM7XG4gIH1cblxuICBwcml2YXRlIGdldCByZXNvdXJjZXNSZXNvbHZlZCgpOiBEYXlQaWxvdC5SZXNvdXJjZURhdGFbXSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9yZXNvdXJjZXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0aGlzLl9yZXNvdXJjZXMoKVxuICAgICAgOiB0aGlzLl9yZXNvdXJjZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHRoaXMuc2lnbmFsVXBkYXRlUmVzb2x2ZWQoKTtcblxuICAgICAgaWYgKCF1cGRhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbCA9IG5ldyBEYXlQaWxvdC5TY2hlZHVsZXIodGhpcy5pZCk7XG5cbiAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgY29udHJvbC5pbnRlcm5hbC5lbmFibGVBbmd1bGFyMigpO1xuXG4gICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVSZXNvdXJjZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUV2ZW50cygpO1xuXG4gICAgLy8gVGhlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YW5kYWxvbmUgaW5wdXRzIGhhdmUganVzdCBiZWVuIGxvYWRlZC5cbiAgICAvLyBpbml0KCkgcGVyZm9ybXMgdGhlIGluaXRpYWwgcmVuZGVyaW5nLCBzbyBubyBhZGRpdGlvbmFsIHVwZGF0ZSBpcyBuZWVkZWQuXG4gICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSBmYWxzZTtcbiAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlUmVzb3VyY2VzID0gZmFsc2U7XG4gICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb250cm9sLmluaXQoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudHNBc1NpZ25hbCA9XG4gICAgICB0eXBlb2YgdGhpcy5fZXZlbnRzID09PSBcImZ1bmN0aW9uXCIgfHwgIXRoaXMuX2V2ZW50c1NldDtcblxuICAgIGNvbnN0IHJlc291cmNlc0FzU2lnbmFsID1cbiAgICAgIHR5cGVvZiB0aGlzLl9yZXNvdXJjZXMgPT09IFwiZnVuY3Rpb25cIiB8fCAhdGhpcy5fcmVzb3VyY2VzU2V0O1xuXG4gICAgY29uc3QgY29uZmlnQXNTaWduYWwgPVxuICAgICAgdHlwZW9mIHRoaXMuY29uZmlnID09PSBcImZ1bmN0aW9uXCIgfHwgIXRoaXMuY29uZmlnO1xuXG4gICAgaWYgKGV2ZW50c0FzU2lnbmFsICYmIHJlc291cmNlc0FzU2lnbmFsICYmIGNvbmZpZ0FzU2lnbmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZ0FzU2lnbmFsKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc291cmNlc0FzU2lnbmFsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJlc291cmNlcygpO1xuICAgIH1cblxuICAgIGlmICghZXZlbnRzQXNTaWduYWwpIHtcbiAgICAgIHRoaXMudXBkYXRlRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuXG4gICAgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGVGdWxsKSB7XG4gICAgICBjb250cm9sLmludGVybmFsLnVwZCgpO1xuICAgICAgY29udHJvbC5pbnRlcm5hbC5wb3N0SW5pdCgpO1xuXG4gICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRnVsbCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZVJlc291cmNlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1cGRhdGU6IGFueSA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5fcmVxdWVzdFVwZGF0ZVJlc291cmNlcykge1xuICAgICAgICB1cGRhdGUucmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXNSZXNvbHZlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMpIHtcbiAgICAgICAgdXBkYXRlLmV2ZW50cyA9IHRoaXMuZXZlbnRzUmVzb2x2ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9yZXF1ZXN0VXBkYXRlUmVzb3VyY2VzIHx8IHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMpIHtcbiAgICAgICAgY29udHJvbC5pbnRlcm5hbC51cGQodXBkYXRlKTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlUmVzb3VyY2VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdFZpZXdDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3RWaWV3Q2hhbmdlID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGFyZ3M6IGFueSA9IHt9O1xuXG4gICAgICBhcmdzLnZpc2libGVSYW5nZUNoYW5nZWQgPVxuICAgICAgICB0aGlzLl92aXNpYmxlUmFuZ2Uuc3RhcnQgIT09IHRoaXMuY29udHJvbC52aXNpYmxlU3RhcnQoKSB8fFxuICAgICAgICB0aGlzLl92aXNpYmxlUmFuZ2UuZW5kICE9PSB0aGlzLmNvbnRyb2wudmlzaWJsZUVuZCgpO1xuXG4gICAgICB0aGlzLl92aXNpYmxlUmFuZ2Uuc3RhcnQgPSB0aGlzLmNvbnRyb2wudmlzaWJsZVN0YXJ0KCk7XG4gICAgICB0aGlzLl92aXNpYmxlUmFuZ2UuZW5kID0gdGhpcy5jb250cm9sLnZpc2libGVFbmQoKTtcblxuICAgICAgdGhpcy52aWV3Q2hhbmdlLmVtaXQoYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbC5kaXNwb3NlKCk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuY29udHJvbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHNpZ25hbCBpbnB1dHMgYW5kIHJldHVybnMgYSBzaW5nbGUgU2NoZWR1bGVyIHVwZGF0ZS5cbiAgICpcbiAgICogQSBzdGFuZGFsb25lIGV2ZW50cy9yZXNvdXJjZXMgaW5wdXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBzYW1lXG4gICAqIHByb3BlcnR5IHN1cHBsaWVkIHRocm91Z2ggY29uZmlnLlxuICAgKi9cbiAgcHJpdmF0ZSBzaWduYWxVcGRhdGVSZXNvbHZlZCgpOiBhbnkgfCBudWxsIHtcbiAgICBjb25zdCBjb25maWdJc1NpZ25hbCA9IHR5cGVvZiB0aGlzLmNvbmZpZyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IGV2ZW50c0lzU2lnbmFsID0gdHlwZW9mIHRoaXMuX2V2ZW50cyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IHJlc291cmNlc0lzU2lnbmFsID0gdHlwZW9mIHRoaXMuX3Jlc291cmNlcyA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgaWYgKCFjb25maWdJc1NpZ25hbCAmJiAhZXZlbnRzSXNTaWduYWwgJiYgIXJlc291cmNlc0lzU2lnbmFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBjb25maWdJc1NpZ25hbFxuICAgICAgPyB0aGlzLmNvbmZpZ1Jlc29sdmVkXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50c0lzU2lnbmFsXG4gICAgICA/IHRoaXMuZXZlbnRzUmVzb2x2ZWRcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gcmVzb3VyY2VzSXNTaWduYWxcbiAgICAgID8gdGhpcy5yZXNvdXJjZXNSZXNvbHZlZFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjb25maWdDaGFuZ2VkID1cbiAgICAgIGNvbmZpZ0lzU2lnbmFsICYmIGNvbmZpZyAhPT0gdGhpcy5fc2lnbmFsQ29uZmlnO1xuXG4gICAgY29uc3QgZXZlbnRzQ2hhbmdlZCA9XG4gICAgICBldmVudHNJc1NpZ25hbCAmJiBldmVudHMgIT09IHRoaXMuX3NpZ25hbEV2ZW50cztcblxuICAgIGNvbnN0IHJlc291cmNlc0NoYW5nZWQgPVxuICAgICAgcmVzb3VyY2VzSXNTaWduYWwgJiYgcmVzb3VyY2VzICE9PSB0aGlzLl9zaWduYWxSZXNvdXJjZXM7XG5cbiAgICB0aGlzLl9zaWduYWxDb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fc2lnbmFsRXZlbnRzID0gZXZlbnRzO1xuICAgIHRoaXMuX3NpZ25hbFJlc291cmNlcyA9IHJlc291cmNlcztcblxuICAgIGlmICghdGhpcy5fc2lnbmFsSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnQ2hhbmdlZCAmJiAhZXZlbnRzQ2hhbmdlZCAmJiAhcmVzb3VyY2VzQ2hhbmdlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ0NoYW5nZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmZ1bGxTaWduYWxVcGRhdGVSZXNvbHZlZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZTogYW55ID0ge307XG5cbiAgICBpZiAoZXZlbnRzQ2hhbmdlZCkge1xuICAgICAgdXBkYXRlLmV2ZW50cyA9IGV2ZW50cztcbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2VzQ2hhbmdlZCkge1xuICAgICAgdXBkYXRlLnJlc291cmNlcyA9IHJlc291cmNlcztcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdWxsIHVwZGF0ZSB3aGVuIGEgc2lnbmFsLWJhc2VkIGNvbmZpZyBjaGFuZ2VzLlxuICAgKlxuICAgKiBFeHBsaWNpdCBzdGFuZGFsb25lIGlucHV0cyBvdmVycmlkZSBjb25maWcuZXZlbnRzIGFuZFxuICAgKiBjb25maWcucmVzb3VyY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBmdWxsU2lnbmFsVXBkYXRlUmVzb2x2ZWQoKTogYW55IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1Jlc29sdmVkO1xuICAgIGNvbnN0IHVwZGF0ZTogYW55ID0gY29uZmlnID8geyAuLi5jb25maWcgfSA6IHt9O1xuXG4gICAgaWYgKHRoaXMuX2V2ZW50c1NldCkge1xuICAgICAgdXBkYXRlLmV2ZW50cyA9IHRoaXMuZXZlbnRzUmVzb2x2ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jlc291cmNlc1NldCkge1xuICAgICAgdXBkYXRlLnJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzUmVzb2x2ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHByb3BlcnRpZXMgZnJvbSBjb25maWcgdGhhdCBhcmUgc3VwcGxpZWQgdXNpbmcgc3RhbmRhbG9uZVxuICAgKiBBbmd1bGFyIGlucHV0cy5cbiAgICovXG4gIHByaXZhdGUgY29uZmlnUmVzb2x2ZWRGb3JVcGRhdGUoKTogYW55IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1Jlc29sdmVkO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9ldmVudHNTZXQgJiYgIXRoaXMuX3Jlc291cmNlc1NldCkge1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmNvbmZpZyB9O1xuXG4gICAgaWYgKHRoaXMuX2V2ZW50c1NldCkge1xuICAgICAgZGVsZXRlIHJlc3VsdC5ldmVudHM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jlc291cmNlc1NldCkge1xuICAgICAgZGVsZXRlIHJlc3VsdC5yZXNvdXJjZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1Jlc29sdmVkRm9yVXBkYXRlKCk7XG4gICAgY29uc3QgaGFzaCA9IG9wdEhhc2goY29uZmlnKTtcblxuICAgIGlmIChoYXNoICE9PSB0aGlzLl9oYXNoT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuXG4gICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5yZXNvdXJjZXMgJiYgIXRoaXMuX3Jlc291cmNlc1NldCkge1xuICAgICAgICBjb250cm9sLmludGVybmFsLnJlc291cmNlc0Zyb21BdHRyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250cm9sLmludGVybmFsLnNraXBVcGRhdGUoKSkge1xuICAgICAgICBjb250cm9sLmludGVybmFsLnNraXBwZWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuaW50ZXJuYWwubG9hZE9wdGlvbnMoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0Vmlld0NoYW5nZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faGFzaE9wdGlvbnMgPSBoYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9yZXNvdXJjZXNTZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlc1Jlc29sdmVkO1xuICAgIGNvbnN0IGhhc2ggPSBvcHRIYXNoKHJlc291cmNlcyk7XG5cbiAgICBpZiAoaGFzaCA9PT0gdGhpcy5faGFzaFJlc291cmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuY29udHJvbDtcblxuICAgIGNvbnRyb2wucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICAgIGNvbnRyb2wuaW50ZXJuYWwucmVzb3VyY2VzRnJvbUF0dHIoKTtcblxuICAgIGlmIChjb250cm9sLmludGVybmFsLnNraXBVcGRhdGUoKSkge1xuICAgICAgY29udHJvbC5pbnRlcm5hbC5za2lwcGVkKCk7XG4gICAgICB0aGlzLl9oYXNoUmVzb3VyY2VzID0gaGFzaDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlUmVzb3VyY2VzID0gdHJ1ZTtcbiAgICB0aGlzLl9yZXF1ZXN0Vmlld0NoYW5nZSA9IHRydWU7XG4gICAgdGhpcy5faGFzaFJlc291cmNlcyA9IGhhc2g7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGNvbXBsZXRlIGV2ZW50IGxpc3QuXG4gICAqXG4gICAqIE5vIGluZGl2aWR1YWwgZXZlbnQgZGlmZmluZyBpcyBwZXJmb3JtZWQuIFNpZ25hbCBpbnB1dHMgYXJlIGRldGVjdGVkXG4gICAqIGJ5IHJlZmVyZW5jZSBpbiBzaWduYWxVcGRhdGVSZXNvbHZlZCgpOyBvcmRpbmFyeSBhcnJheSBpbnB1dHMgYXJlXG4gICAqIGNoZWNrZWQgdXNpbmcgb3B0SGFzaCgpIGZyb20gbmdEb0NoZWNrKCkuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUV2ZW50cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1NldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZXZlbnRzUmVzb2x2ZWQ7XG4gICAgY29uc3QgaGFzaCA9IG9wdEhhc2goZXZlbnRzKTtcblxuICAgIGlmIChoYXNoID09PSB0aGlzLl9oYXNoRXZlbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuXG4gICAgY29udHJvbC5ldmVudHMubGlzdCA9IGV2ZW50cztcblxuICAgIGlmIChjb250cm9sLmludGVybmFsLnNraXBVcGRhdGUoKSkge1xuICAgICAgY29udHJvbC5pbnRlcm5hbC5za2lwcGVkKCk7XG4gICAgICB0aGlzLl9oYXNoRXZlbnRzID0gaGFzaDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRXZlbnRzID0gdHJ1ZTtcbiAgICB0aGlzLl9oYXNoRXZlbnRzID0gaGFzaDtcbiAgfVxufVxuIl19
|