@firestitch/report 18.21.2 → 18.21.4

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.
@@ -15,8 +15,7 @@ const RETRY = 'retry';
15
15
  const DOWNLOAD = 'download';
16
16
  // Runs a report export end to end: collect every tile and value, refuse to
17
17
  // write a file that is missing any of them without saying so, build it, refuse
18
- // to save one that could not draw a component, or whose text does not fit its
19
- // boxes, without saying so, then save.
18
+ // to save one that could not draw a component without saying so, then save.
20
19
  //
21
20
  // The gates are the reason this sits between the collector and the renderers
22
21
  // rather than in either of them. A deck with five blank pages is worse than no
@@ -27,9 +26,9 @@ const DOWNLOAD = 'download';
27
26
  // this is the only place that sees it.
28
27
  //
29
28
  // Failures are decided before the build, which is the expensive part (every
30
- // chart drawn offscreen, every text block measured), so neither a Retry nor a
31
- // Cancel pays for one. Text that does not fit its box is known only after it:
32
- // the build is what measures it.
29
+ // chart drawn offscreen, every text table measured), so neither a Retry nor a
30
+ // Cancel pays for one. A component that could not be drawn is known only after
31
+ // it: the build is what draws it.
33
32
  export class ReportExportService {
34
33
  _collector = inject(ReportExportCollectorService);
35
34
  _pdfService = inject(ReportPdfService);
@@ -55,12 +54,11 @@ export class ReportExportService {
55
54
  ? this._run(report, listRows, build)
56
55
  : this._buildAndSave(collected, build)))));
57
56
  }
58
- // Builds the file, then saves it once the undrawn and overflow gates let it
59
- // through.
57
+ // Builds the file, then saves it once the undrawn gate lets it through.
60
58
  _buildAndSave(collected, build) {
61
59
  return from(build(collected))
62
60
  .pipe(switchMap((built) => this._undrawnGate(built)
63
- .pipe(switchMap(() => this._overflowGate(built)), switchMap(() => from(Promise.resolve(built.save()))))));
61
+ .pipe(switchMap(() => from(Promise.resolve(built.save()))))));
64
62
  }
65
63
  // Resolves to DOWNLOAD when the export is whole (or the user accepted an
66
64
  // incomplete one) and to RETRY when they want another attempt. Cancelling
@@ -110,35 +108,10 @@ export class ReportExportService {
110
108
  })
111
109
  .pipe(catchError(() => EMPTY));
112
110
  }
113
- // Resolves to DOWNLOAD when every text block fits its box in the built file,
114
- // or the user accepted one that does not. There is no Retry: the words are
115
- // the report's own, so a second attempt would build the same file. Each block
116
- // is named by its page and the start of its words, and the note says what
117
- // this format does with the rest. Cancelling ends the export quietly, as at
118
- // the failure gate, and the built file is dropped unsaved.
119
- _overflowGate(built) {
120
- if (!built.overflows.length) {
121
- return of(DOWNLOAD);
122
- }
123
- // A block with no words to quote (an empty table, say) is named by its
124
- // page alone, not by an empty pair of quotes.
125
- const blocks = built.overflows
126
- .map((overflow) => `<strong>${escapeHtml(overflow.page)}</strong>`
127
- + (overflow.snippet ? ` (“${escapeHtml(overflow.snippet)}”)` : ''));
128
- return this._prompt.confirm({
129
- title: 'Text does not fit',
130
- template: `Some text does not fit its box: ${blocks.join(', ')}. ${built.overflowNote}`,
131
- buttons: [
132
- { label: 'Download Anyway', value: DOWNLOAD, color: 'primary' },
133
- { label: 'Cancel', cancel: true, color: '' },
134
- ],
135
- })
136
- .pipe(catchError(() => EMPTY));
137
- }
138
111
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
139
112
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExportService });
140
113
  }
