@boldreports/angular-reporting-components 5.2.26 → 5.2.27

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.
@@ -0,0 +1,380 @@
1
+ import { EventEmitter, Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export { ContentChild, Type, forwardRef } from '@angular/core';
4
+ export let currentTemplateElement;
5
+ let firstVal = {};
6
+ /** Internal Helpers */
7
+ export class Utils {
8
+ static IterateAndGetChanges(obj) {
9
+ if (ej.isNullOrUndefined(obj.tags) || obj.tags.length === 0) {
10
+ return null;
11
+ }
12
+ let res = {};
13
+ for (let i = 0, tags = obj.tags; i < tags.length; i++) {
14
+ let tag = tags[i], tagElement = obj['tag_' + tag.replace(/\./g, '_')];
15
+ if (!ej.isNullOrUndefined(tagElement) && tagElement.hasChanges) {
16
+ res[tag] = tagElement.getChangesAndReset();
17
+ }
18
+ }
19
+ return res;
20
+ }
21
+ }
22
+ Utils.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Utils, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ Utils.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Utils });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Utils, decorators: [{
25
+ type: Injectable
26
+ }] });
27
+ // tslint:disable-next-line:max-line-length
28
+ export class BoldReportComponents {
29
+ // tslint:disable-next-line:max-line-length
30
+ constructor(controlName, el, cdRef, tags, ejIterableDiffers, _ejKeyValueDiffers) {
31
+ this.controlName = controlName;
32
+ this.el = el;
33
+ this.cdRef = cdRef;
34
+ this.tags = tags;
35
+ this.ejIterableDiffers = ejIterableDiffers;
36
+ this._ejKeyValueDiffers = _ejKeyValueDiffers;
37
+ this.model = {};
38
+ this.outputs = [];
39
+ this.inputs = [];
40
+ this.twoways = [];
41
+ // this.__shadow = this.dom.getShadowRoot(this.el.nativeElement);
42
+ this.firstCheck = true;
43
+ this.ejIterable = this.ejIterableDiffers.find([]).create(null);
44
+ this.ejKeyValueDif = _ejKeyValueDiffers.find([]).create();
45
+ }
46
+ static bindAndRaiseEvent(instance, model, event) {
47
+ if (!event.startsWith('model.')) { // && instance[event]['observers'].length > 1) {
48
+ let originalEvt = event.startsWith('bold') ? event.substr(4) : event;
49
+ model[originalEvt] = function (params) {
50
+ instance[event + '_output']['emit'](params);
51
+ };
52
+ }
53
+ }
54
+ createTwoways(twoways) {
55
+ if (!twoways) {
56
+ return;
57
+ }
58
+ let model = this.model;
59
+ for (let i = 0; i < twoways.length; i++) {
60
+ let element = twoways[i].replace(/\_/g, '.');
61
+ ej.createObject(element + 'Change', this[twoways[i] + '_twoChange'], model);
62
+ ej.createObject(element, this.addTwoways(element), model);
63
+ }
64
+ }
65
+ addTwoways(prop) {
66
+ let model = this.model, value = firstVal; // , originalProp = prop.replace(/-/g, '.');
67
+ return function (newVal, isApp) {
68
+ if (value === firstVal) {
69
+ value = ej.getObject(prop + '_two', model);
70
+ if (value === undefined) {
71
+ value = ej.getObject(prop, this === undefined || this.defaults === undefined ? {} : this.defaults);
72
+ }
73
+ }
74
+ if (newVal === undefined) {
75
+ return value;
76
+ }
77
+ if (value === newVal) {
78
+ return;
79
+ }
80
+ value = newVal;
81
+ if (!isApp) {
82
+ ej.createObject(prop + '_two', newVal, model);
83
+ ej.getObject(prop + 'Change', model).emit(newVal);
84
+ }
85
+ };
86
+ }
87
+ ngOnInit() {
88
+ for (let key in this) {
89
+ if (key.indexOf('_input') != -1)
90
+ this.inputs.push(key);
91
+ if (key.indexOf('_output') != -1)
92
+ this.outputs.push(key);
93
+ if (key.indexOf('_two') != -1 && key.indexOf('_twoChange') == -1)
94
+ this.twoways.push(key.replace('_two', ''));
95
+ }
96
+ if (ej.isNullOrUndefined(this['options'])) {
97
+ this.createTwoways(this.twoways);
98
+ }
99
+ }
100
+ ngAfterContentInit() {
101
+ this.firstCheck = false;
102
+ let model = this.model, events = this.outputs;
103
+ if (events) {
104
+ for (let i = 0; i < events.length; i++) {
105
+ let event = events[i].replace('_output', '');
106
+ BoldReportComponents.bindAndRaiseEvent(this, model, event);
107
+ }
108
+ }
109
+ if (ej.isNullOrUndefined(this['options'])) {
110
+ for (let i = 0; i < this.tags.length; i++) {
111
+ let element = this.tags[i], item = this['tag_' + element.replace(/\./g, '_')];
112
+ if (!ej.isNullOrUndefined(item)) {
113
+ ej.createObject(element, item.getList(), this.model);
114
+ }
115
+ }
116
+ for (let i = 0; i < this.inputs.length; i++) {
117
+ let property = this.inputs[i];
118
+ let modelProperty = this.inputs[i].replace('_input', '');
119
+ if (this[property] != null) {
120
+ if (modelProperty.indexOf('_') == -1) {
121
+ if (this.model[modelProperty]) {
122
+ $.extend(true, this.model[modelProperty], this[property]);
123
+ }
124
+ else {
125
+ this.model[modelProperty] = this[property];
126
+ }
127
+ }
128
+ else if (modelProperty.indexOf('_two') == -1) {
129
+ let tempObj = {};
130
+ let key = modelProperty.replace(/\_/g, '.');
131
+ ej.createObject(key, this[property], tempObj);
132
+ let rootProp = key.split('.')[0];
133
+ if (this.model[rootProp] == undefined)
134
+ this.model[rootProp] = {};
135
+ $.extend(true, this.model[rootProp], tempObj[rootProp]);
136
+ }
137
+ }
138
+ }
139
+ for (let i = 0; i < this.twoways.length; i++) {
140
+ let twoway = this.twoways[i];
141
+ let twowayProperty = twoway + '_two';
142
+ if (this[twowayProperty] != null) {
143
+ if (twoway.indexOf('_') == -1) {
144
+ this.model[twowayProperty] = this[twowayProperty];
145
+ }
146
+ else {
147
+ let tempObj = {};
148
+ let key = twoway.replace(/\_/g, '.') + '_two';
149
+ ej.createObject(key, this[twowayProperty], tempObj);
150
+ let rootProp = twowayProperty.split('_')[0];
151
+ $.extend(true, this.model[rootProp], tempObj[rootProp]);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ else
157
+ this.model = jQuery.extend(this.model, this['options']);
158
+ }
159
+ ngDoCheck() {
160
+ if (ej.isNullOrUndefined(this['options'])) {
161
+ this.twoways.forEach(element => {
162
+ if (this[element + '_two'] instanceof Array) {
163
+ let changes = this.ejIterable.diff(this[element + '_two']);
164
+ if (changes) {
165
+ let ngChanges = {};
166
+ if (this.widget != undefined) {
167
+ ngChanges = this.getTwowayChanges(changes.collection, ngChanges, element.replace(/\_/g, '.'));
168
+ ej.createObject(element.replace(/\_/g, '.') + '.two', changes.collection, ngChanges);
169
+ this.widget['setModel'](ngChanges, $.isPlainObject(ngChanges));
170
+ }
171
+ }
172
+ }
173
+ });
174
+ }
175
+ else {
176
+ let changes = this.ejKeyValueDif.diff(this['options']);
177
+ if (changes) {
178
+ if (this.widget != undefined) {
179
+ var ngchanges = {};
180
+ changes.forEachChangedItem((changedprop) => {
181
+ ej.createObject(changedprop.key, changedprop.currentValue, ngchanges);
182
+ });
183
+ this.widget['setModel'](ngchanges, $.isPlainObject(ngchanges));
184
+ }
185
+ }
186
+ }
187
+ }
188
+ ngAfterViewInit() {
189
+ let nativeElement = this.isEditor ? $(this.el.nativeElement.children) : $(this.el.nativeElement);
190
+ let controlName = this.lowerCaseFirstLetter(this.controlName);
191
+ this.widget = $(nativeElement)[controlName](this.model)[controlName]('instance');
192
+ }
193
+ lowerCaseFirstLetter(string) {
194
+ return string[0].toLowerCase() + string.slice(1);
195
+ }
196
+ ngOnChanges(changes) {
197
+ if (this.firstCheck) {
198
+ return;
199
+ }
200
+ let ngChanges = {};
201
+ if (ej.isNullOrUndefined(this['options'])) {
202
+ for (let key in changes) {
203
+ let element = changes[key];
204
+ if (element.previousValue === element.currentValue) {
205
+ break;
206
+ }
207
+ key = key.replace('_input', '').replace(/\_/g, '.');
208
+ if (key.endsWith('.two')) {
209
+ let oKey = key.replace('.two', '');
210
+ ngChanges = this.getTwowayChanges(element.currentValue, ngChanges, oKey);
211
+ }
212
+ ej.createObject(key, element.currentValue, ngChanges);
213
+ }
214
+ this.widget['setModel'](ngChanges, $.isPlainObject(ngChanges));
215
+ }
216
+ }
217
+ getTwowayChanges(value, ngChanges, prop) {
218
+ let valFn = ej.getObject(prop, this.widget['model']);
219
+ valFn(value, true);
220
+ ej.createObject(prop, valFn, ngChanges);
221
+ return ngChanges;
222
+ }
223
+ ngAfterContentChecked() {
224
+ // TODO: ChangeDetection Third/Multi level
225
+ let changes = Utils.IterateAndGetChanges(this);
226
+ for (let key in changes) {
227
+ if (changes.hasOwnProperty(key)) {
228
+ let element = changes[key];
229
+ this.widget['_' + key](element);
230
+ }
231
+ }
232
+ }
233
+ ngOnDestroy() {
234
+ this.widget['destroy']();
235
+ }
236
+ }
237
+ BoldReportComponents.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BoldReportComponents, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
238
+ BoldReportComponents.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BoldReportComponents });
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BoldReportComponents, decorators: [{
240
+ type: Injectable
241
+ }], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Array }, { type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }]; } });
242
+ export class ComplexTagElement {
243
+ // tags: Array<string>;
244
+ constructor(tags) {
245
+ this.tags = tags;
246
+ this.valueChange = new EventEmitter();
247
+ this.complexes = [];
248
+ this.hasChanges = false;
249
+ this.firstChange = true;
250
+ Object.defineProperty(this, 'parent', {
251
+ enumerable: false,
252
+ writable: true,
253
+ value: null
254
+ });
255
+ currentTemplateElement = this;
256
+ }
257
+ ngOnInit() {
258
+ this.firstChange = false;
259
+ for (let key in this) {
260
+ if (key.indexOf('_') != -1 && key.indexOf('tag_') == -1)
261
+ this.complexes.push(key);
262
+ }
263
+ for (let i = 0; i < this.complexes.length; i++) {
264
+ let property = this.complexes[i];
265
+ if (property.indexOf('_') != -1) {
266
+ let tempObj = {};
267
+ let key = property.replace(/\_/g, '.');
268
+ ej.createObject(key, this[property], tempObj);
269
+ let rootProp = key.split('.')[0];
270
+ if (this[rootProp] == undefined)
271
+ this[rootProp] = {};
272
+ $.extend(true, this[rootProp], tempObj[rootProp]);
273
+ }
274
+ }
275
+ }
276
+ ensureCleanObject() {
277
+ let tags = this.tags;
278
+ for (let i = 0; i < tags.length; i++) {
279
+ let element = tags[i], tagElement = this['tag_' + element.replace(/\./g, '_')];
280
+ if (i === 0 && this[element]) {
281
+ return;
282
+ }
283
+ if (ej.isNullOrUndefined(tagElement)) {
284
+ continue;
285
+ }
286
+ ej.createObject(element, tagElement.getList(), this);
287
+ }
288
+ }
289
+ ngOnChanges(changes) {
290
+ if (this.firstChange) {
291
+ return;
292
+ }
293
+ this.recentChanges = changes;
294
+ this.hasChanges = true;
295
+ }
296
+ getChangesAndReset() {
297
+ if (this.hasChanges === false) {
298
+ return;
299
+ }
300
+ let changes = this.recentChanges || {};
301
+ let contentChanges = Utils.IterateAndGetChanges(this);
302
+ if (!$.isEmptyObject(contentChanges)) {
303
+ for (let key in contentChanges) {
304
+ if (contentChanges.hasOwnProperty(key)) {
305
+ let element = contentChanges[key];
306
+ // this.el.nativeElement.
307
+ if (!ej.isNullOrUndefined(this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key]))
308
+ this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key](element);
309
+ }
310
+ }
311
+ }
312
+ this.hasChanges = false;
313
+ return changes;
314
+ }
315
+ ngAfterContentChecked() {
316
+ let tags = this.tags;
317
+ for (let i = 0, len = tags.length; i < len; i++) {
318
+ let element = tags[i], tagElement = this['tag_' + element.replace(/\./g, '_')];
319
+ if (tagElement && tagElement.hasChanges) {
320
+ this.hasChanges = true;
321
+ }
322
+ }
323
+ }
324
+ }
325
+ ComplexTagElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ComplexTagElement, deps: [{ token: Array }], target: i0.ɵɵFactoryTarget.Injectable });
326
+ ComplexTagElement.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ComplexTagElement });
327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ComplexTagElement, decorators: [{
328
+ type: Injectable
329
+ }], ctorParameters: function () { return [{ type: Array }]; } });
330
+ export class ArrayTagElement {
331
+ constructor(propertyName) {
332
+ this.propertyName = propertyName;
333
+ this.hasChanges = false;
334
+ }
335
+ // TODO: Need to consider dynamic child change
336
+ ngAfterContentInit() {
337
+ let index = 0;
338
+ this.list = this.children.map((child) => {
339
+ child.index = index++;
340
+ child.property = this.propertyName;
341
+ return child;
342
+ });
343
+ }
344
+ getList() {
345
+ let list = this.list;
346
+ for (let i = 0; i < list.length; i++) {
347
+ list[i].ensureCleanObject();
348
+ }
349
+ return list;
350
+ }
351
+ getChangesAndReset() {
352
+ this.hasChanges = false;
353
+ return this.recentChanges;
354
+ }
355
+ ngAfterContentChecked() {
356
+ let changes = {}, res = changes[this.propertyName] = [], childChange;
357
+ for (let i = 0, list = this.list; i < list.length; i++) {
358
+ let child = list[i];
359
+ if (child.hasChanges) {
360
+ childChange = child.getChangesAndReset();
361
+ if (!ej.isNullOrUndefined(childChange)) {
362
+ res.push({
363
+ index: child.index,
364
+ change: childChange
365
+ });
366
+ }
367
+ }
368
+ }
369
+ if (res.length > 0) {
370
+ this.recentChanges = res;
371
+ this.hasChanges = true;
372
+ }
373
+ }
374
+ }
375
+ ArrayTagElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ArrayTagElement, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
376
+ ArrayTagElement.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ArrayTagElement });
377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ArrayTagElement, decorators: [{
378
+ type: Injectable
379
+ }], ctorParameters: function () { return [{ type: undefined }]; } });
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxZQUFZLEVBRXlFLFVBQVUsRUFFbEcsTUFBTSxlQUFlLENBQUM7O0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxNQUFNLENBQUMsSUFBSSxzQkFBMkIsQ0FBQztBQWlCdkMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBR2xCLHVCQUF1QjtBQUN2QixNQUFNLE9BQU8sS0FBSztJQUNkLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFlO1FBQ3ZDLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksR0FBRyxHQUFlLEVBQUUsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFTLEdBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM5QztTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUM7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Q0FBQztJQUNoQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBOEIsT0FBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBZ0IsQ0FBQztRQUV0RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUNsQixXQUFXLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLENBQWU7d0JBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDbEIsTUFBTSxFQUFFLFdBQVc7cUJBQ3RCLENBQUMsQ0FBQztpQkFDTjthQUNKO1NBQ0o7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQzs7NEdBckRRLGVBQWU7Z0hBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEV2ZW50RW1pdHRlciwgUXVlcnlMaXN0LCBFbGVtZW50UmVmLCBTaW1wbGVDaGFuZ2UsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgSXRlcmFibGVEaWZmZXJzLCBLZXlWYWx1ZURpZmZlcnMsIE9uSW5pdCxcclxuICAgIERvQ2hlY2ssIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25EZXN0cm95LCBJbmplY3RhYmxlXHJcblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IHsgQ29udGVudENoaWxkLCBUeXBlLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgbGV0IGN1cnJlbnRUZW1wbGF0ZUVsZW1lbnQ6IGFueTtcclxuXHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFyZW50VGFnIHtcclxuICAgIHRhZ3M6IEFycmF5PGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNoaWxkQ2hhbmdlIHtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICBjaGFuZ2U6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ2hhbmdlU2V0IHtcclxuICAgIFtrZXk6IHN0cmluZ106IEFycmF5PElDaGlsZENoYW5nZT47XHJcbn1cclxuXHJcbmxldCBmaXJzdFZhbCA9IHt9O1xyXG5cclxuQEluamVjdGFibGUoKVxyXG4vKiogSW50ZXJuYWwgSGVscGVycyAqL1xyXG5leHBvcnQgY2xhc3MgVXRpbHMge1xyXG4gICAgc3RhdGljIEl0ZXJhdGVBbmRHZXRDaGFuZ2VzKG9iajogSVBhcmVudFRhZyk6IElDaGFuZ2VTZXQge1xyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZChvYmoudGFncykgfHwgb2JqLnRhZ3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzOiBJQ2hhbmdlU2V0ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIHRhZ3MgPSBvYmoudGFnczsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRhZyA9IHRhZ3NbaV0sIHRhZ0VsZW1lbnQgPSAoPGFueT5vYmopWyd0YWdfJyArIHRhZy5yZXBsYWNlKC9cXC4vZywgJ18nKV07XHJcbiAgICAgICAgICAgIGlmICghZWouaXNOdWxsT3JVbmRlZmluZWQodGFnRWxlbWVudCkgJiYgdGFnRWxlbWVudC5oYXNDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICByZXNbdGFnXSA9IHRhZ0VsZW1lbnQuZ2V0Q2hhbmdlc0FuZFJlc2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG5leHBvcnQgY2xhc3MgQm9sZFJlcG9ydENvbXBvbmVudHM8VywgVD4gaW1wbGVtZW50cyBJUGFyZW50VGFnLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIERvQ2hlY2ssIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25EZXN0cm95IHtcclxuICAgIHB1YmxpYyBtb2RlbDogVCA9IDxUPnt9O1xyXG4gICAgcHVibGljIHdpZGdldDogVztcclxuICAgIHByb3RlY3RlZCBvdXRwdXRzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBwcm90ZWN0ZWQgaW5wdXRzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBwcm90ZWN0ZWQgdHdvd2F5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgcHJvdGVjdGVkIGlzRWRpdG9yOiBib29sZWFuO1xyXG5cclxuICAgIHByaXZhdGUgZmlyc3RDaGVjazogYm9vbGVhbjtcclxuICAgIGVqSXRlcmFibGU6IGFueTtcclxuICAgIGVqS2V5VmFsdWVEaWY6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBiaW5kQW5kUmFpc2VFdmVudChpbnN0YW5jZTogYW55LCBtb2RlbDogYW55LCBldmVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFldmVudC5zdGFydHNXaXRoKCdtb2RlbC4nKSkgey8vICYmIGluc3RhbmNlW2V2ZW50XVsnb2JzZXJ2ZXJzJ10ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxFdnQgPSBldmVudC5zdGFydHNXaXRoKCdib2xkJykgPyBldmVudC5zdWJzdHIoNCkgOiBldmVudDtcclxuICAgICAgICAgICAgbW9kZWxbb3JpZ2luYWxFdnRdID0gZnVuY3Rpb24gKHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtldmVudCArICdfb3V0cHV0J11bJ2VtaXQnXShwYXJhbXMpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjb250cm9sTmFtZTogc3RyaW5nLCBwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyB0YWdzOiBBcnJheTxzdHJpbmc+LCBwcml2YXRlIGVqSXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsIHByaXZhdGUgX2VqS2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMpIHtcclxuICAgICAgICAvLyAgICAgICAgdGhpcy5fX3NoYWRvdyA9IHRoaXMuZG9tLmdldFNoYWRvd1Jvb3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB0aGlzLmZpcnN0Q2hlY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWpJdGVyYWJsZSA9IHRoaXMuZWpJdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuZWpLZXlWYWx1ZURpZiA9IF9laktleVZhbHVlRGlmZmVycy5maW5kKFtdKS5jcmVhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVHdvd2F5cyh0d293YXlzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgaWYgKCF0d293YXlzKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0d293YXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gdHdvd2F5c1tpXS5yZXBsYWNlKC9cXF8vZywgJy4nKTtcclxuICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGVsZW1lbnQgKyAnQ2hhbmdlJywgKDxhbnk+dGhpcylbdHdvd2F5c1tpXSArICdfdHdvQ2hhbmdlJ10sIG1vZGVsKTtcclxuICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGVsZW1lbnQsIHRoaXMuYWRkVHdvd2F5cyhlbGVtZW50KSwgbW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkVHdvd2F5cyhwcm9wOiBzdHJpbmcpOiBGdW5jdGlvbiB7XHJcbiAgICAgICAgbGV0IG1vZGVsID0gdGhpcy5tb2RlbCwgdmFsdWUgPSBmaXJzdFZhbDsgLy8gLCBvcmlnaW5hbFByb3AgPSBwcm9wLnJlcGxhY2UoLy0vZywgJy4nKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5ld1ZhbDogYW55LCBpc0FwcDogYm9vbGVhbikge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZpcnN0VmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGVqLmdldE9iamVjdChwcm9wICsgJ190d28nLCBtb2RlbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZWouZ2V0T2JqZWN0KHByb3AsIHRoaXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmRlZmF1bHRzID09PSB1bmRlZmluZWQgPyB7fSA6IHRoaXMuZGVmYXVsdHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbmV3VmFsKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbDtcclxuICAgICAgICAgICAgaWYgKCFpc0FwcCkge1xyXG4gICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KHByb3AgKyAnX3R3bycsIG5ld1ZhbCwgbW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgZWouZ2V0T2JqZWN0KHByb3AgKyAnQ2hhbmdlJywgbW9kZWwpLmVtaXQobmV3VmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcykge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19pbnB1dCcpICE9IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19vdXRwdXQnKSAhPSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX3R3bycpICE9IC0xICYmIGtleS5pbmRleE9mKCdfdHdvQ2hhbmdlJykgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnR3b3dheXMucHVzaChrZXkucmVwbGFjZSgnX3R3bycsICcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZCgoPGFueT50aGlzKVsnb3B0aW9ucyddKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVR3b3dheXModGhpcy50d293YXlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIHRoaXMuZmlyc3RDaGVjayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVsLCBldmVudHMgPSB0aGlzLm91dHB1dHM7XHJcbiAgICAgICAgaWYgKGV2ZW50cykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gZXZlbnRzW2ldLnJlcGxhY2UoJ19vdXRwdXQnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBCb2xkUmVwb3J0Q29tcG9uZW50cy5iaW5kQW5kUmFpc2VFdmVudCh0aGlzLCBtb2RlbCwgZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZCgoPGFueT50aGlzKVsnb3B0aW9ucyddKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnRhZ3NbaV0sIGl0ZW0gPSAoPGFueT50aGlzKVsndGFnXycgKyBlbGVtZW50LnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuICAgICAgICAgICAgICAgIGlmICghZWouaXNOdWxsT3JVbmRlZmluZWQoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlai5jcmVhdGVPYmplY3QoZWxlbWVudCwgaXRlbS5nZXRMaXN0KCksIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB0aGlzLmlucHV0c1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCBtb2RlbFByb3BlcnR5ID0gdGhpcy5pbnB1dHNbaV0ucmVwbGFjZSgnX2lucHV0JywgJycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCg8YW55PnRoaXMpW3Byb3BlcnR5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsUHJvcGVydHkuaW5kZXhPZignXycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzLm1vZGVsKVttb2RlbFByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgKDxhbnk+dGhpcy5tb2RlbClbbW9kZWxQcm9wZXJ0eV0sICg8YW55PnRoaXMpW3Byb3BlcnR5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLm1vZGVsKVttb2RlbFByb3BlcnR5XSA9ICg8YW55PnRoaXMpW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZWxQcm9wZXJ0eS5pbmRleE9mKCdfdHdvJykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBPYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gbW9kZWxQcm9wZXJ0eS5yZXBsYWNlKC9cXF8vZywgJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGtleSwgKDxhbnk+dGhpcylbcHJvcGVydHldLCB0ZW1wT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvb3RQcm9wID0ga2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzLm1vZGVsKVtyb290UHJvcF0gPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5tb2RlbClbcm9vdFByb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsICg8YW55PnRoaXMubW9kZWwpW3Jvb3RQcm9wXSwgdGVtcE9ialtyb290UHJvcF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHdvd2F5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHR3b3dheSA9IHRoaXMudHdvd2F5c1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCB0d293YXlQcm9wZXJ0eSA9IHR3b3dheSArICdfdHdvJztcclxuICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzKVt0d293YXlQcm9wZXJ0eV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0d293YXkuaW5kZXhPZignXycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMubW9kZWwpW3R3b3dheVByb3BlcnR5XSA9ICg8YW55PnRoaXMpW3R3b3dheVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcE9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSB0d293YXkucmVwbGFjZSgvXFxfL2csICcuJykgKyAnX3R3byc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChrZXksICg8YW55PnRoaXMpW3R3b3dheVByb3BlcnR5XSwgdGVtcE9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb290UHJvcCA9IHR3b3dheVByb3BlcnR5LnNwbGl0KCdfJylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsICg8YW55PnRoaXMubW9kZWwpW3Jvb3RQcm9wXSwgdGVtcE9ialtyb290UHJvcF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBqUXVlcnkuZXh0ZW5kKHRoaXMubW9kZWwsICg8YW55PnRoaXMpWydvcHRpb25zJ10pO1xyXG5cclxuICAgIH1cclxuICAgIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBpZiAoZWouaXNOdWxsT3JVbmRlZmluZWQoKDxhbnk+dGhpcylbJ29wdGlvbnMnXSkpIHtcclxuICAgICAgICAgICAgdGhpcy50d293YXlzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDxhbnk+dGhpcylbZWxlbWVudCArICdfdHdvJ10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGFuZ2VzID0gdGhpcy5lakl0ZXJhYmxlLmRpZmYoKDxhbnk+dGhpcylbZWxlbWVudCArICdfdHdvJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZ0NoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdDaGFuZ2VzID0gdGhpcy5nZXRUd293YXlDaGFuZ2VzKGNoYW5nZXMuY29sbGVjdGlvbiwgbmdDaGFuZ2VzLCBlbGVtZW50LnJlcGxhY2UoL1xcXy9nLCAnLicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChlbGVtZW50LnJlcGxhY2UoL1xcXy9nLCAnLicpICsgJy50d28nLCBjaGFuZ2VzLmNvbGxlY3Rpb24sIG5nQ2hhbmdlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ3NldE1vZGVsJ10obmdDaGFuZ2VzLCAkLmlzUGxhaW5PYmplY3QobmdDaGFuZ2VzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VzID0gdGhpcy5laktleVZhbHVlRGlmLmRpZmYoKDxhbnk+dGhpcylbJ29wdGlvbnMnXSk7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5nY2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaENoYW5nZWRJdGVtKChjaGFuZ2VkcHJvcDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChjaGFuZ2VkcHJvcC5rZXksIGNoYW5nZWRwcm9wLmN1cnJlbnRWYWx1ZSwgbmdjaGFuZ2VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ3NldE1vZGVsJ10obmdjaGFuZ2VzLCAkLmlzUGxhaW5PYmplY3QobmdjaGFuZ2VzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgbGV0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLmlzRWRpdG9yID8gJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pIDogJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIGxldCBjb250cm9sTmFtZTogc3RyaW5nID0gdGhpcy5sb3dlckNhc2VGaXJzdExldHRlcih0aGlzLmNvbnRyb2xOYW1lKTtcclxuICAgICAgICB0aGlzLndpZGdldCA9ICgkKG5hdGl2ZUVsZW1lbnQpIGFzIGFueSlbY29udHJvbE5hbWVdKHRoaXMubW9kZWwpW2NvbnRyb2xOYW1lXSgnaW5zdGFuY2UnKTtcclxuICAgIH1cclxuXHJcbiAgICBsb3dlckNhc2VGaXJzdExldHRlcihzdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBzdHJpbmdbMF0udG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RDaGVjaykgeyByZXR1cm47IH1cclxuICAgICAgICBsZXQgbmdDaGFuZ2VzID0ge307XHJcbiAgICAgICAgaWYgKGVqLmlzTnVsbE9yVW5kZWZpbmVkKCg8YW55PnRoaXMpWydvcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGNoYW5nZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnByZXZpb3VzVmFsdWUgPT09IGVsZW1lbnQuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgnX2lucHV0JywgJycpLnJlcGxhY2UoL1xcXy9nLCAnLicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5lbmRzV2l0aCgnLnR3bycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9LZXkgPSBrZXkucmVwbGFjZSgnLnR3bycsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICBuZ0NoYW5nZXMgPSB0aGlzLmdldFR3b3dheUNoYW5nZXMoZWxlbWVudC5jdXJyZW50VmFsdWUsIG5nQ2hhbmdlcywgb0tleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlai5jcmVhdGVPYmplY3Qoa2V5LCBlbGVtZW50LmN1cnJlbnRWYWx1ZSwgbmdDaGFuZ2VzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgKDxhbnk+dGhpcy53aWRnZXQpWydzZXRNb2RlbCddKG5nQ2hhbmdlcywgJC5pc1BsYWluT2JqZWN0KG5nQ2hhbmdlcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRUd293YXlDaGFuZ2VzKHZhbHVlOiBhbnksIG5nQ2hhbmdlczogYW55LCBwcm9wOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgdmFsRm4gPSBlai5nZXRPYmplY3QocHJvcCwgKDxhbnk+dGhpcy53aWRnZXQpWydtb2RlbCddKTtcclxuICAgICAgICB2YWxGbih2YWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgZWouY3JlYXRlT2JqZWN0KHByb3AsIHZhbEZuLCBuZ0NoYW5nZXMpO1xyXG4gICAgICAgIHJldHVybiBuZ0NoYW5nZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xyXG4gICAgICAgIC8vIFRPRE86IENoYW5nZURldGVjdGlvbiBUaGlyZC9NdWx0aSBsZXZlbFxyXG4gICAgICAgIGxldCBjaGFuZ2VzOiBJQ2hhbmdlU2V0ID0gVXRpbHMuSXRlcmF0ZUFuZEdldENoYW5nZXModGhpcyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBjaGFuZ2VzW2tleV07XHJcbiAgICAgICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ18nICsga2V5XShlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ2Rlc3Ryb3knXSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDb21wbGV4VGFnRWxlbWVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICAgIHJlY2VudENoYW5nZXM6IGFueTtcclxuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XHJcbiAgICBmaXJzdENoYW5nZTogYm9vbGVhbjtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBwcm90ZWN0ZWQgY29tcGxleFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz47XHJcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xyXG4gICAgcGFyZW50OiBCb2xkUmVwb3J0Q29tcG9uZW50czxhbnksIGFueT47XHJcbiAgICBjb21wbGV4ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAvLyB0YWdzOiBBcnJheTxzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0YWdzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGFyZW50Jywge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3VycmVudFRlbXBsYXRlRWxlbWVudCA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignXycpICE9IC0xICYmIGtleS5pbmRleE9mKCd0YWdfJykgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXhlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wbGV4ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gdGhpcy5jb21wbGV4ZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pbmRleE9mKCdfJykgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wT2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBwcm9wZXJ0eS5yZXBsYWNlKC9cXF8vZywgJy4nKTtcclxuICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChrZXksICg8YW55PnRoaXMpW3Byb3BlcnR5XSwgdGVtcE9iaik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcm9vdFByb3AgPSBrZXkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzKVtyb290UHJvcF0gPT0gdW5kZWZpbmVkKSAoPGFueT50aGlzKVtyb290UHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsICg8YW55PnRoaXMpW3Jvb3RQcm9wXSwgdGVtcE9ialtyb290UHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVuc3VyZUNsZWFuT2JqZWN0KCkge1xyXG4gICAgICAgIGxldCB0YWdzID0gdGhpcy50YWdzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRhZ3NbaV0sIHRhZ0VsZW1lbnQgPSAoPGFueT50aGlzKVsndGFnXycgKyBlbGVtZW50LnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID09PSAwICYmICg8YW55PnRoaXMpW2VsZW1lbnRdKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBpZiAoZWouaXNOdWxsT3JVbmRlZmluZWQodGFnRWxlbWVudCkpIHsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChlbGVtZW50LCB0YWdFbGVtZW50LmdldExpc3QoKSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgICAgICBpZiAodGhpcy5maXJzdENoYW5nZSkgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLnJlY2VudENoYW5nZXMgPSBjaGFuZ2VzO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhbmdlc0FuZFJlc2V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXMgPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgICAgICBsZXQgY2hhbmdlcyA9IHRoaXMucmVjZW50Q2hhbmdlcyB8fCB7fTtcclxuICAgICAgICBsZXQgY29udGVudENoYW5nZXMgPSBVdGlscy5JdGVyYXRlQW5kR2V0Q2hhbmdlcyh0aGlzKTtcclxuICAgICAgICBpZiAoISQuaXNFbXB0eU9iamVjdChjb250ZW50Q2hhbmdlcykpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRlbnRDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudENoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gY29udGVudENoYW5nZXNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlai5pc051bGxPclVuZGVmaW5lZCh0aGlzLnBhcmVudC53aWRnZXRbJ18nICsgdGhpcy5wcm9wZXJ0eS5yZXBsYWNlKC9cXC4vZywgJ18nKSArICdfJyArIGtleV0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC53aWRnZXRbJ18nICsgdGhpcy5wcm9wZXJ0eS5yZXBsYWNlKC9cXC4vZywgJ18nKSArICdfJyArIGtleV0oZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcclxuICAgICAgICBsZXQgdGFncyA9IHRoaXMudGFncztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRhZ3NbaV0sIHRhZ0VsZW1lbnQgPSAoPGFueT50aGlzKVsndGFnXycgKyBlbGVtZW50LnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuICAgICAgICAgICAgaWYgKHRhZ0VsZW1lbnQgJiYgdGFnRWxlbWVudC5oYXNDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBcnJheVRhZ0VsZW1lbnQ8VCBleHRlbmRzIENvbXBsZXhUYWdFbGVtZW50PiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gICAgbGlzdDogQXJyYXk8VD47XHJcbiAgICBjaGlsZHJlbjogUXVlcnlMaXN0PFQ+O1xyXG4gICAgcmVjZW50Q2hhbmdlczogQXJyYXk8SUNoaWxkQ2hhbmdlPjtcclxuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETzogTmVlZCB0byBjb25zaWRlciBkeW5hbWljIGNoaWxkIGNoYW5nZVxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5saXN0ID0gdGhpcy5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGNoaWxkLmluZGV4ID0gaW5kZXgrKztcclxuICAgICAgICAgICAgY2hpbGQucHJvcGVydHkgPSB0aGlzLnByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpc3QoKSB7XHJcbiAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmxpc3Q7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxpc3RbaV0uZW5zdXJlQ2xlYW5PYmplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhbmdlc0FuZFJlc2V0KCk6IEFycmF5PElDaGlsZENoYW5nZT4ge1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlY2VudENoYW5nZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjaGFuZ2VzID0ge30sIHJlczogQXJyYXk8SUNoaWxkQ2hhbmdlPiA9ICg8YW55PmNoYW5nZXMpW3RoaXMucHJvcGVydHlOYW1lXSA9IFtdLCBjaGlsZENoYW5nZTogYW55O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGlzdCA9IHRoaXMubGlzdDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLmhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ2hhbmdlID0gY2hpbGQuZ2V0Q2hhbmdlc0FuZFJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVqLmlzTnVsbE9yVW5kZWZpbmVkKGNoaWxkQ2hhbmdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKDxJQ2hpbGRDaGFuZ2U+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogY2hpbGQuaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogY2hpbGRDaGFuZ2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZW50Q2hhbmdlcyA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,7 +1,7 @@
1
- export * from './reportviewer.module';
2
- export * from './reportdesigner.module';
3
- export * from './reportviewer.component';
4
- export * from './reportdesigner.component';
5
- export * from './reports.module';
6
- export * from './core';
1
+ export * from './reportviewer.module';
2
+ export * from './reportdesigner.module';
3
+ export * from './reportviewer.component';
4
+ export * from './reportdesigner.component';
5
+ export * from './reports.module';
6
+ export * from './core';
7
7
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXBvcnR2aWV3ZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9yZXBvcnRkZXNpZ25lci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JlcG9ydHZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JlcG9ydGRlc2lnbmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVwb3J0cy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvcmUnO1xyXG4iXX0=