phoenix-ui-components 2.10.0 → 2.11.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.
@@ -1,5 +1,5 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { CMSLoader, JiveXMLLoader, ScriptLoader } from 'phoenix-event-display';
2
+ import { CMSLoader, JiveXMLLoader } from 'phoenix-event-display';
3
3
  import JSZip from 'jszip';
4
4
  import { EventDataFormat, ImportOption, } from '../../../../services/extras/event-data-import';
5
5
  import * as i0 from "@angular/core";
@@ -86,26 +86,18 @@ export class IOOptionsDialogComponent {
86
86
  };
87
87
  this.handleFileInput(files[0], 'phnx', callback);
88
88
  }
89
- handleROOTInput(files) {
90
- ScriptLoader.loadJSRootScripts().then((JSROOT) => {
91
- const objectName = prompt('Enter object name in ROOT file');
92
- JSROOT.openFile(files[0]).then((file) => {
93
- file.readObject(objectName).then((obj) => {
94
- this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(obj, { dflt_colors: true }).toJSON(), files[0].name.split('.')[0]);
95
- });
96
- });
97
- });
89
+ async handleROOTInput(files) {
90
+ const rootObjectName = prompt('Enter object name in ROOT file');
91
+ await this.eventDisplay.loadRootGeometry(URL.createObjectURL(files[0]), rootObjectName, files[0].name.split('.')[0]);
98
92
  this.onClose();
99
93
  }
100
- handleRootJSONInput(files) {
101
- ScriptLoader.loadJSRootScripts().then((JSROOT) => {
102
- const callback = (content, name) => {
103
- this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(JSROOT.parse(content), {
104
- dflt_colors: true,
105
- }).toJSON(), name);
106
- };
107
- this.handleFileInput(files[0], 'gz', callback);
108
- });
94
+ async handleRootJSONInput(files) {
95
+ if (!this.isFileOfExtension(files[0], 'gz')) {
96
+ return;
97
+ }
98
+ const name = files[0].name.split('.')[0];
99
+ await this.eventDisplay.loadRootJSONGeometry(URL.createObjectURL(files[0]), name);
100
+ this.onClose();
109
101
  }
110
102
  handleIgEventDataInput(files) {
111
103
  const cmsLoader = new CMSLoader();
@@ -116,32 +108,29 @@ export class IOOptionsDialogComponent {
116
108
  });
117
109
  }
118
110
  handleZipEventDataInput(files) {
119
- if (this.isFileOfExtension(files[0], 'zip')) {
120
- this.handleZipInput(files[0], (allFilesWithData) => {
121
- const allEventsObject = {};
122
- // JSON event data
123
- Object.keys(allFilesWithData)
124
- .filter((fileName) => fileName.endsWith('.json'))
125
- .forEach((fileName) => {
126
- Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
127
- });
128
- // JiveXML event data
129
- const jiveloader = new JiveXMLLoader();
130
- Object.keys(allFilesWithData)
131
- .filter((fileName) => fileName.endsWith('.xml'))
132
- .forEach((fileName) => {
133
- jiveloader.process(allFilesWithData[fileName]);
134
- const eventData = jiveloader.getEventData();
135
- Object.assign(allEventsObject, { [fileName]: eventData });
136
- });
137
- this.eventDisplay.parsePhoenixEvents(allEventsObject);
138
- this.onClose();
139
- });
140
- }
141
- else {
142
- console.error('Error: Invalid file format!');
143
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
111
+ if (!this.isFileOfExtension(files[0], 'zip')) {
112
+ return;
144
113
  }
114
+ this.handleZipInput(files[0], (allFilesWithData) => {
115
+ const allEventsObject = {};
116
+ // JSON event data
117
+ Object.keys(allFilesWithData)
118
+ .filter((fileName) => fileName.endsWith('.json'))
119
+ .forEach((fileName) => {
120
+ Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
121
+ });
122
+ // JiveXML event data
123
+ const jiveloader = new JiveXMLLoader();
124
+ Object.keys(allFilesWithData)
125
+ .filter((fileName) => fileName.endsWith('.xml'))
126
+ .forEach((fileName) => {
127
+ jiveloader.process(allFilesWithData[fileName]);
128
+ const eventData = jiveloader.getEventData();
129
+ Object.assign(allEventsObject, { [fileName]: eventData });
130
+ });
131
+ this.eventDisplay.parsePhoenixEvents(allEventsObject);
132
+ this.onClose();
133
+ });
145
134
  }
146
135
  async handleZipInput(file, callback) {
147
136
  const allFilesWithData = {};
@@ -169,14 +158,15 @@ export class IOOptionsDialogComponent {
169
158
  };
170
159
  reader.readAsText(file);
171
160
  }
172
- else {
173
- console.error('Error: Invalid file format!');
174
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
175
- }
176
161
  this.onClose();
177
162
  }