141
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExportService, decorators: [{
142
115
  type: Injectable
143
116
  }] });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUN5Qiw0QkFBNEIsRUFBRSxlQUFlLEdBQzVFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHMUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsNEVBQTRFO0FBQzVFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFFNUIsMkVBQTJFO0FBQzNFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsdUNBQXVDO0FBQ3ZDLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLGdGQUFnRjtBQUNoRix1Q0FBdUM7QUFDdkMsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlF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LENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDdkYsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDL0QsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTthQUM3QztTQUNGLENBQUM7YUFDQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQzt3R0F0SVUsbUJBQW1COzRHQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7XG4gIEJ1aWx0RXhwb3J0LCBDb2xsZWN0ZWRSZXBvcnQsIFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UsIGZhaWxlZFBhZ2VOYW1lcyxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBERl9MSVNUX1JPV1MsIFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuL3JlcG9ydC1wZGYuc2VydmljZSc7XG5pbXBvcnQgeyBQUFRYX0xJU1RfUk9XUywgUmVwb3J0UHB0eFNlcnZpY2UgfSBmcm9tICcuL3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuXG5cbi8vIFdoYXQgdGhlIHVzZXIgY2hvc2UgYXQgYW4gZXhwb3J0IGdhdGUuIFJldHJ5LCBvZmZlcmVkIG9ubHkgd2hlbiB0aGUgZXhwb3J0XG4vLyBpcyBpbmNvbXBsZXRlLCByZS1ydW5zIHRoZSB3aG9sZSBjb2xsZWN0aW9uIOKAlCB0aGUgcXVlcmllcyB0aGF0IGZhaWxlZCB3ZXJlXG4vLyBraWxsZWQgb24gYSBjbG9jaywgbm90IG9uIGFueXRoaW5nIGFib3V0IHRoZSBkYXRhLCBzbyBhIHNlY29uZCBhdHRlbXB0XG4vLyBhZ2FpbnN0IGEgd2FybWVkIGRhdGFiYXNlIGdlbnVpbmVseSBvZnRlbiBzdWNjZWVkcy4gRG93bmxvYWQga2VlcHMgZ29pbmcuXG5jb25zdCBSRVRSWSA9ICdyZXRyeSc7XG5jb25zdCBET1dOTE9BRCA9ICdkb3dubG9hZCc7XG5cbi8vIFJ1bnMgYSByZXBvcnQgZXhwb3J0IGVuZCB0byBlbmQ6IGNvbGxlY3QgZXZlcnkgdGlsZSBhbmQgdmFsdWUsIHJlZnVzZSB0b1xuLy8gd3JpdGUgYSBmaWxlIHRoYXQgaXMgbWlzc2luZyBhbnkgb2YgdGhlbSB3aXRob3V0IHNheWluZyBzbywgYnVpbGQgaXQsIHJlZnVzZVxuLy8gdG8gc2F2ZSBvbmUgdGhhdCBjb3VsZCBub3QgZHJhdyBhIGNvbXBvbmVudCwgb3Igd2hvc2UgdGV4dCBkb2VzIG5vdCBmaXQgaXRzXG4vLyBib3hlcywgd2l0aG91dCBzYXlpbmcgc28sIHRoZW4gc2F2ZS5cbi8vXG4vLyBUaGUgZ2F0ZXMgYXJlIHRoZSByZWFzb24gdGhpcyBzaXRzIGJldHdlZW4gdGhlIGNvbGxlY3RvciBhbmQgdGhlIHJlbmRlcmVyc1xuLy8gcmF0aGVyIHRoYW4gaW4gZWl0aGVyIG9mIHRoZW0uIEEgZGVjayB3aXRoIGZpdmUgYmxhbmsgcGFnZXMgaXMgd29yc2UgdGhhbiBub1xuLy8gZGVjazogaXQgbG9va3MgZmluaXNoZWQsIHNvIGl0IGdldHMgZW1haWxlZCB0byBhIGNsaWVudCwgYW5kIHRoZSBwYWdlcyB0aGF0XG4vLyBhcmUgbWlzc2luZyBhcmUgZXhhY3RseSB0aGUgb25lcyBub2JvZHkgdGhpbmtzIHRvIGNoZWNrLiBUaGUgcmVuZGVyZXJzIGNhblxuLy8gb25seSBkZXNjcmliZSBhIGhvbGUgdGhleSBhcmUgaGFuZGVkOyB0aGUgY29sbGVjdG9yIG9ubHkga25vd3Mgb25lIHRpbGUgYXQgYVxuLy8gdGltZS4gV2hldGhlciB0aGUgRklMRSBzaG91bGQgZXhpc3QgaXMgYSBkZWNpc2lvbiBhYm91dCB0aGUgd2hvbGUgcmVwb3J0LCBhbmRcbi8vIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgdGhhdCBzZWVzIGl0LlxuLy9cbi8vIEZhaWx1cmVzIGFyZSBkZWNpZGVkIGJlZm9yZSB0aGUgYnVpbGQsIHdoaWNoIGlzIHRoZSBleHBlbnNpdmUgcGFydCAoZXZlcnlcbi8vIGNoYXJ0IGRyYXduIG9mZnNjcmVlbiwgZXZlcnkgdGV4dCBibG9jayBtZWFzdXJlZCksIHNvIG5laXRoZXIgYSBSZXRyeSBub3IgYVxuLy8gQ2FuY2VsIHBheXMgZm9yIG9uZS4gVGV4dCB0aGF0IGRvZXMgbm90IGZpdCBpdHMgYm94IGlzIGtub3duIG9ubHkgYWZ0ZXIgaXQ6XG4vLyB0aGUgYnVpbGQgaXMgd2hhdCBtZWFzdXJlcyBpdC5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeHBvcnRTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9jb2xsZWN0b3IgPSBpbmplY3QoUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgX3BkZlNlcnZpY2UgPSBpbmplY3QoUmVwb3J0UGRmU2VydmljZSk7XG4gIHByaXZhdGUgX3BwdHhTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFBwdHhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcblxuICBwdWJsaWMgcGRmKHJlcG9ydDogUmVwb3J0KTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bihyZXBvcnQsIFBERl9MSVNUX1JPV1MsIChjb2xsZWN0ZWQpID0+IHRoaXMuX3BkZlNlcnZpY2UuYnVpbGQoY29sbGVjdGVkKSk7XG4gIH1cblxuICBwdWJsaWMgcG93ZXJwb2ludChyZXBvcnQ6IFJlcG9ydCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLl9ydW4ocmVwb3J0LCBQUFRYX0xJU1RfUk9XUywgKGNvbGxlY3RlZCkgPT4gdGhpcy5fcHB0eFNlcnZpY2UuYnVpbGQoY29sbGVjdGVkKSk7XG4gIH1cblxuICAvLyBSZXRyeSByZS1jb2xsZWN0cyB0aGUgV0hPTEUgcmVwb3J0LCBub3QganVzdCB0aGUgdGlsZXMgdGhhdCBmYWlsZWQuIEV2ZXJ5XG4gIC8vIG51bWJlciBpbiBvbmUgZmlsZSBoYXMgdG8gaGF2ZSBiZWVuIHRydWUgYXQgb25lIG1vbWVudDogcmVmZXRjaGluZyBmb3VyXG4gIC8vIHRpbGVzIGFuZCBrZWVwaW5nIG5pbmUgZnJvbSB0aHJlZSBtaW51dGVzIGFnbyBwcm9kdWNlcyBhIGRlY2sgd2hvc2UgcGFnZXNcbiAgLy8gZGlzYWdyZWUgd2l0aCBlYWNoIG90aGVyLCBhbmQgbm90aGluZyBvbiBpdCB3b3VsZCBzYXkgc28uXG4gIC8vXG4gIC8vIGxpc3RSb3dzIGlzIHRoZSBmb3JtYXQncyBvd24gbGlzdCBjYXAsIGNhcnJpZWQgaW50byB0aGUgcmV0cnkgc28gYSBzZWNvbmRcbiAgLy8gYXR0ZW1wdCBmZXRjaGVzIHdoYXQgdGhlIGZpcnN0IGRpZC5cbiAgcHJpdmF0ZSBfcnVuKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgYnVpbGQ6IChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCkgPT4gUHJvbWlzZTxCdWlsdEV4cG9ydD4sXG4gICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0b3IuY29sbGVjdChyZXBvcnQsIGxpc3RSb3dzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY29sbGVjdGVkKSA9PiB0aGlzLl9mYWlsdXJlR2F0ZShjb2xsZWN0ZWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGNob2ljZSkgPT4gY2hvaWNlID09PSBSRVRSWVxuICAgICAgICAgICAgICA/IHRoaXMuX3J1bihyZXBvcnQsIGxpc3RSb3dzLCBidWlsZClcbiAgICAgICAgICAgICAgOiB0aGlzLl9idWlsZEFuZFNhdmUoY29sbGVjdGVkLCBidWlsZCkpLFxuICAgICAgICAgICkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIEJ1aWxkcyB0aGUgZmlsZSwgdGhlbiBzYXZlcyBpdCBvbmNlIHRoZSB1bmRyYXduIGFuZCBvdmVyZmxvdyBnYXRlcyBsZXQgaXRcbiAgLy8gdGhyb3VnaC5cbiAgcHJpdmF0ZSBfYnVpbGRBbmRTYXZlKFxuICAgIGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LFxuICAgIGJ1aWxkOiAoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpID0+IFByb21pc2U8QnVpbHRFeHBvcnQ+LFxuICApOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gZnJvbShidWlsZChjb2xsZWN0ZWQpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoYnVpbHQpID0+IHRoaXMuX3VuZHJhd25HYXRlKGJ1aWx0KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX292ZXJmbG93R2F0ZShidWlsdCkpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZyb20oUHJvbWlzZS5yZXNvbHZlKGJ1aWx0LnNhdmUoKSkpKSxcbiAgICAgICAgICApKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlcyB0byBET1dOTE9BRCB3aGVuIHRoZSBleHBvcnQgaXMgd2hvbGUgKG9yIHRoZSB1c2VyIGFjY2VwdGVkIGFuXG4gIC8vIGluY29tcGxldGUgb25lKSBhbmQgdG8gUkVUUlkgd2hlbiB0aGV5IHdhbnQgYW5vdGhlciBhdHRlbXB0LiBDYW5jZWxsaW5nXG4gIC8vIGVuZHMgdGhlIGV4cG9ydCBxdWlldGx5OiBFTVBUWSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZywgc28gbm90aGluZ1xuICAvLyBidWlsZHMgYW5kIG5vIGVycm9yIHN1cmZhY2VzIOKAlCB0aGV5IGtub3cgd2hhdCB0aGV5IGp1c3QgZGVjbGluZWQuXG4gIHByaXZhdGUgX2ZhaWx1cmVHYXRlKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmYWlsZWQgPSBmYWlsZWRQYWdlTmFtZXMoY29sbGVjdGVkKS5tYXAoZXNjYXBlSHRtbCk7XG4gICAgaWYgKCFmYWlsZWQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoRE9XTkxPQUQpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gZmFpbGVkLmxlbmd0aCA9PT0gMVxuICAgICAgPyBgPHN0cm9uZz4ke2ZhaWxlZFswXX08L3N0cm9uZz4gY291bGQgbm90IGJlIGdlbmVyYXRlZGBcbiAgICAgIDogYCR7ZmFpbGVkLmxlbmd0aH0gcGFnZXMgY291bGQgbm90IGJlIGdlbmVyYXRlZDogPHN0cm9uZz4ke2ZhaWxlZC5qb2luKCc8L3N0cm9uZz4sIDxzdHJvbmc+Jyl9PC9zdHJvbmc+YDtcblxuICAgIHJldHVybiB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0V4cG9ydCBpcyBpbmNvbXBsZXRlJyxcbiAgICAgIHRlbXBsYXRlOiBgJHtwYWdlc30uIFRoaXMgdXN1YWxseSBtZWFucyB0aG9zZSB0aWxlcyBvciB2YWx1ZXMgdG9vayB0b28gbG9uZyB0byBsb2FkLiBgXG4gICAgICAgICsgJ1JldHJ5LCBvciBkb3dubG9hZCB0aGUgZmlsZSB3aXRoIHRob3NlIHBhZ2VzIG1hcmtlZCBhcyBtaXNzaW5nLicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdSZXRyeScsIHZhbHVlOiBSRVRSWSwgY29sb3I6ICdwcmltYXJ5JyB9LFxuICAgICAgICB7IGxhYmVsOiAnRG93bmxvYWQgQW55d2F5JywgdmFsdWU6IERPV05MT0FELCBjb2xvcjogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0NhbmNlbCcsIGNhbmNlbDogdHJ1ZSwgY29sb3I6ICcnIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSk7XG4gIH1cblxuICAvLyBSZXNvbHZlcyB0byBET1dOTE9BRCB3aGVuIHRoZSBidWlsZCBkcmV3IGV2ZXJ5IGNvbXBvbmVudCwgb3IgdGhlIHVzZXJcbiAgLy8gYWNjZXB0ZWQgYSBmaWxlIHRoYXQgbWFya3MgdGhlIG9uZXMgaXQgY291bGQgbm90IGluIHRoZWlyIHBsYWNlLiBUaGVyZSBpc1xuICAvLyBubyBSZXRyeTogYSBzZWNvbmQgYnVpbGQgZHJhd3MgdGhlIHNhbWUgZGF0YSB0aGUgc2FtZSB3YXkuIEVhY2ggY29tcG9uZW50XG4gIC8vIGlzIG5hbWVkIGJ5IGl0cyBwYWdlIGFuZCBpdHMgdGl0bGUgKGEgdGV4dCBibG9jayBieSB0aGUgc3RhcnQgb2YgaXRzXG4gIC8vIHdvcmRzKS4gQ2FuY2VsbGluZyBlbmRzIHRoZSBleHBvcnQgcXVpZXRseSwgYXMgYXQgdGhlIGZhaWx1cmUgZ2F0ZSwgYW5kXG4gIC8vIHRoZSBidWlsdCBmaWxlIGlzIGRyb3BwZWQgdW5zYXZlZC5cbiAgcHJpdmF0ZSBfdW5kcmF3bkdhdGUoYnVpbHQ6IEJ1aWx0RXhwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIWJ1aWx0LnVuZHJhd24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoRE9XTkxPQUQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBidWlsdC51bmRyYXduXG4gICAgICAubWFwKCh1bmRyYXduKSA9PiBgPHN0cm9uZz4ke2VzY2FwZUh0bWwodW5kcmF3bi5wYWdlKX08L3N0cm9uZz5gXG4gICAgICAgICsgKHVuZHJhd24ubmFtZSA/IGAgKOKAnCR7ZXNjYXBlSHRtbCh1bmRyYXduLm5hbWUpfeKAnSlgIDogJycpKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ1NvbWUgdGlsZXMgY291bGQgbm90IGJlIGRyYXduJyxcbiAgICAgIHRlbXBsYXRlOiBgU29tZSB0aWxlcyBjb3VsZCBub3QgYmUgZHJhd246ICR7Y29tcG9uZW50cy5qb2luKCcsICcpfS4gYFxuICAgICAgICArICdUaGUgZmlsZSBzYXlzIFwiQ291bGQgbm90IGJlIGRyYXduXCIgaW4gdGhlaXIgcGxhY2UuJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0Rvd25sb2FkIEFueXdheScsIHZhbHVlOiBET1dOTE9BRCwgY29sb3I6ICdwcmltYXJ5JyB9LFxuICAgICAgICB7IGxhYmVsOiAnQ2FuY2VsJywgY2FuY2VsOiB0cnVlLCBjb2xvcjogJycgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpKTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIHRvIERPV05MT0FEIHdoZW4gZXZlcnkgdGV4dCBibG9jayBmaXRzIGl0cyBib3ggaW4gdGhlIGJ1aWx0IGZpbGUsXG4gIC8vIG9yIHRoZSB1c2VyIGFjY2VwdGVkIG9uZSB0aGF0IGRvZXMgbm90LiBUaGVyZSBpcyBubyBSZXRyeTogdGhlIHdvcmRzIGFyZVxuICAvLyB0aGUgcmVwb3J0J3Mgb3duLCBzbyBhIHNlY29uZCBhdHRlbXB0IHdvdWxkIGJ1aWxkIHRoZSBzYW1lIGZpbGUuIEVhY2ggYmxvY2tcbiAgLy8gaXMgbmFtZWQgYnkgaXRzIHBhZ2UgYW5kIHRoZSBzdGFydCBvZiBpdHMgd29yZHMsIGFuZCB0aGUgbm90ZSBzYXlzIHdoYXRcbiAgLy8gdGhpcyBmb3JtYXQgZG9lcyB3aXRoIHRoZSByZXN0LiBDYW5jZWxsaW5nIGVuZHMgdGhlIGV4cG9ydCBxdWlldGx5LCBhcyBhdFxuICAvLyB0aGUgZmFpbHVyZSBnYXRlLCBhbmQgdGhlIGJ1aWx0IGZpbGUgaXMgZHJvcHBlZCB1bnNhdmVkLlxuICBwcml2YXRlIF9vdmVyZmxvd0dhdGUoYnVpbHQ6IEJ1aWx0RXhwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIWJ1aWx0Lm92ZXJmbG93cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZihET1dOTE9BRCk7XG4gICAgfVxuXG4gICAgLy8gQSBibG9jayB3aXRoIG5vIHdvcmRzIHRvIHF1b3RlIChhbiBlbXB0eSB0YWJsZSwgc2F5KSBpcyBuYW1lZCBieSBpdHNcbiAgICAvLyBwYWdlIGFsb25lLCBub3QgYnkgYW4gZW1wdHkgcGFpciBvZiBxdW90ZXMuXG4gICAgY29uc3QgYmxvY2tzID0gYnVpbHQub3ZlcmZsb3dzXG4gICAgICAubWFwKChvdmVyZmxvdykgPT4gYDxzdHJvbmc+JHtlc2NhcGVIdG1sKG92ZXJmbG93LnBhZ2UpfTwvc3Ryb25nPmBcbiAgICAgICAgKyAob3ZlcmZsb3cuc25pcHBldCA/IGAgKOKAnCR7ZXNjYXBlSHRtbChvdmVyZmxvdy5zbmlwcGV0KX3igJ0pYCA6ICcnKSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdUZXh0IGRvZXMgbm90IGZpdCcsXG4gICAgICB0ZW1wbGF0ZTogYFNvbWUgdGV4dCBkb2VzIG5vdCBmaXQgaXRzIGJveDogJHtibG9ja3Muam9pbignLCAnKX0uICR7YnVpbHQub3ZlcmZsb3dOb3RlfWAsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdEb3dubG9hZCBBbnl3YXknLCB2YWx1ZTogRE9XTkxPQUQsIGNvbG9yOiAncHJpbWFyeScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0NhbmNlbCcsIGNhbmNlbDogdHJ1ZSwgY29sb3I6ICcnIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSk7XG4gIH1cbn1cbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUN5Qiw0QkFBNEIsRUFBRSxlQUFlLEdBQzVFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHMUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsNEVBQTRFO0FBQzVFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFFNUIsMkVBQTJFO0FBQzNFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLHVDQUF1QztBQUN2QyxFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0Usa0NBQWtDO0FBRWxD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QUk7a0JBQ2pFLG9EQUFvRDtZQUN4RCxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUMvRCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2FBQzdDO1NBQ0YsQ0FBQzthQUNDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQXhHVSxtQkFBbUI7NEdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5cbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZXBvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHtcbiAgQnVpbHRFeHBvcnQsIENvbGxlY3RlZFJlcG9ydCwgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSwgZmFpbGVkUGFnZU5hbWVzLFxufSBmcm9tICcuL3JlcG9ydC1leHBvcnQtY29sbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUERGX0xJU1RfUk9XUywgUmVwb3J0UGRmU2VydmljZSB9IGZyb20gJy4vcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFBQVFhfTElTVF9ST1dTLCBSZXBvcnRQcHR4U2VydmljZSB9IGZyb20gJy4vcmVwb3J0LXBwdHguc2VydmljZSc7XG5cblxuLy8gV2hhdCB0aGUgdXNlciBjaG9zZSBhdCBhbiBleHBvcnQgZ2F0ZS4gUmV0cnksIG9mZmVyZWQgb25seSB3aGVuIHRoZSBleHBvcnRcbi8vIGlzIGluY29tcGxldGUsIHJlLXJ1bnMgdGhlIHdob2xlIGNvbGxlY3Rpb24g4oCUIHRoZSBxdWVyaWVzIHRoYXQgZmFpbGVkIHdlcmVcbi8vIGtpbGxlZCBvbiBhIGNsb2NrLCBub3Qgb24gYW55dGhpbmcgYWJvdXQgdGhlIGRhdGEsIHNvIGEgc2Vjb25kIGF0dGVtcHRcbi8vIGFnYWluc3QgYSB3YXJtZWQgZGF0YWJhc2UgZ2VudWluZWx5IG9mdGVuIHN1Y2NlZWRzLiBEb3dubG9hZCBrZWVwcyBnb2luZy5cbmNvbnN0IFJFVFJZID0gJ3JldHJ5JztcbmNvbnN0IERPV05MT0FEID0gJ2Rvd25sb2FkJztcblxuLy8gUnVucyBhIHJlcG9ydCBleHBvcnQgZW5kIHRvIGVuZDogY29sbGVjdCBldmVyeSB0aWxlIGFuZCB2YWx1ZSwgcmVmdXNlIHRvXG4vLyB3cml0ZSBhIGZpbGUgdGhhdCBpcyBtaXNzaW5nIGFueSBvZiB0aGVtIHdpdGhvdXQgc2F5aW5nIHNvLCBidWlsZCBpdCwgcmVmdXNlXG4vLyB0byBzYXZlIG9uZSB0aGF0IGNvdWxkIG5vdCBkcmF3IGEgY29tcG9uZW50IHdpdGhvdXQgc2F5aW5nIHNvLCB0aGVuIHNhdmUuXG4vL1xuLy8gVGhlIGdhdGVzIGFyZSB0aGUgcmVhc29uIHRoaXMgc2l0cyBiZXR3ZWVuIHRoZSBjb2xsZWN0b3IgYW5kIHRoZSByZW5kZXJlcnNcbi8vIHJhdGhlciB0aGFuIGluIGVpdGhlciBvZiB0aGVtLiBBIGRlY2sgd2l0aCBmaXZlIGJsYW5rIHBhZ2VzIGlzIHdvcnNlIHRoYW4gbm9cbi8vIGRlY2s6IGl0IGxvb2tzIGZpbmlzaGVkLCBzbyBpdCBnZXRzIGVtYWlsZWQgdG8gYSBjbGllbnQsIGFuZCB0aGUgcGFnZXMgdGhhdFxuLy8gYXJlIG1pc3NpbmcgYXJlIGV4YWN0bHkgdGhlIG9uZXMgbm9ib2R5IHRoaW5rcyB0byBjaGVjay4gVGhlIHJlbmRlcmVycyBjYW5cbi8vIG9ubHkgZGVzY3JpYmUgYSBob2xlIHRoZXkgYXJlIGhhbmRlZDsgdGhlIGNvbGxlY3RvciBvbmx5IGtub3dzIG9uZSB0aWxlIGF0IGFcbi8vIHRpbWUuIFdoZXRoZXIgdGhlIEZJTEUgc2hvdWxkIGV4aXN0IGlzIGEgZGVjaXNpb24gYWJvdXQgdGhlIHdob2xlIHJlcG9ydCwgYW5kXG4vLyB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgc2VlcyBpdC5cbi8vXG4vLyBGYWlsdXJlcyBhcmUgZGVjaWRlZCBiZWZvcmUgdGhlIGJ1aWxkLCB3aGljaCBpcyB0aGUgZXhwZW5zaXZlIHBhcnQgKGV2ZXJ5XG4vLyBjaGFydCBkcmF3biBvZmZzY3JlZW4sIGV2ZXJ5IHRleHQgdGFibGUgbWVhc3VyZWQpLCBzbyBuZWl0aGVyIGEgUmV0cnkgbm9yIGFcbi8vIENhbmNlbCBwYXlzIGZvciBvbmUuIEEgY29tcG9uZW50IHRoYXQgY291bGQgbm90IGJlIGRyYXduIGlzIGtub3duIG9ubHkgYWZ0ZXJcbi8vIGl0OiB0aGUgYnVpbGQgaXMgd2hhdCBkcmF3cyBpdC5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeHBvcnRTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9jb2xsZWN0b3IgPSBpbmplY3QoUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgX3BkZlNlcnZpY2UgPSBpbmplY3QoUmVwb3J0UGRmU2VydmljZSk7XG4gIHByaXZhdGUgX3BwdHhTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFBwdHhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcblxuICBwdWJsaWMgcGRmKHJlcG9ydDogUmVwb3J0KTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bihyZXBvcnQsIFBERl9MSVNUX1JPV1MsIChjb2xsZWN0ZWQpID0+IHRoaXMuX3BkZlNlcnZpY2UuYnVpbGQoY29sbGVjdGVkKSk7XG4gIH1cblxuICBwdWJsaWMgcG93ZXJwb2ludChyZXBvcnQ6IFJlcG9ydCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLl9ydW4ocmVwb3J0LCBQUFRYX0xJU1RfUk9XUywgKGNvbGxlY3RlZCkgPT4gdGhpcy5fcHB0eFNlcnZpY2UuYnVpbGQoY29sbGVjdGVkKSk7XG4gIH1cblxuICAvLyBSZXRyeSByZS1jb2xsZWN0cyB0aGUgV0hPTEUgcmVwb3J0LCBub3QganVzdCB0aGUgdGlsZXMgdGhhdCBmYWlsZWQuIEV2ZXJ5XG4gIC8vIG51bWJlciBpbiBvbmUgZmlsZSBoYXMgdG8gaGF2ZSBiZWVuIHRydWUgYXQgb25lIG1vbWVudDogcmVmZXRjaGluZyBmb3VyXG4gIC8vIHRpbGVzIGFuZCBrZWVwaW5nIG5pbmUgZnJvbSB0aHJlZSBtaW51dGVzIGFnbyBwcm9kdWNlcyBhIGRlY2sgd2hvc2UgcGFnZXNcbiAgLy8gZGlzYWdyZWUgd2l0aCBlYWNoIG90aGVyLCBhbmQgbm90aGluZyBvbiBpdCB3b3VsZCBzYXkgc28uXG4gIC8vXG4gIC8vIGxpc3RSb3dzIGlzIHRoZSBmb3JtYXQncyBvd24gbGlzdCBjYXAsIGNhcnJpZWQgaW50byB0aGUgcmV0cnkgc28gYSBzZWNvbmRcbiAgLy8gYXR0ZW1wdCBmZXRjaGVzIHdoYXQgdGhlIGZpcnN0IGRpZC5cbiAgcHJpdmF0ZSBfcnVuKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgYnVpbGQ6IChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCkgPT4gUHJvbWlzZTxCdWlsdEV4cG9ydD4sXG4gICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0b3IuY29sbGVjdChyZXBvcnQsIGxpc3RSb3dzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY29sbGVjdGVkKSA9PiB0aGlzLl9mYWlsdXJlR2F0ZShjb2xsZWN0ZWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGNob2ljZSkgPT4gY2hvaWNlID09PSBSRVRSWVxuICAgICAgICAgICAgICA/IHRoaXMuX3J1bihyZXBvcnQsIGxpc3RSb3dzLCBidWlsZClcbiAgICAgICAgICAgICAgOiB0aGlzLl9idWlsZEFuZFNhdmUoY29sbGVjdGVkLCBidWlsZCkpLFxuICAgICAgICAgICkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIEJ1aWxkcyB0aGUgZmlsZSwgdGhlbiBzYXZlcyBpdCBvbmNlIHRoZSB1bmRyYXduIGdhdGUgbGV0cyBpdCB0aHJvdWdoLlxuICBwcml2YXRlIF9idWlsZEFuZFNhdmUoXG4gICAgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsXG4gICAgYnVpbGQ6IChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCkgPT4gUHJvbWlzZTxCdWlsdEV4cG9ydD4sXG4gICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBmcm9tKGJ1aWxkKGNvbGxlY3RlZCkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChidWlsdCkgPT4gdGhpcy5fdW5kcmF3bkdhdGUoYnVpbHQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gZnJvbShQcm9taXNlLnJlc29sdmUoYnVpbHQuc2F2ZSgpKSkpLFxuICAgICAgICAgICkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIHRvIERPV05MT0FEIHdoZW4gdGhlIGV4cG9ydCBpcyB3aG9sZSAob3IgdGhlIHVzZXIgYWNjZXB0ZWQgYW5cbiAgLy8gaW5jb21wbGV0ZSBvbmUpIGFuZCB0byBSRVRSWSB3aGVuIHRoZXkgd2FudCBhbm90aGVyIGF0dGVtcHQuIENhbmNlbGxpbmdcbiAgLy8gZW5kcyB0aGUgZXhwb3J0IHF1aWV0bHk6IEVNUFRZIGNvbXBsZXRlcyB3aXRob3V0IGVtaXR0aW5nLCBzbyBub3RoaW5nXG4gIC8vIGJ1aWxkcyBhbmQgbm8gZXJyb3Igc3VyZmFjZXMg4oCUIHRoZXkga25vdyB3aGF0IHRoZXkganVzdCBkZWNsaW5lZC5cbiAgcHJpdmF0ZSBfZmFpbHVyZUdhdGUoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGZhaWxlZCA9IGZhaWxlZFBhZ2VOYW1lcyhjb2xsZWN0ZWQpLm1hcChlc2NhcGVIdG1sKTtcbiAgICBpZiAoIWZhaWxlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZihET1dOTE9BRCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZXMgPSBmYWlsZWQubGVuZ3RoID09PSAxXG4gICAgICA/IGA8c3Ryb25nPiR7ZmFpbGVkWzBdfTwvc3Ryb25nPiBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkYFxuICAgICAgOiBgJHtmYWlsZWQubGVuZ3RofSBwYWdlcyBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkOiA8c3Ryb25nPiR7ZmFpbGVkLmpvaW4oJzwvc3Ryb25nPiwgPHN0cm9uZz4nKX08L3N0cm9uZz5gO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnRXhwb3J0IGlzIGluY29tcGxldGUnLFxuICAgICAgdGVtcGxhdGU6IGAke3BhZ2VzfS4gVGhpcyB1c3VhbGx5IG1lYW5zIHRob3NlIHRpbGVzIG9yIHZhbHVlcyB0b29rIHRvbyBsb25nIHRvIGxvYWQuIGBcbiAgICAgICAgKyAnUmV0cnksIG9yIGRvd25sb2FkIHRoZSBmaWxlIHdpdGggdGhvc2UgcGFnZXMgbWFya2VkIGFzIG1pc3NpbmcuJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogJ1JldHJ5JywgdmFsdWU6IFJFVFJZLCBjb2xvcjogJ3ByaW1hcnknIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEb3dubG9hZCBBbnl3YXknLCB2YWx1ZTogRE9XTkxPQUQsIGNvbG9yOiAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnQ2FuY2VsJywgY2FuY2VsOiB0cnVlLCBjb2xvcjogJycgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpKTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIHRvIERPV05MT0FEIHdoZW4gdGhlIGJ1aWxkIGRyZXcgZXZlcnkgY29tcG9uZW50LCBvciB0aGUgdXNlclxuICAvLyBhY2NlcHRlZCBhIGZpbGUgdGhhdCBtYXJrcyB0aGUgb25lcyBpdCBjb3VsZCBub3QgaW4gdGhlaXIgcGxhY2UuIFRoZXJlIGlzXG4gIC8vIG5vIFJldHJ5OiBhIHNlY29uZCBidWlsZCBkcmF3cyB0aGUgc2FtZSBkYXRhIHRoZSBzYW1lIHdheS4gRWFjaCBjb21wb25lbnRcbiAgLy8gaXMgbmFtZWQgYnkgaXRzIHBhZ2UgYW5kIGl0cyB0aXRsZSAoYSB0ZXh0IGJsb2NrIGJ5IHRoZSBzdGFydCBvZiBpdHNcbiAgLy8gd29yZHMpLiBDYW5jZWxsaW5nIGVuZHMgdGhlIGV4cG9ydCBxdWlldGx5LCBhcyBhdCB0aGUgZmFpbHVyZSBnYXRlLCBhbmRcbiAgLy8gdGhlIGJ1aWx0IGZpbGUgaXMgZHJvcHBlZCB1bnNhdmVkLlxuICBwcml2YXRlIF91bmRyYXduR2F0ZShidWlsdDogQnVpbHRFeHBvcnQpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghYnVpbHQudW5kcmF3bi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZihET1dOTE9BRCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50cyA9IGJ1aWx0LnVuZHJhd25cbiAgICAgIC5tYXAoKHVuZHJhd24pID0+IGA8c3Ryb25nPiR7ZXNjYXBlSHRtbCh1bmRyYXduLnBhZ2UpfTwvc3Ryb25nPmBcbiAgICAgICAgKyAodW5kcmF3bi5uYW1lID8gYCAo4oCcJHtlc2NhcGVIdG1sKHVuZHJhd24ubmFtZSl94oCdKWAgOiAnJykpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnU29tZSB0aWxlcyBjb3VsZCBub3QgYmUgZHJhd24nLFxuICAgICAgdGVtcGxhdGU6IGBTb21lIHRpbGVzIGNvdWxkIG5vdCBiZSBkcmF3bjogJHtjb21wb25lbnRzLmpvaW4oJywgJyl9LiBgXG4gICAgICAgICsgJ1RoZSBmaWxlIHNheXMgXCJDb3VsZCBub3QgYmUgZHJhd25cIiBpbiB0aGVpciBwbGFjZS4nLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IGxhYmVsOiAnRG93bmxvYWQgQW55d2F5JywgdmFsdWU6IERPV05MT0FELCBjb2xvcjogJ3ByaW1hcnknIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDYW5jZWwnLCBjYW5jZWw6IHRydWUsIGNvbG9yOiAnJyB9LFxuICAgICAgXSxcbiAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBFTVBUWSkpO1xuICB9XG5cbn1cbiJdfQ==