178
163
  isFileOfExtension(file, extension) {
179
- return file.name.split('.').pop() === extension;
164
+ if (file.name.split('.').pop() === extension) {
165
+ return true;
166
+ }
167
+ console.error('Error: Invalid file format!');
168
+ this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
169
+ return false;
180
170
  }
181
171
  saveScene() {
182
172
  this.eventDisplay.exportPhoenixDisplay();
@@ -193,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
193
183
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }, { type: i2.MatDialogRef }]; }, propDecorators: { eventDataImportOptions: [{
194
184
  type: Input
195
185
  }] } });
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUNMLGVBQWUsRUFFZixZQUFZLEdBQ2IsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7O0FBT3ZELE1BQU0sT0FBTyx3QkFBd0I7SUFpQ25DLFlBQ1UsWUFBaUMsRUFDbEMsU0FBaUQ7UUFEaEQsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQXdDO1FBakMxRCwyQkFBc0IsR0FBNEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJakUsOEJBQXlCLEdBQUc7WUFDbEMsSUFBSSxZQUFZLENBQ2QsZUFBZSxDQUFDLElBQUksRUFDcEIsT0FBTyxFQUNQLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3hDLGtCQUFrQixDQUNuQjtZQUNELElBQUksWUFBWSxDQUNkLGVBQWUsQ0FBQyxPQUFPLEVBQ3ZCLE1BQU0sRUFDTixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN0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QUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFVLEVBQUUsU0FBaUI7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxTQUFTLENBQUM7SUFDbEQsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7O3FIQXBQVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwySENoQnJDLHM3SEFvSUE7MkZEcEhhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUI7cUlBTWpDLHNCQUFzQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ01TTG9hZGVyLCBKaXZlWE1MTG9hZGVyLCBTY3JpcHRMb2FkZXIgfSBmcm9tICdwaG9lbml4LWV2ZW50LWRpc3BsYXknO1xuaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgRXZlbnREYXRhSW1wb3J0T3B0aW9uLFxuICBJbXBvcnRPcHRpb24sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V4dHJhcy9ldmVudC1kYXRhLWltcG9ydCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pby1vcHRpb25zLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGV2ZW50RGF0YUltcG9ydE9wdGlvbnM6IEV2ZW50RGF0YUltcG9ydE9wdGlvbltdID0gW0V2ZW50RGF0YUZvcm1hdC5KU09OXTtcblxuICBldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXI6IEltcG9ydE9wdGlvbltdO1xuXG4gIHByaXZhdGUgc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cyA9IFtcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LkpTT04sXG4gICAgICAnLmpzb24nLFxuICAgICAgdGhpcy5oYW5kbGVKU09ORXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5KSVZFWE1MLFxuICAgICAgJy54bWwnLFxuICAgICAgdGhpcy5oYW5kbGVKaXZlWE1MRGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAndGV4dC94bWwnXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LlpJUCxcbiAgICAgICcuemlwJyxcbiAgICAgIHRoaXMuaGFuZGxlWmlwRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuemlwJ1xuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5JRyxcbiAgICAgICcuaWcnLFxuICAgICAgdGhpcy5oYW5kbGVJZ0V2ZW50RGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAnLmlnJ1xuICAgICksXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudD5cbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyID0gdGhpcy5zdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzLmZpbHRlcihcbiAgICAgIChldmVudERhdGFGb3JtYXQpID0+XG4gICAgICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5pbmNsdWRlcyhcbiAgICAgICAgICBldmVudERhdGFGb3JtYXQuZm9ybWF0IGFzIEV2ZW50RGF0YUZvcm1hdFxuICAgICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5mb3JFYWNoKChldmVudERhdGFJbXBvcnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChldmVudERhdGFJbXBvcnRPcHRpb24gaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgaW1wb3J0SGFuZGxlciA9IGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyID0gKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICAgICAgICAgIGltcG9ydEhhbmRsZXIoZmlsZXMpO1xuICAgICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyLnB1c2goZXZlbnREYXRhSW1wb3J0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9uc1xuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXQgIT09ICdaSVAnKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVKU09ORXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVKaXZlWE1MRGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgICBqaXZlbG9hZGVyLnByb2Nlc3MoY29udGVudCk7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuYnVpbGRFdmVudERhdGFGcm9tSlNPTihldmVudERhdGEpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICd4bWwnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVPQkpJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VPQkpHZW9tZXRyeShjb250ZW50LCBuYW1lKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnb2JqJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlU2NlbmVJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peERpc3BsYXkoY29udGVudCk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3BobngnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVHTFRGSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlR0xURkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdnbHRmJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlUGhvZW5peElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZVJPT1RJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBTY3JpcHRMb2FkZXIubG9hZEpTUm9vdFNjcmlwdHMoKS50aGVuKChKU1JPT1Q6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IHByb21wdCgnRW50ZXIgb2JqZWN0IG5hbWUgaW4gUk9PVCBmaWxlJyk7XG4gICAgICBKU1JPT1Qub3BlbkZpbGUoZmlsZXNbMF0pLnRoZW4oKGZpbGU6IGFueSkgPT4ge1xuICAgICAgICBmaWxlLnJlYWRPYmplY3Qob2JqZWN0TmFtZSkudGhlbigob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGxheS5sb2FkSlNPTkdlb21ldHJ5KFxuICAgICAgICAgICAgSlNST09ULkdFTy5idWlsZChvYmosIHsgZGZsdF9jb2xvcnM6IHRydWUgfSkudG9KU09OKCksXG4gICAgICAgICAgICBmaWxlc1swXS5uYW1lLnNwbGl0KCcuJylbMF1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBTY3JpcHRMb2FkZXIubG9hZEpTUm9vdFNjcmlwdHMoKS50aGVuKChKU1JPT1Q6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudERpc3BsYXkubG9hZEpTT05HZW9tZXRyeShcbiAgICAgICAgICBKU1JPT1QuR0VPLmJ1aWxkKEpTUk9PVC5wYXJzZShjb250ZW50KSwge1xuICAgICAgICAgICAgZGZsdF9jb2xvcnM6IHRydWUsXG4gICAgICAgICAgfSkudG9KU09OKCksXG4gICAgICAgICAgbmFtZVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnZ3onLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVJZ0V2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNtc0xvYWRlciA9IG5ldyBDTVNMb2FkZXIoKTtcbiAgICBjbXNMb2FkZXIucmVhZElnQXJjaGl2ZShmaWxlc1swXSwgKGFsbEV2ZW50czogYW55W10pID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50c0RhdGEgPSBjbXNMb2FkZXIuZ2V0QWxsRXZlbnRzRGF0YShhbGxFdmVudHMpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RXZlbnRzKGFsbEV2ZW50c0RhdGEpO1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVaaXBFdmVudERhdGFJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAodGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ3ppcCcpKSB7XG4gICAgICB0aGlzLmhhbmRsZVppcElucHV0KGZpbGVzWzBdLCAoYWxsRmlsZXNXaXRoRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxFdmVudHNPYmplY3QgPSB7fTtcblxuICAgICAgICAvLyBKU09OIGV2ZW50IGRhdGFcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsRmlsZXNXaXRoRGF0YSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBhbGxFdmVudHNPYmplY3QsXG4gICAgICAgICAgICAgIEpTT04ucGFyc2UoYWxsRmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEppdmVYTUwgZXZlbnQgZGF0YVxuICAgICAgICBjb25zdCBqaXZlbG9hZGVyID0gbmV3IEppdmVYTUxMb2FkZXIoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsRmlsZXNXaXRoRGF0YSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy54bWwnKSlcbiAgICAgICAgICAuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgICAgIGppdmVsb2FkZXIucHJvY2VzcyhhbGxGaWxlc1dpdGhEYXRhW2ZpbGVOYW1lXSk7XG4gICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhbGxFdmVudHNPYmplY3QsIHsgW2ZpbGVOYW1lXTogZXZlbnREYXRhIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhhbGxFdmVudHNPYmplY3QpO1xuXG4gICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuZ2V0SW5mb0xvZ2dlcigpLmFkZCgnSW52YWxpZCBmaWxlIGZvcm1hdCEnLCAnRXJyb3InKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVaaXBJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGNhbGxiYWNrOiAoYWxsRmlsZXNXaXRoRGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gdm9pZFxuICApIHtcbiAgICBjb25zdCBhbGxGaWxlc1dpdGhEYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgLy8gVXNpbmcgYSB0cnkgY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggYW55IGVycm9ycyBpbiBQcm9taXNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB6aXBBcmNoaXZlID0gbmV3IEpTWmlwKCk7XG4gICAgICBhd2FpdCB6aXBBcmNoaXZlLmxvYWRBc3luYyhmaWxlKTtcbiAgICAgIGNvbnN0IGFsbEZpbGVzID0gT2JqZWN0LmtleXMoemlwQXJjaGl2ZS5maWxlcyk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmdsZUZpbGUgb2YgYWxsRmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBhd2FpdCB6aXBBcmNoaXZlLmZpbGUoc2luZ2xlRmlsZSkuYXN5bmMoJ3N0cmluZycpO1xuICAgICAgICBhbGxGaWxlc1dpdGhEYXRhW3NpbmdsZUZpbGVdID0gZmlsZURhdGE7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhhbGxGaWxlc1dpdGhEYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgcmVhZGluZyB6aXAnLCBlcnJvcik7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdDb3VsZCBub3QgcmVhZCB6aXAgZmlsZScsICdFcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbGVJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZSwgZXh0ZW5zaW9uKSkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCBmaWxlLm5hbWUuc3BsaXQoJy4nKVswXSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuZ2V0SW5mb0xvZ2dlcigpLmFkZCgnSW52YWxpZCBmaWxlIGZvcm1hdCEnLCAnRXJyb3InKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZU9mRXh0ZW5zaW9uKGZpbGU6IEZpbGUsIGV4dGVuc2lvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpID09PSBleHRlbnNpb247XG4gIH1cblxuICBzYXZlU2NlbmUoKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0UGhvZW5peERpc3BsYXkoKTtcbiAgfVxuXG4gIGV4cG9ydE9CSigpIHtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5leHBvcnRUb09CSigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nXCI+XG4gIDxoMSBtYXQtZGlhbG9nLXRpdGxlPkltcG9ydCBhbmQgZXhwb3J0IG9wdGlvbnM8L2gxPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XG4gICAgPGRpdiAqbmdJZj1cImV2ZW50RGF0YUltcG9ydE9wdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgPGg1PkltcG9ydDwvaDU+XG5cbiAgICAgIDxoNiBjbGFzcz1cInRleHQtY2VudGVyXCI+RXZlbnQgZGF0YTwvaDY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBldmVudERhdGFJbXBvcnRPcHRpb24gb2YgZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2V2ZW50RGF0YUZpbGVJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJldmVudERhdGFJbXBvcnRPcHRpb24uYWNjZXB0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXZlbnREYXRhRmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2V2ZW50RGF0YS5zdmdcIiBhbHQ9XCJFdmVudCBkYXRhIGljb25cIiAvPlxuICAgICAgICAgICAgTG9hZCB7eyBldmVudERhdGFJbXBvcnRPcHRpb24uZmlsZVR5cGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICBTdXBwb3J0ZWQgZm9ybWF0czoge3sgZ2V0U3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cygpIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8aDYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkdlb21ldHJpZXM8L2g2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBjZW50ZXJlZFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNvYmpGaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLm9ialwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlT0JKSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJvYmpGaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vYmouc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAub2JqXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNnbHRmRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5nbHRmXCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVHTFRGSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJnbHRmRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZ2x0Zi5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIC5nbHRmXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNyb290RmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5yb290XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVST09USW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290RmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZmlsZS1pbXBvcnQuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAucm9vdFxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEpTT05GaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLmpzb24uZ3pcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVJvb3RKU09OSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290SlNPTkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLmpzb24uZ3pcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlN1cHBvcnRlZCBmb3JtYXRzOiBPQkosIEdMVEYsIFJPT1QsIFJPT1QgSlNPTjwvcD5cblxuICAgIDxoNT5JbXBvcnQgLyBleHBvcnQgc2NlbmU8L2g1PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBjZW50ZXJlZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGxvYWQtZXhwb3J0XCJcbiAgICAgICAgaWQ9XCJleHBvcnRTY2VuZVwiXG4gICAgICAgIChjbGljayk9XCJzYXZlU2NlbmUoKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3NhdmUuc3ZnXCIgYWx0PVwiXCIgLz4gU2F2ZSBzY2VuZVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjbG9hZFNjZW5lSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLnBobnhcIlxuICAgICAgICBuYW1lPVwiaW1hZ2VcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVBob2VuaXhJbnB1dCgkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGxvYWQtZXhwb3J0XCJcbiAgICAgICAgaWQ9XCJpbXBvcnRTY2VuZVwiXG4gICAgICAgIChjbGljayk9XCJsb2FkU2NlbmVJbnB1dC5jbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvdXBsb2FkLnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b24gZXhwb3J0LWJ1dHRvblwiXG4gICAgICAgIGlkPVwiZXhwb3J0T0JKXCJcbiAgICAgICAgKGNsaWNrKT1cImV4cG9ydE9CSigpXCJcbiAgICAgID5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb2JqLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgT0JKXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DbG9zZSgpXCIgY2RrRm9jdXNJbml0aWFsPkNsb3NlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUcxQixPQUFPLEVBQ0wsZUFBZSxFQUVmLFlBQVksR0FDYixNQUFNLCtDQUErQyxDQUFDOzs7Ozs7QUFPdkQsTUFBTSxPQUFPLHdCQUF3QjtJQWlDbkMsWUFDVSxZQUFpQyxFQUNsQyxTQUFpRDtRQURoRCxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBd0M7UUFqQzFELDJCQUFzQixHQUE0QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUlqRSw4QkFBeUIsR0FBRztZQUNsQyxJQUFJLFlBQVksQ0FDZCxlQUFlLENBQUMsSUFBSSxFQUNwQixPQUFPLEVBQ1AsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDeEMsa0JBQWtCLENBQ25CO1lBQ0QsSUFBSSxZQUFZLENBQ2QsZUFBZSxDQUFDLE9BQU8sRUFDdkIsTUFBTSxFQUNOLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3RDLFVBQVUsQ0FD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eyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENNU0xvYWRlciwgSml2ZVhNTExvYWRlciB9IGZyb20gJ3Bob2VuaXgtZXZlbnQtZGlzcGxheSc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgRXZlbnREYXRhRm9ybWF0LFxuICBFdmVudERhdGFJbXBvcnRPcHRpb24sXG4gIEltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSU9PcHRpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPSBbRXZlbnREYXRhRm9ybWF0LkpTT05dO1xuXG4gIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlcjogSW1wb3J0T3B0aW9uW107XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzID0gW1xuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuSlNPTixcbiAgICAgICcuanNvbicsXG4gICAgICB0aGlzLmhhbmRsZUpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LkpJVkVYTUwsXG4gICAgICAnLnhtbCcsXG4gICAgICB0aGlzLmhhbmRsZUppdmVYTUxEYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICd0ZXh0L3htbCdcbiAgICApLFxuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuWklQLFxuICAgICAgJy56aXAnLFxuICAgICAgdGhpcy5oYW5kbGVaaXBFdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJy56aXAnXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LklHLFxuICAgICAgJy5pZycsXG4gICAgICB0aGlzLmhhbmRsZUlnRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuaWcnXG4gICAgKSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8SU9PcHRpb25zRGlhbG9nQ29tcG9uZW50PlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXIgPSB0aGlzLnN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMuZmlsdGVyKFxuICAgICAgKGV2ZW50RGF0YUZvcm1hdCkgPT5cbiAgICAgICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zLmluY2x1ZGVzKFxuICAgICAgICAgIGV2ZW50RGF0YUZvcm1hdC5mb3JtYXQgYXMgRXZlbnREYXRhRm9ybWF0XG4gICAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zLmZvckVhY2goKGV2ZW50RGF0YUltcG9ydE9wdGlvbikgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YUltcG9ydE9wdGlvbiBpbnN0YW5jZW9mIEltcG9ydE9wdGlvbikge1xuICAgICAgICBjb25zdCBpbXBvcnRIYW5kbGVyID0gZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIgPSAoZmlsZXM6IEZpbGVMaXN0KSA9PiB7XG4gICAgICAgICAgaW1wb3J0SGFuZGxlcihmaWxlcyk7XG4gICAgICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXIucHVzaChldmVudERhdGFJbXBvcnRPcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdCBpbnN0YW5jZW9mIEltcG9ydE9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQuZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChmb3JtYXQpID0+IGZvcm1hdCAhPT0gJ1pJUCcpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUpTT05FdmVudERhdGFJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGpzb24gPSB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDogY29udGVudDtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhqc29uKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnanNvbicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZUppdmVYTUxEYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqaXZlbG9hZGVyID0gbmV3IEppdmVYTUxMb2FkZXIoKTtcbiAgICAgIGppdmVsb2FkZXIucHJvY2Vzcyhjb250ZW50KTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGppdmVsb2FkZXIuZ2V0RXZlbnREYXRhKCk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5idWlsZEV2ZW50RGF0YUZyb21KU09OKGV2ZW50RGF0YSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3htbCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZU9CSklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZU9CSkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdvYmonLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVTY2VuZUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZUdMVEZJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VHTFRGR2VvbWV0cnkoY29udGVudCwgbmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2dsdGYnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVQaG9lbml4SW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhEaXNwbGF5KGNvbnRlbnQpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdwaG54JywgY2FsbGJhY2spO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUk9PVElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IHJvb3RPYmplY3ROYW1lID0gcHJvbXB0KCdFbnRlciBvYmplY3QgbmFtZSBpbiBST09UIGZpbGUnKTtcblxuICAgIGF3YWl0IHRoaXMuZXZlbnREaXNwbGF5LmxvYWRSb290R2VvbWV0cnkoXG4gICAgICBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGVzWzBdKSxcbiAgICAgIHJvb3RPYmplY3ROYW1lLFxuICAgICAgZmlsZXNbMF0ubmFtZS5zcGxpdCgnLicpWzBdXG4gICAgKTtcblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZXNbMF0sICdneicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IGZpbGVzWzBdLm5hbWUuc3BsaXQoJy4nKVswXTtcbiAgICBhd2FpdCB0aGlzLmV2ZW50RGlzcGxheS5sb2FkUm9vdEpTT05HZW9tZXRyeShcbiAgICAgIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZXNbMF0pLFxuICAgICAgbmFtZVxuICAgICk7XG5cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUlnRXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY21zTG9hZGVyID0gbmV3IENNU0xvYWRlcigpO1xuICAgIGNtc0xvYWRlci5yZWFkSWdBcmNoaXZlKGZpbGVzWzBdLCAoYWxsRXZlbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzRGF0YSA9IGNtc0xvYWRlci5nZXRBbGxFdmVudHNEYXRhKGFsbEV2ZW50cyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzRGF0YSk7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVppcEV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICghdGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ3ppcCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVaaXBJbnB1dChmaWxlc1swXSwgKGFsbEZpbGVzV2l0aERhdGEpID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50c09iamVjdCA9IHt9O1xuXG4gICAgICAvLyBKU09OIGV2ZW50IGRhdGFcbiAgICAgIE9iamVjdC5rZXlzKGFsbEZpbGVzV2l0aERhdGEpXG4gICAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIGFsbEV2ZW50c09iamVjdCxcbiAgICAgICAgICAgIEpTT04ucGFyc2UoYWxsRmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIEppdmVYTUwgZXZlbnQgZGF0YVxuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgICBPYmplY3Qua2V5cyhhbGxGaWxlc1dpdGhEYXRhKVxuICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy54bWwnKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgaml2ZWxvYWRlci5wcm9jZXNzKGFsbEZpbGVzV2l0aERhdGFbZmlsZU5hbWVdKTtcbiAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWxsRXZlbnRzT2JqZWN0LCB7IFtmaWxlTmFtZV06IGV2ZW50RGF0YSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhhbGxFdmVudHNPYmplY3QpO1xuXG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVppcElucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgY2FsbGJhY2s6IChhbGxGaWxlc1dpdGhEYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IGFsbEZpbGVzV2l0aERhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAvLyBVc2luZyBhIHRyeSBjYXRjaCBibG9jayB0byBjYXRjaCBhbnkgZXJyb3JzIGluIFByb21pc2VzXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHppcEFyY2hpdmUgPSBuZXcgSlNaaXAoKTtcbiAgICAgIGF3YWl0IHppcEFyY2hpdmUubG9hZEFzeW5jKGZpbGUpO1xuICAgICAgY29uc3QgYWxsRmlsZXMgPSBPYmplY3Qua2V5cyh6aXBBcmNoaXZlLmZpbGVzKTtcbiAgICAgIGZvciAoY29uc3Qgc2luZ2xlRmlsZSBvZiBhbGxGaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlRGF0YSA9IGF3YWl0IHppcEFyY2hpdmUuZmlsZShzaW5nbGVGaWxlKS5hc3luYygnc3RyaW5nJyk7XG4gICAgICAgIGFsbEZpbGVzV2l0aERhdGFbc2luZ2xlRmlsZV0gPSBmaWxlRGF0YTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGFsbEZpbGVzV2l0aERhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSByZWFkaW5nIHppcCcsIGVycm9yKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmdldEluZm9Mb2dnZXIoKS5hZGQoJ0NvdWxkIG5vdCByZWFkIHppcCBmaWxlJywgJ0Vycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsZUlucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgZXh0ZW5zaW9uOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChyZXN1bHQ6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHZvaWRcbiAgKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIGlmICh0aGlzLmlzRmlsZU9mRXh0ZW5zaW9uKGZpbGUsIGV4dGVuc2lvbikpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSwgZmlsZS5uYW1lLnNwbGl0KCcuJylbMF0pO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICAgIH1cblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVPZkV4dGVuc2lvbihmaWxlOiBGaWxlLCBleHRlbnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSA9PT0gZXh0ZW5zaW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogSW52YWxpZCBmaWxlIGZvcm1hdCEnKTtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdJbnZhbGlkIGZpbGUgZm9ybWF0IScsICdFcnJvcicpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2F2ZVNjZW5lKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5LmV4cG9ydFBob2VuaXhEaXNwbGF5KCk7XG4gIH1cblxuICBleHBvcnRPQkooKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0VG9PQkooKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZ1wiPlxuICA8aDEgbWF0LWRpYWxvZy10aXRsZT5JbXBvcnQgYW5kIGV4cG9ydCBvcHRpb25zPC9oMT5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxuICAgIDxkaXYgKm5nSWY9XCJldmVudERhdGFJbXBvcnRPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxoNT5JbXBvcnQ8L2g1PlxuXG4gICAgICA8aDYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkV2ZW50IGRhdGE8L2g2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGNlbnRlcmVkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZXZlbnREYXRhSW1wb3J0T3B0aW9uIG9mIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNldmVudERhdGFGaWxlSW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9uLmFjY2VwdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyKCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV2ZW50RGF0YUZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9ldmVudERhdGEuc3ZnXCIgYWx0PVwiRXZlbnQgZGF0YSBpY29uXCIgLz5cbiAgICAgICAgICAgIExvYWQge3sgZXZlbnREYXRhSW1wb3J0T3B0aW9uLmZpbGVUeXBlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgU3VwcG9ydGVkIGZvcm1hdHM6IHt7IGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGg2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5HZW9tZXRyaWVzPC9oNj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjb2JqRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5vYmpcIlxuICAgICAgICBuYW1lPVwiaW1hZ2VcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZU9CSklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwib2JqRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb2JqLnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLm9ialxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZ2x0ZkZpbGVJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICBhY2NlcHQ9XCIuZ2x0ZlwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlR0xURklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwiZ2x0ZkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2dsdGYuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAuZ2x0ZlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEZpbGVJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICBhY2NlcHQ9XCIucm9vdFwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlUk9PVElucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwicm9vdEZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLnJvb3RcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI3Jvb3RKU09ORmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5qc29uLmd6XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVSb290SlNPTklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwicm9vdEpTT05GaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9maWxlLWltcG9ydC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIC5qc29uLmd6XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5TdXBwb3J0ZWQgZm9ybWF0czogT0JKLCBHTFRGLCBST09ULCBST09UIEpTT048L3A+XG5cbiAgICA8aDU+SW1wb3J0IC8gZXhwb3J0IHNjZW5lPC9oNT5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiZXhwb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVNjZW5lKClcIlxuICAgICAgPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9zYXZlLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2xvYWRTY2VuZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5waG54XCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVQaG9lbml4SW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiaW1wb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwibG9hZFNjZW5lSW5wdXQuY2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3VwbG9hZC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIHNjZW5lXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGV4cG9ydC1idXR0b25cIlxuICAgICAgICBpZD1cImV4cG9ydE9CSlwiXG4gICAgICAgIChjbGljayk9XCJleHBvcnRPQkooKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29iai5zdmdcIiBhbHQ9XCJcIiAvPiBTYXZlIE9CSlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNka0ZvY3VzSW5pdGlhbD5DbG9zZTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,32 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ActiveVariable } from 'phoenix-event-display';
3
+ import * as i0 from "@angular/core";
4
+ export class ErrorMessageService {
5
+ constructor() {
6
+ /** A variable that stores the latest error thrown. */
7
+ this.error = new ActiveVariable();
8
+ }
9
+ /**
10
+ * Subscribe to when an error occurs.
11
+ * @param callback A function called when an error occurs.
12
+ */
13
+ subscribeToError(callback) {
14
+ this.error.onUpdate(callback);
15
+ }
16
+ /**
17
+ * Set the current error.
18
+ * @param error The error that has occurred.
19
+ */
20
+ setError(error) {
21
+ this.error.update(error);
22
+ }
23
+ }
24
+ ErrorMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ErrorMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
25
+ ErrorMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ErrorMessageService, providedIn: 'root' });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ErrorMessageService, decorators: [{
27
+ type: Injectable,
28
+ args: [{
29
+ providedIn: 'root',
30
+ }]
31
+ }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NlcnZpY2VzL2Vycm9yLW1lc3NhZ2Utc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlFLHNEQUFzRDtRQUM5QyxVQUFLLEdBQUcsSUFBSSxjQUFjLEVBQVMsQ0FBQztLQWlCN0M7SUFmQzs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFnQztRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLEtBQVk7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7Z0hBbEJVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2ZVZhcmlhYmxlIH0gZnJvbSAncGhvZW5peC1ldmVudC1kaXNwbGF5JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVycm9yTWVzc2FnZVNlcnZpY2Uge1xuICAvKiogQSB2YXJpYWJsZSB0aGF0IHN0b3JlcyB0aGUgbGF0ZXN0IGVycm9yIHRocm93bi4gKi9cbiAgcHJpdmF0ZSBlcnJvciA9IG5ldyBBY3RpdmVWYXJpYWJsZTxFcnJvcj4oKTtcblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHdoZW4gYW4gZXJyb3Igb2NjdXJzLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuXG4gICAqL1xuICBzdWJzY3JpYmVUb0Vycm9yKGNhbGxiYWNrOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5lcnJvci5vblVwZGF0ZShjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IGVycm9yLlxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIHRoYXQgaGFzIG9jY3VycmVkLlxuICAgKi9cbiAgc2V0RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvci51cGRhdGUoZXJyb3IpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ErrorMessageService } from './error-message-service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Global handler for handling app/module wide errors.
6
+ */
7
+ export class GlobalErrorHandler {
8
+ /**
9
+ * Instantiate the global error handler.
10
+ * @param injector Injector for getting the error message service.
11
+ */
12
+ constructor(injector) {
13
+ this.injector = injector;
14
+ }
15
+ /**
16
+ * A handler for handling the global error that occurs in the app.
17
+ * @param error The error that occurred.
18
+ */
19
+ handleError(error) {
20
+ console.error('ERROR IN PHOENIX APP', '\n', error);
21
+ this.injector.get(ErrorMessageService).setError(error);
22
+ }
23
+ }
24
+ GlobalErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: GlobalErrorHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
25
+ GlobalErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: GlobalErrorHandler });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: GlobalErrorHandler, decorators: [{
27
+ type: Injectable
28
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2VydmljZXMvZ2xvYmFsLWVycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRTlEOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7O09BR0c7SUFDSCxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUUxQzs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBWTtRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDOzsrR0FkVSxrQkFBa0I7bUhBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlU2VydmljZSB9IGZyb20gJy4vZXJyb3ItbWVzc2FnZS1zZXJ2aWNlJztcblxuLyoqXG4gKiBHbG9iYWwgaGFuZGxlciBmb3IgaGFuZGxpbmcgYXBwL21vZHVsZSB3aWRlIGVycm9ycy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdsb2JhbEVycm9ySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlciB7XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG4gICAqIEBwYXJhbSBpbmplY3RvciBJbmplY3RvciBmb3IgZ2V0dGluZyB0aGUgZXJyb3IgbWVzc2FnZSBzZXJ2aWNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgLyoqXG4gICAqIEEgaGFuZGxlciBmb3IgaGFuZGxpbmcgdGhlIGdsb2JhbCBlcnJvciB0aGF0IG9jY3VycyBpbiB0aGUgYXBwLlxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuXG4gICAqL1xuICBoYW5kbGVFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFUlJPUiBJTiBQSE9FTklYIEFQUCcsICdcXG4nLCBlcnJvcik7XG4gICAgdGhpcy5pbmplY3Rvci5nZXQoRXJyb3JNZXNzYWdlU2VydmljZSkuc2V0RXJyb3IoZXJyb3IpO1xuICB9XG59XG4iXX0=