@firestitch/report 18.13.0 → 18.15.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.
Files changed (40) hide show
  1. package/app/reports/components/component-grid/component-grid.component.d.ts +4 -0
  2. package/app/reports/components/report-component/report-component.component.d.ts +2 -0
  3. package/app/reports/data/report-grid-source.d.ts +1 -0
  4. package/app/reports/data/report.data.d.ts +3 -2
  5. package/app/reports/interfaces/{report-chat-viewer-detail.interface.d.ts → report-chat-viewer-show-rows.interface.d.ts} +1 -1
  6. package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +2 -2
  7. package/app/reports/interfaces/report-export-format.type.d.ts +1 -0
  8. package/app/reports/interfaces/report-mark-action.type.d.ts +1 -1
  9. package/app/reports/interfaces/report-temporary-state.interface.d.ts +1 -1
  10. package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -1
  11. package/app/reports/report-grid-layout.d.ts +2 -1
  12. package/app/reports/views/report/fs-ai-report.component.d.ts +2 -1
  13. package/app/reports/views/report/report.component.d.ts +2 -1
  14. package/esm2022/app/reports/components/component-grid/component-grid.component.mjs +40 -5
  15. package/esm2022/app/reports/components/report-component/report-component.component.mjs +12 -4
  16. package/esm2022/app/reports/data/report-grid-source.mjs +11 -2
  17. package/esm2022/app/reports/data/report.data.mjs +11 -7
  18. package/esm2022/app/reports/interfaces/report-chat-viewer-show-rows.interface.mjs +2 -0
  19. package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
  20. package/esm2022/app/reports/interfaces/report-export-format.type.mjs +2 -0
  21. package/esm2022/app/reports/interfaces/report-mark-action.type.mjs +1 -1
  22. package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
  23. package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +1 -1
  24. package/esm2022/app/reports/mark-click.mjs +2 -2
  25. package/esm2022/app/reports/option-builder.mjs +4 -4
  26. package/esm2022/app/reports/report-grid-layout.mjs +43 -2
  27. package/esm2022/app/reports/report-viewer-features.mjs +4 -2
  28. package/esm2022/app/reports/services/report-filter-state.service.mjs +2 -2
  29. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +6 -6
  30. package/esm2022/app/reports/views/report/report.component.mjs +6 -6
  31. package/esm2022/public_api.mjs +2 -1
  32. package/fesm2022/{firestitch-report-echarts-EecIloKo.mjs → firestitch-report-echarts-DY_CfeEH.mjs} +2 -2
  33. package/fesm2022/{firestitch-report-echarts-EecIloKo.mjs.map → firestitch-report-echarts-DY_CfeEH.mjs.map} +1 -1
  34. package/fesm2022/{firestitch-report-firestitch-report-DbdLxQSE.mjs → firestitch-report-firestitch-report-YDtFbTwA.mjs} +135 -38
  35. package/fesm2022/firestitch-report-firestitch-report-YDtFbTwA.mjs.map +1 -0
  36. package/fesm2022/firestitch-report.mjs +1 -1
  37. package/package.json +1 -1
  38. package/public_api.d.ts +1 -0
  39. package/esm2022/app/reports/interfaces/report-chat-viewer-detail.interface.mjs +0 -2
  40. package/fesm2022/firestitch-report-firestitch-report-DbdLxQSE.mjs.map +0 -1
@@ -29,6 +29,9 @@ export class ReportGridSource {
29
29
  _componentId;
30
30
  // The report line of the latest read, null until one arrives.
31
31
  report = signal(null);
32
+ // The summary of the latest read (its version and notes), null until one
33
+ // arrives.
34
+ summary = signal(null);
32
35
  _isExport;
33
36
  _locale;
34
37
  constructor(_reportData, _reportId, _componentId, options = {}) {
@@ -48,7 +51,13 @@ export class ReportGridSource {
48
51
  return EMPTY;
49
52
  }
50
53
  return this._part$(event.data);
51
- }), concatWith(defer(() => (summary ? of(summary) : throwError(() => new Error(STREAM_CUT))))), catchError((error) => throwError(() => readError(error))));
54
+ }), concatWith(defer(() => {
55
+ if (!summary) {
56
+ return throwError(() => new Error(STREAM_CUT));
57
+ }
58
+ this.summary.set(summary);
59
+ return of(summary);
60
+ })), catchError((error) => throwError(() => readError(error))));
52
61
  });
53
62
  }
54
63
  _stream$(request, params) {
@@ -102,4 +111,4 @@ function readError(error) {
102
111
  }
103
112
  return error instanceof Error ? error : new Error(READ_FAILED);
104
113
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RhdGEvcmVwb3J0LWdyaWQtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxLQUFLLEVBQWMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBS25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS25ELHNFQUFzRTtBQUN0RSxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQztBQUUxQywyRUFBMkU7QUFDM0UseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxHQUFHLDZDQUE2QyxDQUFDO0FBVWpFLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLG1DQUFtQztBQUNuQyxFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSx1RUFBdUU7QUFDdkUsMkVBQTJFO0FBQzNFLGtFQUFrRTtBQUNsRSxFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSw2QkFBNkI7QUFDN0IsTUFBTSxPQUFPLGdCQUFnQjtJQVNSO0lBQ0E7SUFDQTtJQVRuQiw4REFBOEQ7SUFDOUMsTUFBTSxHQUFHLE1BQU0sQ0FBMEIsSUFBSSxDQUFDLENBQUM7SUFFOUMsU0FBUyxDQUFVO0lBQ25CLE9BQU8sQ0FBd0I7SUFFaEQsWUFDbUIsV0FBdUIsRUFD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QUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdHJlYW1FdmVudCwgU3RyZWFtRXZlbnRUeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXBpJztcbmltcG9ydCB7IEdyaWRGaWVsZCwgR3JpZFBhcmFtcywgR3JpZFJlcXVlc3QsIEdyaWRSZXN1bHQsIEdyaWRTb3VyY2UgfSBmcm9tICdAZmlyZXN0aXRjaC9ncmlkJztcblxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGNvbmNhdFdpdGgsIGRlZmVyLCBtZXJnZU1hcCwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUkVQT1JUX0ZBTExCQUNLX0xPQ0FMRSB9IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkTGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWdyaWQtbGluZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWdyaWQtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkUmVwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZ3JpZC1yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudERhdGFTdGF0ZSwgUmVwb3J0TG9jYWxlVGFnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IG91dHB1dENvbHVtbk5vdGUgfSBmcm9tICcuLi9vdXRwdXQtbm90ZXMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi9yZXBvcnQuZGF0YSc7XG5cblxuLy8gV2hhdCBhIGZhaWxlZCByZWFkIHNheXMgd2hlbiB0aGUgc2VydmVyIGdhdmUgbm8gbWVzc2FnZSBvZiBpdHMgb3duLlxuY29uc3QgUkVBRF9GQUlMRUQgPSAnRmFpbGVkIHRvIGxvYWQgZGF0YSc7XG5cbi8vIEEgc3RyZWFtIHRoYXQgZW5kZWQgYmVmb3JlIGl0cyBzdW1tYXJ5IHdhcyBjdXQgb2ZmIG9uIHRoZSB3YXk6IHRoZSBwYXJ0c1xuLy8gaXQgYnJvdWdodCBtYXkgYmUgc2hvcnQsIHNvIHRoZSByZWFkIGNvdW50cyBhcyBmYWlsZWQuXG5jb25zdCBTVFJFQU1fQ1VUID0gJ1RoZSB0YWJsZVxcJ3MgYW5zd2VyIHdhcyBjdXQgb2ZmLiBUcnkgYWdhaW4uJztcblxuLy8gSG93IGEgZ3JpZCBzb3VyY2UgaXMgYnVpbHQ6IGBpc0V4cG9ydGAgbWFya3MgZXZlcnkgcmVhZCBhcyBwYXJ0IG9mIGEgUERGIG9yXG4vLyBQb3dlclBvaW50IHJlbmRlciwgd2hpY2ggdGhlIHNlcnZlciBnaXZlcyBpdHMgZXhwb3J0IGNlaWxpbmc7IGBsb2NhbGVgIGlzXG4vLyB0aGUgcmVwb3J0J3MsIHdoaWNoIGFuIG91dHB1dCBmaWVsZCdzIGRlc2NyaXB0aW9uIGlzIHdyaXR0ZW4gaW4uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWRTb3VyY2VPcHRpb25zIHtcbiAgaXNFeHBvcnQ/OiBib29sZWFuO1xuICBsb2NhbGU/OiAoKSA9PiBSZXBvcnRMb2NhbGVUYWc7XG59XG5cbi8vIE9uZSBncmlkIHRpbGUncyByb3dzLCByZWFkIHRocm91Z2ggdGhlIHJlcG9ydDogZnMtZ3JpZCBhc2tzLCBhbmQgZWFjaCBhc2tcbi8vIGlzIG9uZSBjb21wb25lbnRHcmlkIHJlcXVlc3QuIFRoZSBwYXJhbXMgKFJlcG9ydEdyaWRQYXJhbXMpIGFyZSBtYXBwZWQgb250b1xuLy8gdGhlIHJlcXVlc3QgYm9keSdzIG93biBuYW1lczogdGhlIHJlcG9ydCBmaWx0ZXJzIGdvIHRvIGBmaWx0ZXJzYCwgdGhlICdhbnknXG4vLyBncm91cHMgYW5kIHRoZSBncmFpbiB0byBgc3RhdGVgLlxuLy9cbi8vIFRoZSBhbnN3ZXIgc3RyZWFtcy4gSXRzIHJlcG9ydCBsaW5lIGlzIGhlbGQgaW4gYHJlcG9ydGAsIHNvIG91dHB1dCBjZWxsc1xuLy8gZm9ybWF0IGFuZCB0aGUgbm90ZSBzdHJpcCBmaWxscyBmcm9tIHRoZSBmaXJzdCBwYWludDsgZWFjaCBncmlkIGxpbmUgaXNcbi8vIHBhc3NlZCBvbiBhcyBvbmUgcGFydCwgaXRzIG91dHB1dCBmaWVsZHMgZGVzY3JpYmVkIGFzIHRvZGF5J3MgaGVhZGVyXG4vLyB0b29sdGlwIGRlc2NyaWJlcyB0aGVtIChvdXRwdXRDb2x1bW5Ob3RlKTsgdGhlIGVudmVsb3BlJ3Mgc3VtbWFyeSBpcyB0aGVcbi8vIGxhc3QgcGFydC4gQSBzdHJlYW0gdGhhdCBlbmRzIHdpdGhvdXQgaXRzIHN1bW1hcnkgaXMgYSBmYWlsdXJlLlxuLy9cbi8vIEV2ZXJ5IGZhaWx1cmUgcmVhY2hlcyB0aGUgZ3JpZCBhcyBhbiBFcnJvciBjYXJyeWluZyB0aGUgc2VydmVyJ3MgbWVzc2FnZTpcbi8vIGEgc3RyZWFtZWQgcmVxdWVzdCBzaG93cyBubyBlcnJvciBkaWFsb2cgb2YgaXRzIG93biwgc28gdGhlIGdyaWQncyBlcnJvclxuLy8gc3RhdGUgaXMgd2hlcmUgaXQgaXMgcmVhZC5cbmV4cG9ydCBjbGFzcyBSZXBvcnRHcmlkU291cmNlIGltcGxlbWVudHMgR3JpZFNvdXJjZSB7XG5cbiAgLy8gVGhlIHJlcG9ydCBsaW5lIG9mIHRoZSBsYXRlc3QgcmVhZCwgbnVsbCB1bnRpbCBvbmUgYXJyaXZlcy5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydCA9IHNpZ25hbDxSZXBvcnRHcmlkUmVwb3J0IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaXNFeHBvcnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvY2FsZTogKCkgPT4gUmVwb3J0TG9jYWxlVGFnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlcG9ydERhdGE6IFJlcG9ydERhdGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVwb3J0SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb21wb25lbnRJZDogbnVtYmVyLFxuICAgIG9wdGlvbnM6IFJlcG9ydEdyaWRTb3VyY2VPcHRpb25zID0ge30sXG4gICkge1xuICAgIHRoaXMuX2lzRXhwb3J0ID0gb3B0aW9ucy5pc0V4cG9ydCA/PyBmYWxzZTtcbiAgICB0aGlzLl9sb2NhbGUgPSBvcHRpb25zLmxvY2FsZSA/PyAoKCkgPT4gUkVQT1JUX0ZBTExCQUNLX0xPQ0FMRSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZChyZXF1ZXN0OiBHcmlkUmVxdWVzdCwgcGFyYW1zOiBHcmlkUGFyYW1zKTogT2JzZXJ2YWJsZTxHcmlkUmVzdWx0PiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIGxldCBzdW1tYXJ5OiBHcmlkUmVzdWx0IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0kKHJlcXVlc3QsIHBhcmFtcyBhcyBSZXBvcnRHcmlkUGFyYW1zKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBTdHJlYW1FdmVudFR5cGUuQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgc3VtbWFyeSA9IGVudmVsb3BlU3VtbWFyeShldmVudCkgPz8gc3VtbWFyeTtcblxuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0JChldmVudC5kYXRhKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25jYXRXaXRoKGRlZmVyKCgpID0+IChzdW1tYXJ5ID8gb2Yoc3VtbWFyeSkgOiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihTVFJFQU1fQ1VUKSkpKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHRocm93RXJyb3IoKCkgPT4gcmVhZEVycm9yKGVycm9yKSkpLFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RyZWFtJChyZXF1ZXN0OiBHcmlkUmVxdWVzdCwgcGFyYW1zOiBSZXBvcnRHcmlkUGFyYW1zKTogT2JzZXJ2YWJsZTxTdHJlYW1FdmVudD4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnREYXRhLmNvbXBvbmVudEdyaWQoXG4gICAgICB0aGlzLl9yZXBvcnRJZCxcbiAgICAgIHRoaXMuX2NvbXBvbmVudElkLFxuICAgICAgcGFyYW1zLmZpbHRlcnMgPz8gW10sXG4gICAgICByZXF1ZXN0U3RhdGUocGFyYW1zKSxcbiAgICAgIHJlcXVlc3QsXG4gICAgICB0aGlzLl9pc0V4cG9ydCxcbiAgICApO1xuICB9XG5cbiAgLy8gT25lIGRhdGEgbGluZTogdGhlIHJlcG9ydCBsaW5lIGlzIGhlbGQsIGEgZ3JpZCBsaW5lIGlzIHBhc3NlZCBvbiBhcyBhXG4gIC8vIHBhcnQsIGFuZCBldmVyeSBvdGhlciBsaW5lIGlzIHNraXBwZWQuXG4gIHByaXZhdGUgX3BhcnQkKGRhdGE6IHVua25vd24pOiBPYnNlcnZhYmxlPEdyaWRSZXN1bHQ+IHtcbiAgICBjb25zdCBsaW5lID0gZGF0YSBhcyBSZXBvcnRHcmlkTGluZSB8IG51bGw7XG5cbiAgICBpZiAobGluZT8ucmVwb3J0KSB7XG4gICAgICB0aGlzLnJlcG9ydC5zZXQobGluZS5yZXBvcnQpO1xuXG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmU/LmdyaWQgPyBvZih0aGlzLl9kZXNjcmliZWQobGluZS5ncmlkKSkgOiBFTVBUWTtcbiAgfVxuXG4gIC8vIEEgcGFydCB3aG9zZSBmaWVsZHMgc2F5IHdoYXQgZWFjaCBvdXRwdXQgaG9sZHMsIGFzIHRvZGF5J3MgaGVhZGVyXG4gIC8vIHRvb2x0aXAgc2F5cyBpdC4gQSBmaWVsZCB0aGUgcmVwb3J0IHNheXMgbm90aGluZyBvZiBrZWVwcyBpdHMgb3duLlxuICBwcml2YXRlIF9kZXNjcmliZWQocGFydDogR3JpZFJlc3VsdCk6IEdyaWRSZXN1bHQge1xuICAgIGlmICghcGFydC5maWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLl9sb2NhbGUoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJ0LFxuICAgICAgZmllbGRzOiBwYXJ0LmZpZWxkcy5tYXAoKGZpZWxkOiBHcmlkRmllbGQpID0+IHtcbiAgICAgICAgY29uc3Qgbm90ZSA9IG91dHB1dENvbHVtbk5vdGUoZmllbGQubmFtZSwgcmVwb3J0LCBsb2NhbGUpO1xuXG4gICAgICAgIHJldHVybiBub3RlID8geyAuLi5maWVsZCwgZGVzY3JpcHRpb246IG5vdGUgfSA6IGZpZWxkO1xuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG59XG5cbi8vIFRoZSB0aWxlIHN0YXRlIHRoZSBkYXRhIHJlcXVlc3QgY2FycmllcyBmb3IgYSBncmlkOiB0aGUgJ2FueScgZ3JvdXBzIGFuZFxuLy8gdGhlIGdyYWluLCBlYWNoIG9ubHkgd2hlbiBzZXQuXG5mdW5jdGlvbiByZXF1ZXN0U3RhdGUocGFyYW1zOiBSZXBvcnRHcmlkUGFyYW1zKTogQ29tcG9uZW50RGF0YVN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4ocGFyYW1zLm1hdGNoQW55R3JvdXBJZHM/Lmxlbmd0aCA/IHsgbWF0Y2hBbnlHcm91cElkczogWy4uLnBhcmFtcy5tYXRjaEFueUdyb3VwSWRzXSB9IDoge30pLFxuICAgIC4uLihwYXJhbXMuZnJlcXVlbmN5ID8geyBmcmVxdWVuY3k6IHBhcmFtcy5mcmVxdWVuY3kgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gVGhlIHJlYWQncyBzdW1tYXJ5IGZyb20gdGhlIGVudmVsb3BlIHRoYXQgY2xvc2VzIHRoZSBzdHJlYW1cbi8vICh7ZGF0YToge2RhdGE6IHtncmlkfX0sIGNvZGV9KSwgb3IgbnVsbCBmb3IgdGhlIGJhcmUgZW5kLW9mLXJlc3BvbnNlIGV2ZW50LlxuZnVuY3Rpb24gZW52ZWxvcGVTdW1tYXJ5KGV2ZW50OiBTdHJlYW1FdmVudCk6IEdyaWRSZXN1bHQgfCBudWxsIHtcbiAgcmV0dXJuIGV2ZW50LmRhdGE/LmRhdGE/LmRhdGE/LmdyaWQgPz8gbnVsbDtcbn1cblxuLy8gQW55IGZhaWx1cmUgYXMgYW4gRXJyb3I6IHRoZSBzZXJ2ZXIncyBtZXNzYWdlIHdoZW4gaXQgc2VudCBvbmUuXG5mdW5jdGlvbiByZWFkRXJyb3IoZXJyb3I6IHVua25vd24pOiBFcnJvciB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yPy5tZXNzYWdlO1xuXG4gICAgcmV0dXJuIG5ldyBFcnJvcih0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZSA/IG1lc3NhZ2UgOiBSRUFEX0ZBSUxFRCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFJFQURfRkFJTEVEKTtcbn1cbiJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RhdGEvcmVwb3J0LWdyaWQtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxLQUFLLEVBQWMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBS25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS25ELHNFQUFzRTtBQUN0RSxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQztBQUUxQywyRUFBMkU7QUFDM0UseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxHQUFHLDZDQUE2QyxDQUFDO0FBVWpFLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLG1DQUFtQztBQUNuQyxFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSx1RUFBdUU7QUFDdkUsMkVBQTJFO0FBQzNFLGtFQUFrRTtBQUNsRSxFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSw2QkFBNkI7QUFDN0IsTUFBTSxPQUFPLGdCQUFnQjtJQVlSO0lBQ0E7SUFDQTtJQVpuQiw4REFBOEQ7SUFDOUMsTUFBTSxHQUFHLE1BQU0sQ0FBMEIsSUFBSSxDQUFDLENBQUM7SUFDL0QseUVBQXlFO0lBQ3pFLFdBQVc7SUFDSyxPQUFPLEdBQUcsTUFBTSxDQUFvQixJQUFJ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UyxTQUFTLENBQUMsS0FBYztJQUMvQixJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBRXJDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdHJlYW1FdmVudCwgU3RyZWFtRXZlbnRUeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXBpJztcbmltcG9ydCB7IEdyaWRGaWVsZCwgR3JpZFBhcmFtcywgR3JpZFJlcXVlc3QsIEdyaWRSZXN1bHQsIEdyaWRTb3VyY2UgfSBmcm9tICdAZmlyZXN0aXRjaC9ncmlkJztcblxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGNvbmNhdFdpdGgsIGRlZmVyLCBtZXJnZU1hcCwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUkVQT1JUX0ZBTExCQUNLX0xPQ0FMRSB9IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkTGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWdyaWQtbGluZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWdyaWQtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkUmVwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZ3JpZC1yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudERhdGFTdGF0ZSwgUmVwb3J0TG9jYWxlVGFnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IG91dHB1dENvbHVtbk5vdGUgfSBmcm9tICcuLi9vdXRwdXQtbm90ZXMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi9yZXBvcnQuZGF0YSc7XG5cblxuLy8gV2hhdCBhIGZhaWxlZCByZWFkIHNheXMgd2hlbiB0aGUgc2VydmVyIGdhdmUgbm8gbWVzc2FnZSBvZiBpdHMgb3duLlxuY29uc3QgUkVBRF9GQUlMRUQgPSAnRmFpbGVkIHRvIGxvYWQgZGF0YSc7XG5cbi8vIEEgc3RyZWFtIHRoYXQgZW5kZWQgYmVmb3JlIGl0cyBzdW1tYXJ5IHdhcyBjdXQgb2ZmIG9uIHRoZSB3YXk6IHRoZSBwYXJ0c1xuLy8gaXQgYnJvdWdodCBtYXkgYmUgc2hvcnQsIHNvIHRoZSByZWFkIGNvdW50cyBhcyBmYWlsZWQuXG5jb25zdCBTVFJFQU1fQ1VUID0gJ1RoZSB0YWJsZVxcJ3MgYW5zd2VyIHdhcyBjdXQgb2ZmLiBUcnkgYWdhaW4uJztcblxuLy8gSG93IGEgZ3JpZCBzb3VyY2UgaXMgYnVpbHQ6IGBpc0V4cG9ydGAgbWFya3MgZXZlcnkgcmVhZCBhcyBwYXJ0IG9mIGEgUERGIG9yXG4vLyBQb3dlclBvaW50IHJlbmRlciwgd2hpY2ggdGhlIHNlcnZlciBnaXZlcyBpdHMgZXhwb3J0IGNlaWxpbmc7IGBsb2NhbGVgIGlzXG4vLyB0aGUgcmVwb3J0J3MsIHdoaWNoIGFuIG91dHB1dCBmaWVsZCdzIGRlc2NyaXB0aW9uIGlzIHdyaXR0ZW4gaW4uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWRTb3VyY2VPcHRpb25zIHtcbiAgaXNFeHBvcnQ/OiBib29sZWFuO1xuICBsb2NhbGU/OiAoKSA9PiBSZXBvcnRMb2NhbGVUYWc7XG59XG5cbi8vIE9uZSBncmlkIHRpbGUncyByb3dzLCByZWFkIHRocm91Z2ggdGhlIHJlcG9ydDogZnMtZ3JpZCBhc2tzLCBhbmQgZWFjaCBhc2tcbi8vIGlzIG9uZSBjb21wb25lbnRHcmlkIHJlcXVlc3QuIFRoZSBwYXJhbXMgKFJlcG9ydEdyaWRQYXJhbXMpIGFyZSBtYXBwZWQgb250b1xuLy8gdGhlIHJlcXVlc3QgYm9keSdzIG93biBuYW1lczogdGhlIHJlcG9ydCBmaWx0ZXJzIGdvIHRvIGBmaWx0ZXJzYCwgdGhlICdhbnknXG4vLyBncm91cHMgYW5kIHRoZSBncmFpbiB0byBgc3RhdGVgLlxuLy9cbi8vIFRoZSBhbnN3ZXIgc3RyZWFtcy4gSXRzIHJlcG9ydCBsaW5lIGlzIGhlbGQgaW4gYHJlcG9ydGAsIHNvIG91dHB1dCBjZWxsc1xuLy8gZm9ybWF0IGFuZCB0aGUgbm90ZSBzdHJpcCBmaWxscyBmcm9tIHRoZSBmaXJzdCBwYWludDsgZWFjaCBncmlkIGxpbmUgaXNcbi8vIHBhc3NlZCBvbiBhcyBvbmUgcGFydCwgaXRzIG91dHB1dCBmaWVsZHMgZGVzY3JpYmVkIGFzIHRvZGF5J3MgaGVhZGVyXG4vLyB0b29sdGlwIGRlc2NyaWJlcyB0aGVtIChvdXRwdXRDb2x1bW5Ob3RlKTsgdGhlIGVudmVsb3BlJ3Mgc3VtbWFyeSBpcyB0aGVcbi8vIGxhc3QgcGFydC4gQSBzdHJlYW0gdGhhdCBlbmRzIHdpdGhvdXQgaXRzIHN1bW1hcnkgaXMgYSBmYWlsdXJlLlxuLy9cbi8vIEV2ZXJ5IGZhaWx1cmUgcmVhY2hlcyB0aGUgZ3JpZCBhcyBhbiBFcnJvciBjYXJyeWluZyB0aGUgc2VydmVyJ3MgbWVzc2FnZTpcbi8vIGEgc3RyZWFtZWQgcmVxdWVzdCBzaG93cyBubyBlcnJvciBkaWFsb2cgb2YgaXRzIG93biwgc28gdGhlIGdyaWQncyBlcnJvclxuLy8gc3RhdGUgaXMgd2hlcmUgaXQgaXMgcmVhZC5cbmV4cG9ydCBjbGFzcyBSZXBvcnRHcmlkU291cmNlIGltcGxlbWVudHMgR3JpZFNvdXJjZSB7XG5cbiAgLy8gVGhlIHJlcG9ydCBsaW5lIG9mIHRoZSBsYXRlc3QgcmVhZCwgbnVsbCB1bnRpbCBvbmUgYXJyaXZlcy5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydCA9IHNpZ25hbDxSZXBvcnRHcmlkUmVwb3J0IHwgbnVsbD4obnVsbCk7XG4gIC8vIFRoZSBzdW1tYXJ5IG9mIHRoZSBsYXRlc3QgcmVhZCAoaXRzIHZlcnNpb24gYW5kIG5vdGVzKSwgbnVsbCB1bnRpbCBvbmVcbiAgLy8gYXJyaXZlcy5cbiAgcHVibGljIHJlYWRvbmx5IHN1bW1hcnkgPSBzaWduYWw8R3JpZFJlc3VsdCB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRXhwb3J0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhbGU6ICgpID0+IFJlcG9ydExvY2FsZVRhZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXBvcnREYXRhOiBSZXBvcnREYXRhLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlcG9ydElkOiBudW1iZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBvcHRpb25zOiBSZXBvcnRHcmlkU291cmNlT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICB0aGlzLl9pc0V4cG9ydCA9IG9wdGlvbnMuaXNFeHBvcnQgPz8gZmFsc2U7XG4gICAgdGhpcy5fbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgPz8gKCgpID0+IFJFUE9SVF9GQUxMQkFDS19MT0NBTEUpO1xuICB9XG5cbiAgcHVibGljIHJlYWQocmVxdWVzdDogR3JpZFJlcXVlc3QsIHBhcmFtczogR3JpZFBhcmFtcyk6IE9ic2VydmFibGU8R3JpZFJlc3VsdD4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBsZXQgc3VtbWFyeTogR3JpZFJlc3VsdCB8IG51bGwgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdGhpcy5fc3RyZWFtJChyZXF1ZXN0LCBwYXJhbXMgYXMgUmVwb3J0R3JpZFBhcmFtcylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gU3RyZWFtRXZlbnRUeXBlLkNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgIHN1bW1hcnkgPSBlbnZlbG9wZVN1bW1hcnkoZXZlbnQpID8/IHN1bW1hcnk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydCQoZXZlbnQuZGF0YSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uY2F0V2l0aChkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFNUUkVBTV9DVVQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5zZXQoc3VtbWFyeSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvZihzdW1tYXJ5KTtcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHRocm93RXJyb3IoKCkgPT4gcmVhZEVycm9yKGVycm9yKSkpLFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RyZWFtJChyZXF1ZXN0OiBHcmlkUmVxdWVzdCwgcGFyYW1zOiBSZXBvcnRHcmlkUGFyYW1zKTogT2JzZXJ2YWJsZTxTdHJlYW1FdmVudD4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnREYXRhLmNvbXBvbmVudEdyaWQoXG4gICAgICB0aGlzLl9yZXBvcnRJZCxcbiAgICAgIHRoaXMuX2NvbXBvbmVudElkLFxuICAgICAgcGFyYW1zLmZpbHRlcnMgPz8gW10sXG4gICAgICByZXF1ZXN0U3RhdGUocGFyYW1zKSxcbiAgICAgIHJlcXVlc3QsXG4gICAgICB0aGlzLl9pc0V4cG9ydCxcbiAgICApO1xuICB9XG5cbiAgLy8gT25lIGRhdGEgbGluZTogdGhlIHJlcG9ydCBsaW5lIGlzIGhlbGQsIGEgZ3JpZCBsaW5lIGlzIHBhc3NlZCBvbiBhcyBhXG4gIC8vIHBhcnQsIGFuZCBldmVyeSBvdGhlciBsaW5lIGlzIHNraXBwZWQuXG4gIHByaXZhdGUgX3BhcnQkKGRhdGE6IHVua25vd24pOiBPYnNlcnZhYmxlPEdyaWRSZXN1bHQ+IHtcbiAgICBjb25zdCBsaW5lID0gZGF0YSBhcyBSZXBvcnRHcmlkTGluZSB8IG51bGw7XG5cbiAgICBpZiAobGluZT8ucmVwb3J0KSB7XG4gICAgICB0aGlzLnJlcG9ydC5zZXQobGluZS5yZXBvcnQpO1xuXG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmU/LmdyaWQgPyBvZih0aGlzLl9kZXNjcmliZWQobGluZS5ncmlkKSkgOiBFTVBUWTtcbiAgfVxuXG4gIC8vIEEgcGFydCB3aG9zZSBmaWVsZHMgc2F5IHdoYXQgZWFjaCBvdXRwdXQgaG9sZHMsIGFzIHRvZGF5J3MgaGVhZGVyXG4gIC8vIHRvb2x0aXAgc2F5cyBpdC4gQSBmaWVsZCB0aGUgcmVwb3J0IHNheXMgbm90aGluZyBvZiBrZWVwcyBpdHMgb3duLlxuICBwcml2YXRlIF9kZXNjcmliZWQocGFydDogR3JpZFJlc3VsdCk6IEdyaWRSZXN1bHQge1xuICAgIGlmICghcGFydC5maWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLl9sb2NhbGUoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJ0LFxuICAgICAgZmllbGRzOiBwYXJ0LmZpZWxkcy5tYXAoKGZpZWxkOiBHcmlkRmllbGQpID0+IHtcbiAgICAgICAgY29uc3Qgbm90ZSA9IG91dHB1dENvbHVtbk5vdGUoZmllbGQubmFtZSwgcmVwb3J0LCBsb2NhbGUpO1xuXG4gICAgICAgIHJldHVybiBub3RlID8geyAuLi5maWVsZCwgZGVzY3JpcHRpb246IG5vdGUgfSA6IGZpZWxkO1xuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG59XG5cbi8vIFRoZSB0aWxlIHN0YXRlIHRoZSBkYXRhIHJlcXVlc3QgY2FycmllcyBmb3IgYSBncmlkOiB0aGUgJ2FueScgZ3JvdXBzIGFuZFxuLy8gdGhlIGdyYWluLCBlYWNoIG9ubHkgd2hlbiBzZXQuXG5mdW5jdGlvbiByZXF1ZXN0U3RhdGUocGFyYW1zOiBSZXBvcnRHcmlkUGFyYW1zKTogQ29tcG9uZW50RGF0YVN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4ocGFyYW1zLm1hdGNoQW55R3JvdXBJZHM/Lmxlbmd0aCA/IHsgbWF0Y2hBbnlHcm91cElkczogWy4uLnBhcmFtcy5tYXRjaEFueUdyb3VwSWRzXSB9IDoge30pLFxuICAgIC4uLihwYXJhbXMuZnJlcXVlbmN5ID8geyBmcmVxdWVuY3k6IHBhcmFtcy5mcmVxdWVuY3kgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gVGhlIHJlYWQncyBzdW1tYXJ5IGZyb20gdGhlIGVudmVsb3BlIHRoYXQgY2xvc2VzIHRoZSBzdHJlYW1cbi8vICh7ZGF0YToge2RhdGE6IHtncmlkfX0sIGNvZGV9KSwgb3IgbnVsbCBmb3IgdGhlIGJhcmUgZW5kLW9mLXJlc3BvbnNlIGV2ZW50LlxuZnVuY3Rpb24gZW52ZWxvcGVTdW1tYXJ5KGV2ZW50OiBTdHJlYW1FdmVudCk6IEdyaWRSZXN1bHQgfCBudWxsIHtcbiAgcmV0dXJuIGV2ZW50LmRhdGE/LmRhdGE/LmRhdGE/LmdyaWQgPz8gbnVsbDtcbn1cblxuLy8gQW55IGZhaWx1cmUgYXMgYW4gRXJyb3I6IHRoZSBzZXJ2ZXIncyBtZXNzYWdlIHdoZW4gaXQgc2VudCBvbmUuXG5mdW5jdGlvbiByZWFkRXJyb3IoZXJyb3I6IHVua25vd24pOiBFcnJvciB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yPy5tZXNzYWdlO1xuXG4gICAgcmV0dXJuIG5ldyBFcnJvcih0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZSA/IG1lc3NhZ2UgOiBSRUFEX0ZBSUxFRCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFJFQURfRkFJTEVEKTtcbn1cbiJdfQ==
@@ -243,9 +243,10 @@ export class ReportData {
243
243
  // short of the full result, and the caller has to show them before it hands
244
244
  // the url to FsProcess.download. `title` is the component's title as the
245
245
  // viewer reads it, its tokens filled ('Sign-ups — September 2026'), which
246
- // the server names the file after.
247
- exportComponent(reportId, componentId, filters = [], state = {}, title = '', config = {}) {
248
- return this._api.post(this._path(`${reportId}/components/${componentId}/export`), { filters, state, title }, {
246
+ // the server names the file after. `format` 'xlsx' asks for an Excel file
247
+ // (ReportExportFormat); an older server ignores it and sends the CSV.
248
+ exportComponent(reportId, componentId, filters = [], state = {}, title = '', config = {}, format = 'csv') {
249
+ return this._api.post(this._path(`${reportId}/components/${componentId}/export`), { filters, state, title, ...(format !== 'csv' ? { format } : {}) }, {
249
250
  key: null,
250
251
  ...config,
251
252
  });
@@ -262,9 +263,11 @@ export class ReportData {
262
263
  // state by component id (zipExportStates), so each file holds what its
263
264
  // tile shows; it is left out when no tile has any. `titles` holds each component's title as the viewer reads it, its tokens
264
265
  // filled, by component id, which the server names the component's file
265
- // after; left out when there are none. Same keep-alive contract as
266
- // exportComponent, over a longer run; consume through FsProcess.download.
267
- exportReport(reportId, filters = [], pageId = null, frequency = null, filterLines = [], states = {}, titles = {}, config = {}) {
266
+ // after; left out when there are none. `format` 'xlsx' asks for one Excel
267
+ // workbook instead of the zip: a Notes sheet, then a sheet per tile. Same
268
+ // keep-alive contract as exportComponent, over a longer run; consume
269
+ // through FsProcess.download.
270
+ exportReport(reportId, filters = [], pageId = null, frequency = null, filterLines = [], states = {}, titles = {}, config = {}, format = 'csv') {
268
271
  return this._api.post(this._path(`${reportId}/export`), {
269
272
  filters,
270
273
  ...(pageId ? { pageId } : {}),
@@ -273,6 +276,7 @@ export class ReportData {
273
276
  ...(filterLines.length ? { filterLines } : {}),
274
277
  ...(Object.keys(states).length ? { states } : {}),
275
278
  ...(Object.keys(titles).length ? { titles } : {}),
279
+ ...(format !== 'csv' ? { format } : {}),
276
280
  }, {
277
281
  key: 'url',
278
282
  ...config,
@@ -476,4 +480,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
476
480
  providedIn: 'root',
477
481
  }]
478
482
  }] });
479
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixhQUFhLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQXFCbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUc1RCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLHFGQUFxRjtBQUlyRixNQUFNLE9BQU8sVUFBVTtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUN2RSxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBRTVCLGtGQUFrRjtJQUNsRixrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDWixLQUFLLEVBQ0w7WUFDRSxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUN2RSxJQUFJLENBQUMsUUFBYSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMs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MUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsaUJBQWlCLG1CQUFtQixFQUFFLENBQUMsRUFDN0QsRUFBRSxFQUNGO1lBQ0UsR0FBRyxFQUFFLGFBQWE7WUFDbEIsR0FBRyxNQUFNO1NBQ1YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELHNFQUFzRTtJQUN0RSw2Q0FBNkM7SUFDdEMsd0JBQXdCLENBQzdCLFFBQWdCLEVBQ2hCLG9CQUE4QixFQUM5QixTQUF3QixFQUFFO1FBRTFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLHlCQUF5QixDQUFDLEVBQ2hELEVBQUUsb0JBQW9CLEVBQUUsRUFDeEI7WUFDRSxHQUFHLEVBQUUsY0FBYztZQUNuQixHQUFHLE1BQU07U0FDVixDQUNGLENBQUM7SUFDSixDQUFDO3dHQXZ6QlUsVUFBVTs0R0FBVixVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNBcGksIFJlcXVlc3RDb25maWcsIFJlcXVlc3RNZXRob2QsIFN0cmVhbUV2ZW50IH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXBpJztcbmltcG9ydCB7IEdyaWRSZXF1ZXN0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvZ3JpZCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJHcm91cENoYW5nZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1maWx0ZXItZ3JvdXAtY2hhbmdlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyT3B0aW9uc1JlcXVlc3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1maWx0ZXItb3B0aW9ucy1yZXF1ZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRmlsdGVyQ2hhbmdlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LXNhdmVkLWZpbHRlci1jaGFuZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRTYXZlZEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LXNhdmVkLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ2hhcnRHcmFudWxhcml0eSxcbiAgQ29tcG9uZW50RGF0YVN0YXRlLFxuICBDb21wb25lbnRFeHBvcnRSZXNwb25zZSxcbiAgUmVwb3J0Q29tcG9uZW50U3FsLFxuICBSZXBvcnRMb2NhbGVzLFxuICBSZXBvcnRQYWdlVmFsdWUsXG4gIFJlcG9ydFRyZWUsXG4gIFJlc29sdmVkRmlsdGVyVmFsdWUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBWSUVXRVJfRkVBVFVSRVMgfSBmcm9tICcuLi9yZXBvcnQtdmlld2VyLWZlYXR1cmVzJztcblxuXG4vLyBBUEkgZ2F0ZXdheSBmb3IgdGhlIFJlcG9ydHMgbW9kdWxlLiBFdmVyeSBlbmRwb2ludCBoYW5ncyBvZmYgW2Jhc2VQYXRoXSxcbi8vIHdoaWNoIGRlZmF1bHRzIHRvIFwicmVwb3J0c1wiICh0aGUgZnJhbWV3b3JrIHJlcG9ydHMgYmFja2VuZCBhdCAvYXBpL3JlcG9ydHMpXG4vLyBhbmQgY2FuIGJlIHJlcG9pbnRlZCBieSB0aGUgaG9zdCBzbyB0aGUgcGFja2FnZSBzdGF5cyBzZWxmLWNvbnRhaW5lZCBhbmQgcG9ydGFibGUuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0RGF0YTxUID0gYW55PiB7XG4gIHByaXZhdGUgX2FwaSA9IGluamVjdChGc0FwaSk7XG5cbiAgLy8gVGhlIEFQSSByb290IGZvciBldmVyeSByZXBvcnRzIGVuZHBvaW50LiBEZWZhdWx0cyB0byB0aGUgZnJhbWV3b3JrIHJlcG9ydHNcbiAgLy8gY29udGV4dDsgc2V0IGl0IG9uY2UgKGUuZy4gZnJvbSB0aGUgaG9zdCdzIHJlcG9ydCBwYWdlKSB0byBtb3VudCBlbHNld2hlcmUuXG4gIHB1YmxpYyBiYXNlUGF0aCA9ICdyZXBvcnRzJztcblxuICAvLyBCdWlsZCBhbiBlbmRwb2ludCBwYXRoIHVuZGVyIHRoZSBjb25maWd1cmVkIGJhc2UsIGUuZy4gX3BhdGgoKSA9PiBcImFpL3JlcG9ydHNcIixcbiAgLy8gX3BhdGgoYCR7aWR9L3BhZ2VzYCkgPT4gXCJhaS9yZXBvcnRzLzEyMy9wYWdlc1wiLlxuICBwcml2YXRlIF9wYXRoKHN1ZmZpeCA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VmZml4ID8gYCR7dGhpcy5iYXNlUGF0aH0vJHtzdWZmaXh9YCA6IHRoaXMuYmFzZVBhdGg7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0cyhxdWVyeTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCksXG4gICAgICBxdWVyeSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0cycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEJvdGggaGFsdmVzIG9mIHRoZSBsaXN0aW5nIOKAlCByZXBvcnRzIEFORCB0aGUgZm9sZGVycyB0aGV5IGFyZSBmaWxlZCBpbnRvIOKAlFxuICAvLyBmcm9tIHRoZSBvbmUgR0VULiBObyBga2V5YCwgYmVjYXVzZSB0aGUgd2hvbGUgcGF5bG9hZCBpcyB0aGUgYW5zd2VyIGhlcmU7XG4gIC8vIHJlcG9ydHMoKSBrZWVwcyBpdHMgJ3JlcG9ydHMnIGtleSBmb3IgY2FsbGVycyB0aGF0IG9ubHkgd2FudCB0aGUgZmxhdCBsaXN0LlxuICBwdWJsaWMgdHJlZShxdWVyeTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxSZXBvcnRUcmVlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCksXG4gICAgICBxdWVyeSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShuYW1lOiBzdHJpbmcsIHJlcG9ydEZvbGRlcklkOiBudW1iZXIgPSBudWxsLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoKSxcbiAgICAgIHsgbmFtZSwgcmVwb3J0Rm9sZGVySWQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRmlsZSBhIHJlcG9ydCB1bmRlciBhIGZvbGRlciwgb3IgcGFzcyBudWxsIHRvIG1vdmUgaXQgdG8gdGhlIHJvb3QuIFNlbnRcbiAgLy8gZXhwbGljaXRseSAobmV2ZXIgb21pdHRlZCkgc28gdGhlIGJhY2tlbmQgY2FuIHRlbGwgXCJtb3ZlIHRvIHJvb3RcIiBmcm9tXG4gIC8vIFwibGVhdmUgdGhlIGZvbGRlciBhbG9uZVwiLlxuICBwdWJsaWMgbW92ZVJlcG9ydChyZXBvcnRJZDogbnVtYmVyLCByZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbCwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7IHJlcG9ydEZvbGRlcklkIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVGb2xkZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmVudFJlcG9ydEZvbGRlcklkOiBudW1iZXIgPSBudWxsLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKCdmb2xkZXJzJyksXG4gICAgICB7IG5hbWUsIHBhcmVudFJlcG9ydEZvbGRlcklkIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZvbGRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbmFtZSBhbmQvb3IgbW92ZSBhIGZvbGRlci4gT25seSB0aGUga2V5cyBwYXNzZWQgYXJlIGFjdGVkIG9uIHNlcnZlci1zaWRlLFxuICAvLyBzbyBhIHJlbmFtZSBuZXZlciBkaXN0dXJicyB0aGUgcGFyZW50IGFuZCBhIGRyYWcgbmV2ZXIgZGlzdHVyYnMgdGhlIG5hbWUuXG4gIHB1YmxpYyB1cGRhdGVGb2xkZXIoXG4gICAgcmVwb3J0Rm9sZGVySWQ6IG51bWJlcixcbiAgICBmb2xkZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYGZvbGRlcnMvJHtyZXBvcnRGb2xkZXJJZH1gKSxcbiAgICAgIGZvbGRlcixcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZm9sZGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU29mdC1kZWxldGUsIHdoYXRldmVyIHRoZSBmb2xkZXIgaG9sZHM6IGl0cyBjb250ZW50cyBsZWF2ZSB0aGUgbGlzdGluZyB3aXRoXG4gIC8vIGl0LCBhbmQgdW5kZWxldGVGb2xkZXIoKSBicmluZ3MgdGhlIGxvdCBiYWNrLlxuICBwdWJsaWMgZGVsZXRlRm9sZGVyKHJlcG9ydEZvbGRlcklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGBmb2xkZXJzLyR7cmVwb3J0Rm9sZGVySWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZm9sZGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVzdG9yZSBhIHNvZnQtZGVsZXRlZCBmb2xkZXIgdGhyb3VnaCBpdHMgb3duIGFjdGlvbiBlbmRwb2ludCDigJQgdGhlIGZvbGRlclxuICAvLyBQVVQgZG9lcyBub3QgYWNjZXB0IGBzdGF0ZWAuIEFueSBkZWxldGVkIGZvbGRlciBhYm92ZSBpdCBpcyByZXN0b3JlZCB0b28sIHNvXG4gIC8vIGl0IGxhbmRzIGJhY2sgd2hlcmUgaXQgd2FzLlxuICBwdWJsaWMgdW5kZWxldGVGb2xkZXIocmVwb3J0Rm9sZGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGBmb2xkZXJzLyR7cmVwb3J0Rm9sZGVySWR9L3VuZGVsZXRlYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZm9sZGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlbmFtZShyZXBvcnRJZDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAgeyBuYW1lIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlcG9ydCBzZXR0aW5nczogYW55IHN1YnNldCBvZiB7IG5hbWUsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCwgdGltZXpvbmUsXG4gIC8vIGxvY2FsZSwgY3VycmVuY3ksIHN0eWxlcywgaGVhZGVyRm9vdGVyIH0g4oCUIHN0eWxlcyBjYXJyeSB0aGVcbiAgLy8gcmVwb3J0J3MgdHlwb2dyYXBoaWMgY29uZmlnIChlLmcuIGhlYWRpbmcgc2l6ZSksIGhlYWRlckZvb3RlciB0aGVcbiAgLy8gaGVhZGVyL2Zvb3RlciBiYW5kIGRlcHRocyBpbiBpbmNoZXMuIFRoZSBwYWdlIHNpemUgaXMgaW4gaW5jaGVzIGFuZFxuICAvLyB3aWR0aC9oZWlnaHQgZ28gdG9nZXRoZXIuIGxvY2FsZSAoYSBCQ1AgNDcgdGFnKSBhbmQgY3VycmVuY3kgKGFuIElTTyA0MjE3XG4gIC8vIGNvZGUpIGFyZSBlYWNoIHNlbnQgb25seSB0byBjaGFuZ2UgdGhlbTsgJycgcmV0dXJucyB0aGUgcmVwb3J0IHRvIHRoZVxuICAvLyBkZWZhdWx0LCBhbmQgdGhlIGN1cnJlbmN5IG9ubHkgbmFtZXMgd2hhdCB0aGUgYW1vdW50cyBhcmUgaW4uXG4gIHB1YmxpYyB1cGRhdGUocmVwb3J0SWQ6IG51bWJlciwgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBcHBlbmQgYSBibGFuayBwYWdlIHRvIHRoZSByZXBvcnQ7IHJlc29sdmVzIHRvIHRoZSBuZXcgcGFnZS5cbiAgcHVibGljIGFkZFBhZ2UocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBbnkgc3Vic2V0IG9mIHsgbmFtZSwgbWFzdGVySGlkZGVuIH0uIEFuIGVtcHR5IG5hbWUgaXMgc3RvcmVkIGFzIG51bGxcbiAgLy8gc2VydmVyLXNpZGUsIHdoaWNoIHB1dHMgdGhlIHRhYiBiYWNrIG9uIGl0cyBwb3NpdGlvbmFsIFwiUGFnZSBOXCIgbGFiZWw7XG4gIC8vIG1hc3RlckhpZGRlbiBoaWRlcyB0aGUgcmVwb3J0J3MgaGVhZGVyIGFuZCBmb290ZXIgb24gdGhpcyBwYWdlLlxuICBwdWJsaWMgdXBkYXRlUGFnZShcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBhZ2VJZDogbnVtYmVyLFxuICAgIHBhZ2U6IHsgbmFtZT86IHN0cmluZzsgbWFzdGVySGlkZGVuPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3BhZ2VzLyR7cGFnZUlkfWApLFxuICAgICAgcGFnZSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncGFnZScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIERlbGV0ZSBhIHBhZ2UgYW5kIGV2ZXJ5dGhpbmcgb24gaXQuIFJlZnVzZWQgc2VydmVyLXNpZGUgZm9yIHRoZSBsYXN0XG4gIC8vIHJlbWFpbmluZyBwYWdlIOKAlCBhIHJlcG9ydCB3aXRoIG5vIGNhbnZhcyBpcyBhIGRlbGV0ZWQgcmVwb3J0LCBub3QgYSBwYWdlXG4gIC8vIG9wZXJhdGlvbi5cbiAgcHVibGljIGRlbGV0ZVBhZ2UocmVwb3J0SWQ6IG51bWJlciwgcGFnZUlkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlcy8ke3BhZ2VJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGVyc2lzdCB0aGUgdGFiIG9yZGVyIGFmdGVyIGEgZHJhZyDigJQgdGhlIHdob2xlIGxpc3QsIGluIGl0cyBuZXcgb3JkZXIsIHNvXG4gIC8vIHRoZSBzZXF1ZW5jZSBzdGF5cyBnYXBsZXNzIHdpdGhvdXQgdGhlIHNlcnZlciBpbmZlcnJpbmcgdGhlIG1vdmUuXG4gIHB1YmxpYyBzYXZlUGFnZVBvc2l0aW9ucyhcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBvc2l0aW9uczogeyBwYWdlSWQ6IG51bWJlcjsgb3JkZXI6IG51bWJlciB9W10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vcGFnZXMvcG9zaXRpb25zYCksXG4gICAgICB7IHBvc2l0aW9ucyB9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBzZXR0aW5nczogYW55IHN1YnNldCBvZiB7IHRpdGxlLCBwYWRkaW5nIH0g4oCUIHRoZSBodW1hbi1mYWNpbmdcbiAgLy8gZGlhbG9nIGVkaXRzIOKAlCBvciBhIHRleHQgYmxvY2sncyB7IGh0bWwgfSBmcm9tIGl0cyBpbmxpbmUgZWRpdG9yOyBnZW9tZXRyeVxuICAvLyAoeC95L3cvaCkgaXMgcGVyc2lzdGVkIHZpYSBzYXZlUG9zaXRpb25zIGZyb20gdGhlIGNhbnZhcyBpbnN0ZWFkLlxuICBwdWJsaWMgdXBkYXRlQ29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9zZXR0aW5nc2ApLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBsYWNlIGEgdGV4dCBibG9jayDigJQgb24gYSBwYWdlLCBvciBpbiB0aGUgaGVhZGVyL2Zvb3RlciB3aGVuIHBhZ2VJZCBpc1xuICAvLyBvbWl0dGVkLiBUaGUgb25seSBjb21wb25lbnQgdGhlIFVJIGNyZWF0ZXMgaXRzZWxmOiBjaGFydHMsIGxpc3RzIGFuZCBLUElzXG4gIC8vIG5lZWQgYSBxdWVyeSBhbmQgY29tZSBmcm9tIHRoZSBjaGF0LiBSZXNvbHZlcyB0byB7IGlkIH0uXG4gIHB1YmxpYyBhZGRUZXh0KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgdGV4dDogeyBwYWdlSWQ/OiBudW1iZXI7IGh0bWw/OiBzdHJpbmc7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3OiBudW1iZXI7IGg6IG51bWJlciB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzYCksXG4gICAgICB0ZXh0LFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb21wb25lbnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBEZWxldGUgb25lIGNvbXBvbmVudCBmcm9tIHRoZSBjYW52YXMsIHRvZ2V0aGVyIHdpdGggaXRzIGZpbHRlcnMgYW5kIGFueVxuICAvLyBmaWx0ZXIgZ3JvdXAgdGhleSBsZWF2ZSBlbXB0eS4gU29mdCBzZXJ2ZXItc2lkZSwgYnV0IHRoZXJlIGlzIG5vIHJlc3RvcmVcbiAgLy8gYW55d2hlcmUgaW4gdGhlIFVJLCBzbyB0aGUgZGlhbG9nJ3MgY29uZmlybSBwcmVzZW50cyBpdCBhcyBwZXJtYW5lbnQuXG4gIHB1YmxpYyBkZWxldGVDb21wb25lbnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb21wb25lbnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTb2Z0LWRlbGV0ZTogdGhlIHJlcG9ydCBsZWF2ZXMgdGhlIGxpc3RpbmcgYnV0IGtlZXBzIGl0cyBwYWdlcyBhbmRcbiAgLy8gY29tcG9uZW50cywgc28gdW5kZWxldGUoKSBicmluZ3MgYmFjayB0aGUgc2FtZSBkb2N1bWVudC5cbiAgcHVibGljIGRlbGV0ZShyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZGVsZXRlKFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBSZXN0b3JlIGEgc29mdC1kZWxldGVkIHJlcG9ydCB0aHJvdWdoIGl0cyBvd24gYWN0aW9uIGVuZHBvaW50IOKAlCB0aGUgcmVwb3J0XG4gIC8vIFBVVCBkb2VzIG5vdCBhY2NlcHQgYHN0YXRlYC4gSXRzIGZvbGRlciBpcyByZXN0b3JlZCB0b28gd2hlbiBpdCBpcyBkZWxldGVkLFxuICAvLyBvciBpbnNpZGUgb25lIHRoYXQgaXMsIHNvIHRoZSByZXBvcnQgbGFuZHMgYmFjayB3aGVyZSBpdCB3YXMuXG4gIHB1YmxpYyB1bmRlbGV0ZShyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3VuZGVsZXRlYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGFzc2VtYmxlZCBzdHJ1Y3R1cmU6IHBhZ2VzIOKGkiBjb21wb25lbnRzICgrIHRoZWlyIGZpbHRlcnMpIGFuZCB0aGVcbiAgLy8gcmVwb3J0J3MgZmlsdGVyIGdyb3Vwcy4gYGZlYXR1cmVzYCBuYW1lcyB3aGF0IHRoaXMgdmlld2VyIGltcGxlbWVudHNcbiAgLy8gKFZJRVdFUl9GRUFUVVJFUyksIHNvIHRoZSBzZXJ2ZXIgc2VuZHMgZXZlcnkgZ3JvdXAgaW4gYSBzaGFwZSB0aGUgdmlld2VyXG4gIC8vIGNhbiBzaG93IGFuZCBjbGVhci5cbiAgcHVibGljIGdldChyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHsgZmVhdHVyZXM6IFZJRVdFUl9GRUFUVVJFUy5qb2luKCcsJykgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGVyc2lzdCBnZW9tZXRyeSBmb3IgdGhlIG1vdmVkIGNvbXBvbmVudHMgb25seSDigJQgYW55IHN1YnNldCBvZlxuICAvLyB7IHgsIHksIHcsIGggfSAoaW5jaGVzKS5cbiAgcHVibGljIHNhdmVQb3NpdGlvbnMoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBwb3NpdGlvbnM6ICh7IGNvbXBvbmVudElkOiBudW1iZXIgfSAmIFBhcnRpYWw8eyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfT4pW10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy9wb3NpdGlvbnNgKSxcbiAgICAgIHsgcG9zaXRpb25zIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gT25lIGNvbXBvbmVudCdzIGRhdGEuIFRoZSBib2R5IGNhcnJpZXMgZXZlcnl0aGluZyBzZXNzaW9uLXNjb3BlZDogdGhlXG4gIC8vIHJlc29sdmVkIGZpbHRlciB2YWx1ZXMgYW5kIHRoZSBjb21wb25lbnQncyBvd24gaW50ZXJhY3Rpb24gc3RhdGUuXG4gIC8vXG4gIC8vIGBpc0V4cG9ydGAgbWFya3MgdGhlIHJlYWQgYXMgcGFydCBvZiBhIFBERi9Qb3dlclBvaW50IHJlbmRlci4gVGhlIHNlcnZlclxuICAvLyBnaXZlcyB0aG9zZSBhIGxvbmdlciBwZXItc3RhdGVtZW50IGNlaWxpbmcgdGhhbiBhbiBvbi1zY3JlZW4gdGlsZSwgYmVjYXVzZVxuICAvLyBhIHJlYWRlciB3YXRjaGluZyBhbiBleHBvcnQgcHJvZ3Jlc3MgYmFyIGNhbiB3YWl0IGZvciBhIHF1ZXJ5IG5vYm9keSB3b3VsZFxuICAvLyB0b2xlcmF0ZSB3YWl0aW5nIGZvciBvbiBhIGRhc2hib2FyZC5cbiAgcHVibGljIGNvbXBvbmVudERhdGEoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSB7fSxcbiAgICBpc0V4cG9ydCA9IGZhbHNlLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2RhdGFgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUsIGV4cG9ydDogaXNFeHBvcnQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZGF0YScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIE9uZSBncmlkIHRpbGUncyByZWFkIChSZXBvcnRHcmlkU291cmNlKTogdGhlIHNhbWUgcm91dGUgYXMgY29tcG9uZW50RGF0YSxcbiAgLy8gaXRzIGJvZHkncyBgZ3JpZGAgdGhlIGdyaWQncyByZXF1ZXN0LiBUaGUgYW5zd2VyIHN0cmVhbXMgYXNcbiAgLy8gbmV3bGluZS1kZWxpbWl0ZWQgSlNPTiwgb25lIGV2ZW50IHBlciBsaW5lOiB7cmVwb3J0fSBmaXJzdCwgdGhlblxuICAvLyB7Z3JpZDogcGFydH0gZm9yIGVhY2ggcGFydCBvZiB0aGUgcmVhZCwgYSBoZWFydGJlYXQge2F0fSBiZXR3ZWVuXG4gIC8vIHN0YXRlbWVudHMsIGFuZCB0aGUgZW52ZWxvcGUgd2l0aCB0aGUgcmVhZCdzIHN1bW1hcnkgbGFzdC4gVGhlIGJvZHknc1xuICAvLyBmaWx0ZXJzIGFuZCBzdGF0ZSBuYXJyb3cgdGhlIHJvd3MgYXMgdGhleSBuYXJyb3cgYW55IHRpbGUnczsgdGhlIGdyaWQnc1xuICAvLyBvd24gY29sdW1uIGZpbHRlcnMgdHJhdmVsIGluc2lkZSBncmlkLmxheW91dC4gYGlzRXhwb3J0YCBpc1xuICAvLyBjb21wb25lbnREYXRhJ3MuXG4gIHB1YmxpYyBjb21wb25lbnRHcmlkKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10sXG4gICAgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSxcbiAgICBncmlkOiBHcmlkUmVxdWVzdCxcbiAgICBpc0V4cG9ydCA9IGZhbHNlLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFN0cmVhbUV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5zdHJlYW0oXG4gICAgICBSZXF1ZXN0TWV0aG9kLlBvc3QsXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2RhdGFgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUsIGV4cG9ydDogaXNFeHBvcnQsIGdyaWQgfSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIG51bWJlcnMgb2YgYSBwYWdlJ3MgdmFsdWVzIOKAlCBvciB0aGUgbWFzdGVyJ3MsIGZvciB0aGUgaGVhZGVyIGFuZFxuICAvLyBmb290ZXIg4oCUIGluIG9uZSByZXF1ZXN0OiBhIHJvdyBwZXIgdmFsdWUgdGhhdCBwYWdlIHJlYWRzLCBzaG93biBieSBzb21lXG4gIC8vIHRleHQgb3IgcmVhZCBieSBhIGZvcm11bGEgaXQgc2hvd3MgKFJlcG9ydFBhZ2VWYWx1ZSkuIGBmaWx0ZXJzYCBjYXJyaWVzXG4gIC8vIHRoZSByZXNvbHZlZCB2YWx1ZXMgZm9yIGV2ZXJ5IHZhbHVlIG9mIHRoZSBsYXllciB0b2dldGhlcjsgZWFjaCB2YWx1ZSB0aGVcbiAgLy8gc2VydmVyIHJlYWRzIHBpY2tzIG91dCBpdHMgb3duLiBgaXNFeHBvcnRgIGlzIGNvbXBvbmVudERhdGEncy5cbiAgLy9cbiAgLy8gVGhlIHNlcnZlciByZWFkcyBvbmUgc3RhdGVtZW50IHBlciBkaXN0aW5jdCBxdWVyeSAodmFsdWVzIHNoYXJpbmcgYVxuICAvLyBxdWVyeSBhbmQgaXRzIGZpbHRlcnMgYXJlIGZvbGRlZCBpbnRvIG9uZTsgYSBmb3JtdWxhIHJ1bnMgbm9uZSkgYW5kIG1heVxuICAvLyBzdHJlYW0gYSBrZWVwQWxpdmUgcHVsc2UgYmVmb3JlIGVhY2gsIHNvIGEgc2xvdyBwYWdlIG5ldmVyIHNpdHMgc2lsZW50XG4gIC8vIHVudGlsIHRoZSBjb25uZWN0aW9uIGRyb3BzLiBUaGUgYm9keSBzdGF5cyBvbmUgSlNPTiB3aXRoIHRoZSByb3dzIGF0IGRhdGEudmFsdWVzLFxuICAvLyB3aGljaCBGc0FwaSByZWFkcyB3aXRoIHRoZSAndmFsdWVzJyBrZXksIGFzIGV4cG9ydENvbXBvbmVudCdzIHN0cmVhbWVkXG4gIC8vIHJlc3BvbnNlIGlzIHJlYWQuXG4gIC8vXG4gIC8vIGBtYXRjaEFueUdyb3VwSWRzYCBpcyBhIHRpbGUncyAoQ29tcG9uZW50RGF0YVN0YXRlKTogd2hpbGUgdGhlIGdyb3Vwc1xuICAvLyBtYXRjaCAnYW55JywgdGhlIGdyb3VwcyB0aGF0IGNvbWJpbmUgKHZhbHVlc01hdGNoQW55R3JvdXBJZHMpLiBTZW50IG9ubHlcbiAgLy8gd2hlbiBpdCBsaXN0cyBhbnk7IHRoZSBzZXJ2ZXIgY2hlY2tzIGVhY2ggdmFsdWUgYWdhaW5zdCBpdCBhcyBpdCBjaGVja3NcbiAgLy8gYSB0aWxlLlxuICBwdWJsaWMgcGFnZVZhbHVlcyhcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBhZ2VJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIGlzRXhwb3J0ID0gZmFsc2UsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICAgbWF0Y2hBbnlHcm91cElkczogbnVtYmVyW10gPSBbXSxcbiAgKTogT2JzZXJ2YWJsZTxSZXBvcnRQYWdlVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3BhZ2VzLyR7cGFnZUlkfS92YWx1ZXNgKSxcbiAgICAgIHsgZmlsdGVycywgZXhwb3J0OiBpc0V4cG9ydCwgLi4uKG1hdGNoQW55R3JvdXBJZHMubGVuZ3RoID8geyBtYXRjaEFueUdyb3VwSWRzIH0gOiB7fSkgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAndmFsdWVzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0cyBvbmUgY29tcG9uZW50IHRvIENTViBzZXJ2ZXItc2lkZTogdGhlIGZpbGUgaXMgd2hhdCB0aGUgc2NyZWVuXG4gIC8vIHNob3dzIChhIGNoYXJ0IG9yIEtQSSBhcyByZW5kZXJlZCwgYSBsaXN0IGluIGZ1bGwgaW4gdGhlIHNjcmVlbidzIG9yZGVyKS5cbiAgLy8gVGhlIGJhY2tlbmQgc3RyZWFtcyBwZXJjZW50YWdlIHByb2dyZXNzIHdoaWxlIGl0IHdyaXRlcy5cbiAgLy9cbiAgLy8ga2V5OiBudWxsIG9uIHB1cnBvc2UsIHVubGlrZSB0aGUga2V5OiAndXJsJyBwcmVzaWduZWQtZXhwb3J0IHBhdHRlcm46IHRoZVxuICAvLyByZXNwb25zZSBhbHNvIGNhcnJpZXMgYG5vdGVzYCwgdGhlIHNlbnRlbmNlcyBzYXlpbmcgaG93IHRoZSBmaWxlIGZhbGxzXG4gIC8vIHNob3J0IG9mIHRoZSBmdWxsIHJlc3VsdCwgYW5kIHRoZSBjYWxsZXIgaGFzIHRvIHNob3cgdGhlbSBiZWZvcmUgaXQgaGFuZHNcbiAgLy8gdGhlIHVybCB0byBGc1Byb2Nlc3MuZG93bmxvYWQuIGB0aXRsZWAgaXMgdGhlIGNvbXBvbmVudCdzIHRpdGxlIGFzIHRoZVxuICAvLyB2aWV3ZXIgcmVhZHMgaXQsIGl0cyB0b2tlbnMgZmlsbGVkICgnU2lnbi11cHMg4oCUIFNlcHRlbWJlciAyMDI2JyksIHdoaWNoXG4gIC8vIHRoZSBzZXJ2ZXIgbmFtZXMgdGhlIGZpbGUgYWZ0ZXIuXG4gIHB1YmxpYyBleHBvcnRDb21wb25lbnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSB7fSxcbiAgICB0aXRsZSA9ICcnLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPENvbXBvbmVudEV4cG9ydFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9leHBvcnRgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUsIHRpdGxlIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0cyBFVkVSWSBjb21wb25lbnQgb24gdGhlIHJlcG9ydCDigJQgb3Igb24gb25lIHBhZ2Ug4oCUIHNlcnZlci1zaWRlIGFuZFxuICAvLyByZXNvbHZlcyB0byBhIHByZXNpZ25lZCBVUkwgZm9yIGEgemlwIG9mIG9uZSBDU1YgcGVyIGNvbXBvbmVudCwgZm9sZGVyZWQgYnlcbiAgLy8gcGFnZSwgcGx1cyBhbiAnRXhwb3J0IE5vdGVzLnR4dCcuIGBmaWx0ZXJzYCBjYXJyaWVzIHRoZSByZXNvbHZlZCB2YWx1ZXMgZm9yXG4gIC8vIGV2ZXJ5IGNvbXBvbmVudCB0b2dldGhlcjsgZWFjaCBvbmUgcGlja3Mgb3V0IGl0cyBvd24uIGBmcmVxdWVuY3lgIGlzIHRoZVxuICAvLyByZXBvcnQncyBncm91cC1ieSBncmFpbiAodGhlIHNlcnZlciByZS1idWNrZXRzIG9ubHkgdGhlIHRpbGVzIHRoYXQgZm9sbG93XG4gIC8vIGl0OiB0aW1lLXNlcmllcyBjaGFydHMgYW5kIHRhYmxlcyBvdmVyIGEgdGltZSBheGlzKSwgYW5kIGBmaWx0ZXJMaW5lc2AgaXMgdGhlIGZpbHRlciBiYXIgYXMgdGhlIHZpZXdlciByZWFkcyBpdFxuICAvLyAoZXhwb3J0TGluZXMpLCB3aGljaCB0aGUgbm90ZXMgZmlsZSB3cml0ZXMuIFRoZWlyIHRleHQgZ29lcyBhc1xuICAvLyBmaWx0ZXJTdW1tYXJ5IHRvbywgZm9yIGEgc2VydmVyIHRoYXQgZG9lcyBub3QgcmVhZCBmaWx0ZXJMaW5lczsgdGhlXG4gIC8vIGxpbmVzIGFyZSBsZWZ0IG91dCB3aGVuIHRoZXJlIGFyZSBub25lLiBgc3RhdGVzYCBpcyBlYWNoIHRpbGUncyBvd25cbiAgLy8gc3RhdGUgYnkgY29tcG9uZW50IGlkICh6aXBFeHBvcnRTdGF0ZXMpLCBzbyBlYWNoIGZpbGUgaG9sZHMgd2hhdCBpdHNcbiAgLy8gdGlsZSBzaG93czsgaXQgaXMgbGVmdCBvdXQgd2hlbiBubyB0aWxlIGhhcyBhbnkuIGB0aXRsZXNgIGhvbGRzIGVhY2ggY29tcG9uZW50J3MgdGl0bGUgYXMgdGhlIHZpZXdlciByZWFkcyBpdCwgaXRzIHRva2Vuc1xuICAvLyBmaWxsZWQsIGJ5IGNvbXBvbmVudCBpZCwgd2hpY2ggdGhlIHNlcnZlciBuYW1lcyB0aGUgY29tcG9uZW50J3MgZmlsZVxuICAvLyBhZnRlcjsgbGVmdCBvdXQgd2hlbiB0aGVyZSBhcmUgbm9uZS4gU2FtZSBrZWVwLWFsaXZlIGNvbnRyYWN0IGFzXG4gIC8vIGV4cG9ydENvbXBvbmVudCwgb3ZlciBhIGxvbmdlciBydW47IGNvbnN1bWUgdGhyb3VnaCBGc1Byb2Nlc3MuZG93bmxvYWQuXG4gIHB1YmxpYyBleHBvcnRSZXBvcnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXSxcbiAgICBwYWdlSWQ6IG51bWJlciB8IG51bGwgPSBudWxsLFxuICAgIGZyZXF1ZW5jeTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwgPSBudWxsLFxuICAgIGZpbHRlckxpbmVzOiBSZXBvcnRFeHBvcnRMaW5lW10gPSBbXSxcbiAgICBzdGF0ZXM6IFJlY29yZDxudW1iZXIsIENvbXBvbmVudERhdGFTdGF0ZT4gPSB7fSxcbiAgICB0aXRsZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7fSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZXhwb3J0YCksXG4gICAgICB7XG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIC4uLihwYWdlSWQgPyB7IHBhZ2VJZCB9IDoge30pLFxuICAgICAgICAuLi4oZnJlcXVlbmN5ID8geyBmcmVxdWVuY3kgfSA6IHt9KSxcbiAgICAgICAgZmlsdGVyU3VtbWFyeTogZmlsdGVyTGluZXMubWFwKChsaW5lKSA9PiBsaW5lLnRleHQpLFxuICAgICAgICAuLi4oZmlsdGVyTGluZXMubGVuZ3RoID8geyBmaWx0ZXJMaW5lcyB9IDoge30pLFxuICAgICAgICAuLi4oT2JqZWN0LmtleXMoc3RhdGVzKS5sZW5ndGggPyB7IHN0YXRlcyB9IDoge30pLFxuICAgICAgICAuLi4oT2JqZWN0LmtleXModGl0bGVzKS5sZW5ndGggPyB7IHRpdGxlcyB9IDoge30pLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAndXJsJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRGlzdGluY3Qgb3B0aW9ucyBmb3IgYSBzZWxlY3QgZmlsdGVyIChkcml2ZXMgbXVsdGlzZWxlY3QgY29udHJvbHMpLlxuICBwdWJsaWMgZmlsdGVyT3B0aW9ucyhyZXBvcnRJZDogbnVtYmVyLCBmaWx0ZXJJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZmlsdGVycy8ke2ZpbHRlcklkfS9vcHRpb25zYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBzdGF0ZW1lbnQgYSBjb21wb25lbnQgcnVucywgZm9yIHRoZSBTUUwgdGFiLlxuICAvL1xuICAvLyBGZXRjaGVkIHJhdGhlciB0aGFuIHJlYWQgb2ZmIHRoZSBjb21wb25lbnQsIGJlY2F1c2UgYSBERVJJVkVEIGNvbXBvbmVudCBoYXNcbiAgLy8gbm8gc3RvcmVkIFNRTCDigJQgaXQgc3RvcmVzIGEgZG9jdW1lbnQsIGFuZCBpdHMgc3RhdGVtZW50IG9ubHkgZXhpc3RzIG9uY2VcbiAgLy8gdGhlIGJhY2tlbmQgY29tcGlsZXMgdGhhdCBkb2N1bWVudC4gQ29tcGlsZWQgcGVyIHJlcXVlc3QsIGZvciB0aGUgb25lXG4gIC8vIGNvbXBvbmVudCBiZWluZyBsb29rZWQgYXQsIHNvIG9wZW5pbmcgYSByZXBvcnQgbmV2ZXIgcGF5cyBmb3IgaXQuXG4gIC8vXG4gIC8vIGBrZXk6IG51bGxgIGJlY2F1c2UgdGhlIHdob2xlIGVudmVsb3BlIGlzIHRoZSBhbnN3ZXIgaGVyZTogYSBzdGFsZSBkb2N1bWVudFxuICAvLyBjb21lcyBiYWNrIGFzIHsgc3FsOiBudWxsLCBlcnJvciwgZXJyb3JUeXBlIH0gYW5kIHVud3JhcHBpbmcgb25lIGZpZWxkXG4gIC8vIHdvdWxkIHRocm93IHRoZSBkaWFnbm9zaXMgYXdheS5cbiAgcHVibGljIGNvbXBvbmVudFNxbChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0Q29tcG9uZW50U3FsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L3NxbGApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGNvbXBvbmVudCBTUUwncyBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW5zIOKAlCBkcml2ZXMgdGhlIGNvbHVtbiBwaWNrZXJcbiAgLy8gaW4gdGhlIGZpbHRlciBVSSBzbyBhIGNvbHVtbiBuYW1lIGlzIG5ldmVyIHR5cGVkIGJ5IGhhbmQuXG4gIHB1YmxpYyBjb21wb25lbnRDb2x1bW5zKHJlcG9ydElkOiBudW1iZXIsIGNvbXBvbmVudElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2NvbHVtbnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb2x1bW5zJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gTWFrZSBvbmUgY29sdW1uIGZpbHRlcmFibGUuIGBsZXZlbGAgKGNvbXBvbmVudCB8IHJlcG9ydCkgcGxhY2VzIGEgbmV3XG4gIC8vIGdyb3VwOyBgZ3JvdXBJZGAgaW5zdGVhZCBsaW5rcyBpbnRvIGFuIGV4aXN0aW5nIGdyb3VwLiBBIHNlbGVjdCBmaWx0ZXInc1xuICAvLyBvcHRpb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudCBTUUwgd2hlbiBvcHRpb25zU3FsIGlzIG9taXR0ZWQuXG4gIHB1YmxpYyBhZGRGaWx0ZXIoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcjogeyBmaWx0ZXJDb2x1bW46IHN0cmluZzsgdHlwZT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGxldmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBncm91cElkPzogbnVtYmVyIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZmlsdGVyc2ApLFxuICAgICAgZmlsdGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGUgYSBmaWx0ZXIg4oCUIGFueSBzdWJzZXQgb2YgeyBsYWJlbCwgb3B0aW9uc1NxbCwgZW5hYmxlZCB9LlxuICBwdWJsaWMgdXBkYXRlRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZmlsdGVySWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiB7IGxhYmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBlbmFibGVkPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH1gKSxcbiAgICAgIGNoYW5nZXMsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhIGZpbHRlciAoaXRzIGdyb3VwIGdvZXMgdG9vIHdoZW4gbm90aGluZyBlbHNlIHVzZXMgaXQpLlxuICBwdWJsaWMgZGVsZXRlRmlsdGVyKHJlcG9ydElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJzLyR7ZmlsdGVySWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQgKG9wZXJhdG9yLWF1dGhvcmVkIGFnZW50IGluc3RydWN0aW9ucylcbiAgLy8gYW5kIGl0cyBmdWxsIHZlcnNpb24gaGlzdG9yeTogeyBpbnN0cnVjdGlvbnMsIHZlcnNpb25zIH0uXG4gIHB1YmxpYyBpbnN0cnVjdGlvbnMoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoJ2luc3RydWN0aW9ucycpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU2F2ZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCAoYXBwZW5kLW9ubHk7IGFuIHVuY2hhbmdlZCBzYXZlIGlzIGFcbiAgLy8gbm8tb3Agc2VydmVyLXNpZGUpLiBSZXNvbHZlcyB0byB0aGUgc2FtZSB7IGluc3RydWN0aW9ucywgdmVyc2lvbnMgfSBzaGFwZS5cbiAgcHVibGljIHNhdmVJbnN0cnVjdGlvbnMoY29udGVudDogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aCgnaW5zdHJ1Y3Rpb25zJyksXG4gICAgICB7IGNvbnRlbnQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBNYWtlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQgY3VycmVudCAobm8gbmV3IHJvdyBpcyBjcmVhdGVkKS5cbiAgcHVibGljIHJlc3RvcmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgaW5zdHJ1Y3Rpb25zLyR7aW5zdHJ1Y3Rpb25JZH0vcmVzdG9yZWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUnVuIGEgc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQsIHN0cmVhbWVkOiBlbWl0cyBhbiBldmVudCBwZXIgTkRKU09OIGZyYW1lXG4gIC8vICh7IGtpbmQ6ICdsb2cnLCBsaW5lLCBwZXJjZW50IH0gZmVlZCBsaW5lcyBhbmQgeyBraW5kOiAnc2VjdGlvbicgfSBwaGFzZVxuICAvLyBtYXJrZXJzKSBhbmQgY29tcGxldGVzIHdoZW4gdGhlIGJ1aWxkIGVuZHMuIEZlZWQgdGhlIGxpbmVzIGludG8gRnNQcm9jZXNzLlxuICBwdWJsaWMgc2VtYW50aWNCdWlsZChjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5zdHJlYW0oXG4gICAgICAnUE9TVCcsXG4gICAgICB0aGlzLl9wYXRoKCdzZW1hbnRpYy9idWlsZCcpLFxuICAgICAgeyBzdHJlYW06IHRydWUgfSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICB9XG5cbiAgLy8gTGF0ZXN0IGJ1aWxkIHN0YXR1cyArIGVudGl0eSBzY29yZWJvYXJkOiB7IGJ1aWxkLCBkZXRhaWwgfS5cbiAgcHVibGljIHNlbWFudGljQnVpbGRTdGF0dXMoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoJ3NlbWFudGljL2J1aWxkJyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTdG9wIHRoZSBydW5uaW5nIGJ1aWxkICh0aGUgY3VycmVudCBzZW1hbnRpYyBkYXRhYmFzZSBzdGF5cyBpbiBwbGFjZSkuXG4gIHB1YmxpYyBzZW1hbnRpY0J1aWxkU3RvcChjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoJ3NlbWFudGljL2J1aWxkL3N0b3AnKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdidWlsZCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIE9uZSBlbnRpdHkncyBjYWNoZWQgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9ucyDigJQgbG9hZGVkIG9uIGV4cGFuZCwgb25lXG4gIC8vIGVudGl0eSBhdCBhIHRpbWUsIGJlY2F1c2UgdGhlIGZ1bGwgc2V0IGFjcm9zcyBhbGwgZW50aXRpZXMgaXMgZmFyIHRvbyBiaWdcbiAgLy8gdG8gc2hpcCBpbnNpZGUgdGhlIHNjb3JlYm9hcmQgY2FsbC5cbiAgcHVibGljIHNlbWFudGljRW50aXR5RnVuY3Rpb25zKGVudGl0eTogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgc2VtYW50aWMvZW50aXRpZXMvJHtlbnRpdHl9L2Z1bmN0aW9uc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2VudGl0eUZ1bmN0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQgbW9kdWxlJ3MgR2VuZXJhbCBzZXR0aW5ncyAoc2VtYW50aWMtYnVpbGQgY29uY3VycmVuY3kgKyBpdHMgYm91bmRzKS5cbiAgcHVibGljIHNldHRpbmdzKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdzZXR0aW5ncycpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NldHRpbmdzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGxvY2FsZXMgYW5kIGN1cnJlbmNpZXMgYSByZXBvcnQgY2FuIGJlIHdyaXR0ZW4gaW4sIGZvciB0aGUgcmVwb3J0XG4gIC8vIHNldHRpbmdzJyBMb2NhbGUgYW5kIEN1cnJlbmN5IHNlbGVjdHM6IHRoZSBkZWZhdWx0IGxvY2FsZSwgZWFjaCBvZmZlcmVkXG4gIC8vIGxvY2FsZSB3aXRoIHRoZSBjdXJyZW5jeSBhIHJlcG9ydCBpbiBpdCB1c2VzIHdoZW4gaXQgbmFtZXMgbm9uZSwgYW5kIGV2ZXJ5XG4gIC8vIGN1cnJlbmN5IGNvZGUuIE9ubHkgYSBzZXJ2ZXIgdGhhdCBzZW5kcyBlZmZlY3RpdmVMb2NhbGUgaGFzIHRoaXMgcm91dGUuXG4gIHB1YmxpYyBsb2NhbGVzKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxSZXBvcnRMb2NhbGVzPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdsb2NhbGVzJyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnbG9jYWxlcycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNhdmUgdGhlIEdlbmVyYWwgc2V0dGluZ3M7IHJlc29sdmVzIHRvIHRoZSBzYW1lIHsgc2V0dGluZ3MgfSBzaGFwZS5cbiAgcHVibGljIHNhdmVTZXR0aW5ncyhzZXR0aW5nczogeyBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlciB9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aCgnc2V0dGluZ3MnKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzZXR0aW5ncycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBhIGZpbHRlciBncm91cCDigJQgaXRzIGV4cG9zdXJlIGxldmVsICgnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnKSxcbiAgLy8gaXRzIG5hbWUgKGFuIGlkZW50aWZpZXIsIHVuaXF1ZSBpbiB0aGUgcmVwb3J0OyB0aGUgc2VydmVyIHJlZnVzZXMgb25lIHRoYXRcbiAgLy8gYnJlYWtzIHRoZSBydWxlLCB3aXRoIGEgbWVzc2FnZSBuYW1pbmcgdGhlIHByb2JsZW0pLCBpdHMgbGFiZWwgKG5ldmVyXG4gIC8vIGNoYW5nZXMgdGhlIG5hbWUpIGFuZC9vciBpdHMgZGVmYXVsdCB2YWx1ZSAodGhlIHZhbHVlIHNlZWRpbmcgdGhlIHJlcG9ydFxuICAvLyBiYXIgb24gb3BlbikuIFNlbmQgYGRlZmF1bHQ6IG51bGxgIChvciBhbiBlbXB0eSBkZWZhdWx0KSB0byBjbGVhciBpdC4gT25seVxuICAvLyB0aGUga2V5cyBwcm92aWRlZCBhcmUgY2hhbmdlZCwgaW4gdGhlIG9yZGVyIG5hbWUsIGxhYmVsLCBsZXZlbCwgZGVmYXVsdCxcbiAgLy8gc28gYSByZWZ1c2VkIG5hbWUgbGVhdmVzIHRoZSByZXN0IHVud3JpdHRlbi5cbiAgcHVibGljIHVwZGF0ZUZpbHRlckdyb3VwKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZ3JvdXBJZDogbnVtYmVyLFxuICAgIGNoYW5nZXM6IFJlcG9ydEZpbHRlckdyb3VwQ2hhbmdlcyxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJncm91cHMvJHtncm91cElkfWApLFxuICAgICAgY2hhbmdlcyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyR3JvdXAnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBIHNlbGVjdCBmaWx0ZXIncyBvcHRpb25zIG5hcnJvd2VkIGJ5IHRoZSBvdGhlciBlbnRyaWVzIG9mIGl0cyB0aWxlXG4gIC8vIChSZXBvcnRGaWx0ZXJPcHRpb25zUmVxdWVzdCksIHdpdGggdGhlIHBpY2tzIGl0IG5hbWVzIGxhYmVsZWQuIE9ubHkgZm9yXG4gIC8vIGEgcmVwb3J0IHdob3NlIHNlcnZlciBsaXN0cyBjYXNjYWRpbmdPcHRpb25zOyBhbnkgb3RoZXIgcmVhZHMgdGhlIGZ1bGxcbiAgLy8gbGlzdCB0aHJvdWdoIGZpbHRlck9wdGlvbnMoKS5cbiAgcHVibGljIGZpbHRlck9wdGlvbnNOYXJyb3dlZChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcklkOiBudW1iZXIsXG4gICAgYm9keTogUmVwb3J0RmlsdGVyT3B0aW9uc1JlcXVlc3QsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0RmlsdGVyT3B0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH0vb3B0aW9uc2ApLFxuICAgICAgYm9keSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQncyBzYXZlZCBmaWx0ZXJzLCBpbiB0aGVpciBvcmRlci4gU2hhcmVkIGJ5IGV2ZXJ5b25lIHdobyBtYXlcbiAgLy8gb3BlbiB0aGUgcmVwb3J0LlxuICBwdWJsaWMgc2F2ZWRGaWx0ZXJzKHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxSZXBvcnRTYXZlZEZpbHRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9zYXZlZGZpbHRlcnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBIG5ldyBzYXZlZCBmaWx0ZXI6IGl0cyBuYW1lIGFuZCB0aGUgcmVwb3J0LXdpZGUgZmlsdGVyIHZhbHVlcyBpdCBob2xkcy5cbiAgcHVibGljIGNyZWF0ZVNhdmVkRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgc2F2ZWRGaWx0ZXI6IFJlcXVpcmVkPFJlcG9ydFNhdmVkRmlsdGVyQ2hhbmdlcz4sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0U2F2ZWRGaWx0ZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9zYXZlZGZpbHRlcnNgKSxcbiAgICAgIHNhdmVkRmlsdGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbmFtZXMgYSBzYXZlZCBmaWx0ZXIgb3IgcmVwbGFjZXMgaXRzIHZhbHVlczsgb25seSB0aGUga2V5cyBnaXZlbiBjaGFuZ2UuXG4gIHB1YmxpYyB1cGRhdGVTYXZlZEZpbHRlcihcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHJlcG9ydFNhdmVkRmlsdGVySWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiBSZXBvcnRTYXZlZEZpbHRlckNoYW5nZXMsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0U2F2ZWRGaWx0ZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3NhdmVkZmlsdGVycy8ke3JlcG9ydFNhdmVkRmlsdGVySWR9YCksXG4gICAgICBjaGFuZ2VzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVTYXZlZEZpbHRlcihcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHJlcG9ydFNhdmVkRmlsdGVySWQ6IG51bWJlcixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxSZXBvcnRTYXZlZEZpbHRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZGVsZXRlKFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vc2F2ZWRmaWx0ZXJzLyR7cmVwb3J0U2F2ZWRGaWx0ZXJJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBlcnNpc3QgdGhlIHNhdmVkIGZpbHRlcnMnIG9yZGVyIGFmdGVyIGEgZHJhZzogZXZlcnkgaWQsIGluIGl0cyBuZXdcbiAgLy8gb3JkZXIuIFJlc29sdmVzIHRvIHRoZSBsaXN0IGluIHRoYXQgb3JkZXIuXG4gIHB1YmxpYyBzYXZlU2F2ZWRGaWx0ZXJQb3NpdGlvbnMoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICByZXBvcnRTYXZlZEZpbHRlcklkczogbnVtYmVyW10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0U2F2ZWRGaWx0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vc2F2ZWRmaWx0ZXJzL3Bvc2l0aW9uc2ApLFxuICAgICAgeyByZXBvcnRTYXZlZEZpbHRlcklkcyB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixhQUFhLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQXNCbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUc1RCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLHFGQUFxRjtBQUlyRixNQUFNLE9BQU8sVUFBVTtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUN2RSxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBRTVCLGtGQUFrRjtJQUNsRixrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDWixLQUFLLEVBQ0w7WUFDRSxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUN2RSxJQUFJLENBQUMsUUFBYSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMs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akMsU0FBd0IsRUFBRTtRQUUxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxpQkFBaUIsbUJBQW1CLEVBQUUsQ0FBQyxFQUM3RCxPQUFPLEVBQ1A7WUFDRSxHQUFHLEVBQUUsYUFBYTtZQUNsQixHQUFHLE1BQU07U0FDVixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQ3RCLFFBQWdCLEVBQ2hCLG1CQUEyQixFQUMzQixTQUF3QixFQUFFO1FBRTFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLGlCQUFpQixtQkFBbUIsRUFBRSxDQUFDLEVBQzdELEVBQUUsRUFDRjtZQUNFLEdBQUcsRUFBRSxhQUFhO1lBQ2xCLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsNkNBQTZDO0lBQ3RDLHdCQUF3QixDQUM3QixRQUFnQixFQUNoQixvQkFBOEIsRUFDOUIsU0FBd0IsRUFBRTtRQUUxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSx5QkFBeUIsQ0FBQyxFQUNoRCxFQUFFLG9CQUFvQixFQUFFLEVBQ3hCO1lBQ0UsR0FBRyxFQUFFLGNBQWM7WUFDbkIsR0FBRyxNQUFNO1NBQ1YsQ0FDRixDQUFDO0lBQ0osQ0FBQzt3R0E3ekJVLFVBQVU7NEdBQVYsVUFBVSxjQUZULE1BQU07OzRGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZzQXBpLCBSZXF1ZXN0Q29uZmlnLCBSZXF1ZXN0TWV0aG9kLCBTdHJlYW1FdmVudCB9IGZyb20gJ0BmaXJlc3RpdGNoL2FwaSc7XG5pbXBvcnQgeyBHcmlkUmVxdWVzdCB9IGZyb20gJ0BmaXJlc3RpdGNoL2dyaWQnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcG9ydEV4cG9ydExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtbGluZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyR3JvdXBDaGFuZ2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLWdyb3VwLWNoYW5nZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlck9wdGlvbnNSZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMtcmVxdWVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWZpbHRlci1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRTYXZlZEZpbHRlckNoYW5nZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1zYXZlZC1maWx0ZXItY2hhbmdlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0U2F2ZWRGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1zYXZlZC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgQ29tcG9uZW50RXhwb3J0UmVzcG9uc2UsXG4gIFJlcG9ydENvbXBvbmVudFNxbCxcbiAgUmVwb3J0TG9jYWxlcyxcbiAgUmVwb3J0UGFnZVZhbHVlLFxuICBSZXBvcnRUcmVlLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Rm9ybWF0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWZvcm1hdC50eXBlJztcbmltcG9ydCB7IFZJRVdFUl9GRUFUVVJFUyB9IGZyb20gJy4uL3JlcG9ydC12aWV3ZXItZmVhdHVyZXMnO1xuXG5cbi8vIEFQSSBnYXRld2F5IGZvciB0aGUgUmVwb3J0cyBtb2R1bGUuIEV2ZXJ5IGVuZHBvaW50IGhhbmdzIG9mZiBbYmFzZVBhdGhdLFxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gXCJyZXBvcnRzXCIgKHRoZSBmcmFtZXdvcmsgcmVwb3J0cyBiYWNrZW5kIGF0IC9hcGkvcmVwb3J0cylcbi8vIGFuZCBjYW4gYmUgcmVwb2ludGVkIGJ5IHRoZSBob3N0IHNvIHRoZSBwYWNrYWdlIHN0YXlzIHNlbGYtY29udGFpbmVkIGFuZCBwb3J0YWJsZS5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnREYXRhPFQgPSBhbnk+IHtcbiAgcHJpdmF0ZSBfYXBpID0gaW5qZWN0KEZzQXBpKTtcblxuICAvLyBUaGUgQVBJIHJvb3QgZm9yIGV2ZXJ5IHJlcG9ydHMgZW5kcG9pbnQuIERlZmF1bHRzIHRvIHRoZSBmcmFtZXdvcmsgcmVwb3J0c1xuICAvLyBjb250ZXh0OyBzZXQgaXQgb25jZSAoZS5nLiBmcm9tIHRoZSBob3N0J3MgcmVwb3J0IHBhZ2UpIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIGJhc2VQYXRoID0gJ3JlcG9ydHMnO1xuXG4gIC8vIEJ1aWxkIGFuIGVuZHBvaW50IHBhdGggdW5kZXIgdGhlIGNvbmZpZ3VyZWQgYmFzZSwgZS5nLiBfcGF0aCgpID0+IFwiYWkvcmVwb3J0c1wiLFxuICAvLyBfcGF0aChgJHtpZH0vcGFnZXNgKSA9PiBcImFpL3JlcG9ydHMvMTIzL3BhZ2VzXCIuXG4gIHByaXZhdGUgX3BhdGgoc3VmZml4ID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdWZmaXggPyBgJHt0aGlzLmJhc2VQYXRofS8ke3N1ZmZpeH1gIDogdGhpcy5iYXNlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyByZXBvcnRzKHF1ZXJ5OiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoKSxcbiAgICAgIHF1ZXJ5LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnRzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQm90aCBoYWx2ZXMgb2YgdGhlIGxpc3Rpbmcg4oCUIHJlcG9ydHMgQU5EIHRoZSBmb2xkZXJzIHRoZXkgYXJlIGZpbGVkIGludG8g4oCUXG4gIC8vIGZyb20gdGhlIG9uZSBHRVQuIE5vIGBrZXlgLCBiZWNhdXNlIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHRoZSBhbnN3ZXIgaGVyZTtcbiAgLy8gcmVwb3J0cygpIGtlZXBzIGl0cyAncmVwb3J0cycga2V5IGZvciBjYWxsZXJzIHRoYXQgb25seSB3YW50IHRoZSBmbGF0IGxpc3QuXG4gIHB1YmxpYyB0cmVlKHF1ZXJ5OiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFJlcG9ydFRyZWU+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoKSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgY29uZmlnLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlKG5hbWU6IHN0cmluZywgcmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IG51bGwsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aCgpLFxuICAgICAgeyBuYW1lLCByZXBvcnRGb2xkZXJJZCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBGaWxlIGEgcmVwb3J0IHVuZGVyIGEgZm9sZGVyLCBvciBwYXNzIG51bGwgdG8gbW92ZSBpdCB0byB0aGUgcm9vdC4gU2VudFxuICAvLyBleHBsaWNpdGx5IChuZXZlciBvbWl0dGVkKSBzbyB0aGUgYmFja2VuZCBjYW4gdGVsbCBcIm1vdmUgdG8gcm9vdFwiIGZyb21cbiAgLy8gXCJsZWF2ZSB0aGUgZm9sZGVyIGFsb25lXCIuXG4gIHB1YmxpYyBtb3ZlUmVwb3J0KHJlcG9ydElkOiBudW1iZXIsIHJlcG9ydEZvbGRlcklkOiBudW1iZXIgfCBudWxsLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHsgcmVwb3J0Rm9sZGVySWQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZvbGRlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IG51bGwsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoJ2ZvbGRlcnMnKSxcbiAgICAgIHsgbmFtZSwgcGFyZW50UmVwb3J0Rm9sZGVySWQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZm9sZGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVuYW1lIGFuZC9vciBtb3ZlIGEgZm9sZGVyLiBPbmx5IHRoZSBrZXlzIHBhc3NlZCBhcmUgYWN0ZWQgb24gc2VydmVyLXNpZGUsXG4gIC8vIHNvIGEgcmVuYW1lIG5ldmVyIGRpc3R1cmJzIHRoZSBwYXJlbnQgYW5kIGEgZHJhZyBuZXZlciBkaXN0dXJicyB0aGUgbmFtZS5cbiAgcHVibGljIHVwZGF0ZUZvbGRlcihcbiAgICByZXBvcnRGb2xkZXJJZDogbnVtYmVyLFxuICAgIGZvbGRlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgZm9sZGVycy8ke3JlcG9ydEZvbGRlcklkfWApLFxuICAgICAgZm9sZGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTb2Z0LWRlbGV0ZSwgd2hhdGV2ZXIgdGhlIGZvbGRlciBob2xkczogaXRzIGNvbnRlbnRzIGxlYXZlIHRoZSBsaXN0aW5nIHdpdGhcbiAgLy8gaXQsIGFuZCB1bmRlbGV0ZUZvbGRlcigpIGJyaW5ncyB0aGUgbG90IGJhY2suXG4gIHB1YmxpYyBkZWxldGVGb2xkZXIocmVwb3J0Rm9sZGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYGZvbGRlcnMvJHtyZXBvcnRGb2xkZXJJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBSZXN0b3JlIGEgc29mdC1kZWxldGVkIGZvbGRlciB0aHJvdWdoIGl0cyBvd24gYWN0aW9uIGVuZHBvaW50IOKAlCB0aGUgZm9sZGVyXG4gIC8vIFBVVCBkb2VzIG5vdCBhY2NlcHQgYHN0YXRlYC4gQW55IGRlbGV0ZWQgZm9sZGVyIGFib3ZlIGl0IGlzIHJlc3RvcmVkIHRvbywgc29cbiAgLy8gaXQgbGFuZHMgYmFjayB3aGVyZSBpdCB3YXMuXG4gIHB1YmxpYyB1bmRlbGV0ZUZvbGRlcihyZXBvcnRGb2xkZXJJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYGZvbGRlcnMvJHtyZXBvcnRGb2xkZXJJZH0vdW5kZWxldGVgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVuYW1lKHJlcG9ydElkOiBudW1iZXIsIG5hbWU6IHN0cmluZywgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7IG5hbWUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVwb3J0IHNldHRpbmdzOiBhbnkgc3Vic2V0IG9mIHsgbmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCB0aW1lem9uZSxcbiAgLy8gbG9jYWxlLCBjdXJyZW5jeSwgc3R5bGVzLCBoZWFkZXJGb290ZXIgfSDigJQgc3R5bGVzIGNhcnJ5IHRoZVxuICAvLyByZXBvcnQncyB0eXBvZ3JhcGhpYyBjb25maWcgKGUuZy4gaGVhZGluZyBzaXplKSwgaGVhZGVyRm9vdGVyIHRoZVxuICAvLyBoZWFkZXIvZm9vdGVyIGJhbmQgZGVwdGhzIGluIGluY2hlcy4gVGhlIHBhZ2Ugc2l6ZSBpcyBpbiBpbmNoZXMgYW5kXG4gIC8vIHdpZHRoL2hlaWdodCBnbyB0b2dldGhlci4gbG9jYWxlIChhIEJDUCA0NyB0YWcpIGFuZCBjdXJyZW5jeSAoYW4gSVNPIDQyMTdcbiAgLy8gY29kZSkgYXJlIGVhY2ggc2VudCBvbmx5IHRvIGNoYW5nZSB0aGVtOyAnJyByZXR1cm5zIHRoZSByZXBvcnQgdG8gdGhlXG4gIC8vIGRlZmF1bHQsIGFuZCB0aGUgY3VycmVuY3kgb25seSBuYW1lcyB3aGF0IHRoZSBhbW91bnRzIGFyZSBpbi5cbiAgcHVibGljIHVwZGF0ZShyZXBvcnRJZDogbnVtYmVyLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFwcGVuZCBhIGJsYW5rIHBhZ2UgdG8gdGhlIHJlcG9ydDsgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYWdlLlxuICBwdWJsaWMgYWRkUGFnZShyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3BhZ2VzYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncGFnZScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFueSBzdWJzZXQgb2YgeyBuYW1lLCBtYXN0ZXJIaWRkZW4gfS4gQW4gZW1wdHkgbmFtZSBpcyBzdG9yZWQgYXMgbnVsbFxuICAvLyBzZXJ2ZXItc2lkZSwgd2hpY2ggcHV0cyB0aGUgdGFiIGJhY2sgb24gaXRzIHBvc2l0aW9uYWwgXCJQYWdlIE5cIiBsYWJlbDtcbiAgLy8gbWFzdGVySGlkZGVuIGhpZGVzIHRoZSByZXBvcnQncyBoZWFkZXIgYW5kIGZvb3RlciBvbiB0aGlzIHBhZ2UuXG4gIHB1YmxpYyB1cGRhdGVQYWdlKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgcGFnZUlkOiBudW1iZXIsXG4gICAgcGFnZTogeyBuYW1lPzogc3RyaW5nOyBtYXN0ZXJIaWRkZW4/OiBib29sZWFuIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vcGFnZXMvJHtwYWdlSWR9YCksXG4gICAgICBwYWdlLFxuICAgICAge1xuICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRGVsZXRlIGEgcGFnZSBhbmQgZXZlcnl0aGluZyBvbiBpdC4gUmVmdXNlZCBzZXJ2ZXItc2lkZSBmb3IgdGhlIGxhc3RcbiAgLy8gcmVtYWluaW5nIHBhZ2Ug4oCUIGEgcmVwb3J0IHdpdGggbm8gY2FudmFzIGlzIGEgZGVsZXRlZCByZXBvcnQsIG5vdCBhIHBhZ2VcbiAgLy8gb3BlcmF0aW9uLlxuICBwdWJsaWMgZGVsZXRlUGFnZShyZXBvcnRJZDogbnVtYmVyLCBwYWdlSWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3BhZ2VzLyR7cGFnZUlkfWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBQZXJzaXN0IHRoZSB0YWIgb3JkZXIgYWZ0ZXIgYSBkcmFnIOKAlCB0aGUgd2hvbGUgbGlzdCwgaW4gaXRzIG5ldyBvcmRlciwgc29cbiAgLy8gdGhlIHNlcXVlbmNlIHN0YXlzIGdhcGxlc3Mgd2l0aG91dCB0aGUgc2VydmVyIGluZmVycmluZyB0aGUgbW92ZS5cbiAgcHVibGljIHNhdmVQYWdlUG9zaXRpb25zKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgcG9zaXRpb25zOiB7IHBhZ2VJZDogbnVtYmVyOyBvcmRlcjogbnVtYmVyIH1bXSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlcy9wb3NpdGlvbnNgKSxcbiAgICAgIHsgcG9zaXRpb25zIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQ29tcG9uZW50IHNldHRpbmdzOiBhbnkgc3Vic2V0IG9mIHsgdGl0bGUsIHBhZGRpbmcgfSDigJQgdGhlIGh1bWFuLWZhY2luZ1xuICAvLyBkaWFsb2cgZWRpdHMg4oCUIG9yIGEgdGV4dCBibG9jaydzIHsgaHRtbCB9IGZyb20gaXRzIGlubGluZSBlZGl0b3I7IGdlb21ldHJ5XG4gIC8vICh4L3kvdy9oKSBpcyBwZXJzaXN0ZWQgdmlhIHNhdmVQb3NpdGlvbnMgZnJvbSB0aGUgY2FudmFzIGluc3RlYWQuXG4gIHB1YmxpYyB1cGRhdGVDb21wb25lbnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L3NldHRpbmdzYCksXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGxhY2UgYSB0ZXh0IGJsb2NrIOKAlCBvbiBhIHBhZ2UsIG9yIGluIHRoZSBoZWFkZXIvZm9vdGVyIHdoZW4gcGFnZUlkIGlzXG4gIC8vIG9taXR0ZWQuIFRoZSBvbmx5IGNvbXBvbmVudCB0aGUgVUkgY3JlYXRlcyBpdHNlbGY6IGNoYXJ0cywgbGlzdHMgYW5kIEtQSXNcbiAgLy8gbmVlZCBhIHF1ZXJ5IGFuZCBjb21lIGZyb20gdGhlIGNoYXQuIFJlc29sdmVzIHRvIHsgaWQgfS5cbiAgcHVibGljIGFkZFRleHQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICB0ZXh0OiB7IHBhZ2VJZD86IG51bWJlcjsgaHRtbD86IHN0cmluZzsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHNgKSxcbiAgICAgIHRleHQsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIERlbGV0ZSBvbmUgY29tcG9uZW50IGZyb20gdGhlIGNhbnZhcywgdG9nZXRoZXIgd2l0aCBpdHMgZmlsdGVycyBhbmQgYW55XG4gIC8vIGZpbHRlciBncm91cCB0aGV5IGxlYXZlIGVtcHR5LiBTb2Z0IHNlcnZlci1zaWRlLCBidXQgdGhlcmUgaXMgbm8gcmVzdG9yZVxuICAvLyBhbnl3aGVyZSBpbiB0aGUgVUksIHNvIHRoZSBkaWFsb2cncyBjb25maXJtIHByZXNlbnRzIGl0IGFzIHBlcm1hbmVudC5cbiAgcHVibGljIGRlbGV0ZUNvbXBvbmVudChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZGVsZXRlKFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNvZnQtZGVsZXRlOiB0aGUgcmVwb3J0IGxlYXZlcyB0aGUgbGlzdGluZyBidXQga2VlcHMgaXRzIHBhZ2VzIGFuZFxuICAvLyBjb21wb25lbnRzLCBzbyB1bmRlbGV0ZSgpIGJyaW5ncyBiYWNrIHRoZSBzYW1lIGRvY3VtZW50LlxuICBwdWJsaWMgZGVsZXRlKHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlc3RvcmUgYSBzb2Z0LWRlbGV0ZWQgcmVwb3J0IHRocm91Z2ggaXRzIG93biBhY3Rpb24gZW5kcG9pbnQg4oCUIHRoZSByZXBvcnRcbiAgLy8gUFVUIGRvZXMgbm90IGFjY2VwdCBgc3RhdGVgLiBJdHMgZm9sZGVyIGlzIHJlc3RvcmVkIHRvbyB3aGVuIGl0IGlzIGRlbGV0ZWQsXG4gIC8vIG9yIGluc2lkZSBvbmUgdGhhdCBpcywgc28gdGhlIHJlcG9ydCBsYW5kcyBiYWNrIHdoZXJlIGl0IHdhcy5cbiAgcHVibGljIHVuZGVsZXRlKHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vdW5kZWxldGVgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgYXNzZW1ibGVkIHN0cnVjdHVyZTogcGFnZXMg4oaSIGNvbXBvbmVudHMgKCsgdGhlaXIgZmlsdGVycykgYW5kIHRoZVxuICAvLyByZXBvcnQncyBmaWx0ZXIgZ3JvdXBzLiBgZmVhdHVyZXNgIG5hbWVzIHdoYXQgdGhpcyB2aWV3ZXIgaW1wbGVtZW50c1xuICAvLyAoVklFV0VSX0ZFQVRVUkVTKSwgc28gdGhlIHNlcnZlciBzZW5kcyBldmVyeSBncm91cCBpbiBhIHNoYXBlIHRoZSB2aWV3ZXJcbiAgLy8gY2FuIHNob3cgYW5kIGNsZWFyLlxuICBwdWJsaWMgZ2V0KHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAgeyBmZWF0dXJlczogVklFV0VSX0ZFQVRVUkVTLmpvaW4oJywnKSB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBQZXJzaXN0IGdlb21ldHJ5IGZvciB0aGUgbW92ZWQgY29tcG9uZW50cyBvbmx5IOKAlCBhbnkgc3Vic2V0IG9mXG4gIC8vIHsgeCwgeSwgdywgaCB9IChpbmNoZXMpLlxuICBwdWJsaWMgc2F2ZVBvc2l0aW9ucyhcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBvc2l0aW9uczogKHsgY29tcG9uZW50SWQ6IG51bWJlciB9ICYgUGFydGlhbDx7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3OiBudW1iZXI7IGg6IG51bWJlciB9PilbXSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzL3Bvc2l0aW9uc2ApLFxuICAgICAgeyBwb3NpdGlvbnMgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBPbmUgY29tcG9uZW50J3MgZGF0YS4gVGhlIGJvZHkgY2FycmllcyBldmVyeXRoaW5nIHNlc3Npb24tc2NvcGVkOiB0aGVcbiAgLy8gcmVzb2x2ZWQgZmlsdGVyIHZhbHVlcyBhbmQgdGhlIGNvbXBvbmVudCdzIG93biBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgLy9cbiAgLy8gYGlzRXhwb3J0YCBtYXJrcyB0aGUgcmVhZCBhcyBwYXJ0IG9mIGEgUERGL1Bvd2VyUG9pbnQgcmVuZGVyLiBUaGUgc2VydmVyXG4gIC8vIGdpdmVzIHRob3NlIGEgbG9uZ2VyIHBlci1zdGF0ZW1lbnQgY2VpbGluZyB0aGFuIGFuIG9uLXNjcmVlbiB0aWxlLCBiZWNhdXNlXG4gIC8vIGEgcmVhZGVyIHdhdGNoaW5nIGFuIGV4cG9ydCBwcm9ncmVzcyBiYXIgY2FuIHdhaXQgZm9yIGEgcXVlcnkgbm9ib2R5IHdvdWxkXG4gIC8vIHRvbGVyYXRlIHdhaXRpbmcgZm9yIG9uIGEgZGFzaGJvYXJkLlxuICBwdWJsaWMgY29tcG9uZW50RGF0YShcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdID0gW10sXG4gICAgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSA9IHt9LFxuICAgIGlzRXhwb3J0ID0gZmFsc2UsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZGF0YWApLFxuICAgICAgeyBmaWx0ZXJzLCBzdGF0ZSwgZXhwb3J0OiBpc0V4cG9ydCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdkYXRhJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gT25lIGdyaWQgdGlsZSdzIHJlYWQgKFJlcG9ydEdyaWRTb3VyY2UpOiB0aGUgc2FtZSByb3V0ZSBhcyBjb21wb25lbnREYXRhLFxuICAvLyBpdHMgYm9keSdzIGBncmlkYCB0aGUgZ3JpZCdzIHJlcXVlc3QuIFRoZSBhbnN3ZXIgc3RyZWFtcyBhc1xuICAvLyBuZXdsaW5lLWRlbGltaXRlZCBKU09OLCBvbmUgZXZlbnQgcGVyIGxpbmU6IHtyZXBvcnR9IGZpcnN0LCB0aGVuXG4gIC8vIHtncmlkOiBwYXJ0fSBmb3IgZWFjaCBwYXJ0IG9mIHRoZSByZWFkLCBhIGhlYXJ0YmVhdCB7YXR9IGJldHdlZW5cbiAgLy8gc3RhdGVtZW50cywgYW5kIHRoZSBlbnZlbG9wZSB3aXRoIHRoZSByZWFkJ3Mgc3VtbWFyeSBsYXN0LiBUaGUgYm9keSdzXG4gIC8vIGZpbHRlcnMgYW5kIHN0YXRlIG5hcnJvdyB0aGUgcm93cyBhcyB0aGV5IG5hcnJvdyBhbnkgdGlsZSdzOyB0aGUgZ3JpZCdzXG4gIC8vIG93biBjb2x1bW4gZmlsdGVycyB0cmF2ZWwgaW5zaWRlIGdyaWQubGF5b3V0LiBgaXNFeHBvcnRgIGlzXG4gIC8vIGNvbXBvbmVudERhdGEncy5cbiAgcHVibGljIGNvbXBvbmVudEdyaWQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSxcbiAgICBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlLFxuICAgIGdyaWQ6IEdyaWRSZXF1ZXN0LFxuICAgIGlzRXhwb3J0ID0gZmFsc2UsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8U3RyZWFtRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnN0cmVhbShcbiAgICAgIFJlcXVlc3RNZXRob2QuUG9zdCxcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZGF0YWApLFxuICAgICAgeyBmaWx0ZXJzLCBzdGF0ZSwgZXhwb3J0OiBpc0V4cG9ydCwgZ3JpZCB9LFxuICAgICAgY29uZmlnLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgbnVtYmVycyBvZiBhIHBhZ2UncyB2YWx1ZXMg4oCUIG9yIHRoZSBtYXN0ZXIncywgZm9yIHRoZSBoZWFkZXIgYW5kXG4gIC8vIGZvb3RlciDigJQgaW4gb25lIHJlcXVlc3Q6IGEgcm93IHBlciB2YWx1ZSB0aGF0IHBhZ2UgcmVhZHMsIHNob3duIGJ5IHNvbWVcbiAgLy8gdGV4dCBvciByZWFkIGJ5IGEgZm9ybXVsYSBpdCBzaG93cyAoUmVwb3J0UGFnZVZhbHVlKS4gYGZpbHRlcnNgIGNhcnJpZXNcbiAgLy8gdGhlIHJlc29sdmVkIHZhbHVlcyBmb3IgZXZlcnkgdmFsdWUgb2YgdGhlIGxheWVyIHRvZ2V0aGVyOyBlYWNoIHZhbHVlIHRoZVxuICAvLyBzZXJ2ZXIgcmVhZHMgcGlja3Mgb3V0IGl0cyBvd24uIGBpc0V4cG9ydGAgaXMgY29tcG9uZW50RGF0YSdzLlxuICAvL1xuICAvLyBUaGUgc2VydmVyIHJlYWRzIG9uZSBzdGF0ZW1lbnQgcGVyIGRpc3RpbmN0IHF1ZXJ5ICh2YWx1ZXMgc2hhcmluZyBhXG4gIC8vIHF1ZXJ5IGFuZCBpdHMgZmlsdGVycyBhcmUgZm9sZGVkIGludG8gb25lOyBhIGZvcm11bGEgcnVucyBub25lKSBhbmQgbWF5XG4gIC8vIHN0cmVhbSBhIGtlZXBBbGl2ZSBwdWxzZSBiZWZvcmUgZWFjaCwgc28gYSBzbG93IHBhZ2UgbmV2ZXIgc2l0cyBzaWxlbnRcbiAgLy8gdW50aWwgdGhlIGNvbm5lY3Rpb24gZHJvcHMuIFRoZSBib2R5IHN0YXlzIG9uZSBKU09OIHdpdGggdGhlIHJvd3MgYXQgZGF0YS52YWx1ZXMsXG4gIC8vIHdoaWNoIEZzQXBpIHJlYWRzIHdpdGggdGhlICd2YWx1ZXMnIGtleSwgYXMgZXhwb3J0Q29tcG9uZW50J3Mgc3RyZWFtZWRcbiAgLy8gcmVzcG9uc2UgaXMgcmVhZC5cbiAgLy9cbiAgLy8gYG1hdGNoQW55R3JvdXBJZHNgIGlzIGEgdGlsZSdzIChDb21wb25lbnREYXRhU3RhdGUpOiB3aGlsZSB0aGUgZ3JvdXBzXG4gIC8vIG1hdGNoICdhbnknLCB0aGUgZ3JvdXBzIHRoYXQgY29tYmluZSAodmFsdWVzTWF0Y2hBbnlHcm91cElkcykuIFNlbnQgb25seVxuICAvLyB3aGVuIGl0IGxpc3RzIGFueTsgdGhlIHNlcnZlciBjaGVja3MgZWFjaCB2YWx1ZSBhZ2FpbnN0IGl0IGFzIGl0IGNoZWNrc1xuICAvLyBhIHRpbGUuXG4gIHB1YmxpYyBwYWdlVmFsdWVzKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgcGFnZUlkOiBudW1iZXIsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdID0gW10sXG4gICAgaXNFeHBvcnQgPSBmYWxzZSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgICBtYXRjaEFueUdyb3VwSWRzOiBudW1iZXJbXSA9IFtdLFxuICApOiBPYnNlcnZhYmxlPFJlcG9ydFBhZ2VWYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vcGFnZXMvJHtwYWdlSWR9L3ZhbHVlc2ApLFxuICAgICAgeyBmaWx0ZXJzLCBleHBvcnQ6IGlzRXhwb3J0LCAuLi4obWF0Y2hBbnlHcm91cElkcy5sZW5ndGggPyB7IG1hdGNoQW55R3JvdXBJZHMgfSA6IHt9KSB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd2YWx1ZXMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBvcnRzIG9uZSBjb21wb25lbnQgdG8gQ1NWIHNlcnZlci1zaWRlOiB0aGUgZmlsZSBpcyB3aGF0IHRoZSBzY3JlZW5cbiAgLy8gc2hvd3MgKGEgY2hhcnQgb3IgS1BJIGFzIHJlbmRlcmVkLCBhIGxpc3QgaW4gZnVsbCBpbiB0aGUgc2NyZWVuJ3Mgb3JkZXIpLlxuICAvLyBUaGUgYmFja2VuZCBzdHJlYW1zIHBlcmNlbnRhZ2UgcHJvZ3Jlc3Mgd2hpbGUgaXQgd3JpdGVzLlxuICAvL1xuICAvLyBrZXk6IG51bGwgb24gcHVycG9zZSwgdW5saWtlIHRoZSBrZXk6ICd1cmwnIHByZXNpZ25lZC1leHBvcnQgcGF0dGVybjogdGhlXG4gIC8vIHJlc3BvbnNlIGFsc28gY2FycmllcyBgbm90ZXNgLCB0aGUgc2VudGVuY2VzIHNheWluZyBob3cgdGhlIGZpbGUgZmFsbHNcbiAgLy8gc2hvcnQgb2YgdGhlIGZ1bGwgcmVzdWx0LCBhbmQgdGhlIGNhbGxlciBoYXMgdG8gc2hvdyB0aGVtIGJlZm9yZSBpdCBoYW5kc1xuICAvLyB0aGUgdXJsIHRvIEZzUHJvY2Vzcy5kb3dubG9hZC4gYHRpdGxlYCBpcyB0aGUgY29tcG9uZW50J3MgdGl0bGUgYXMgdGhlXG4gIC8vIHZpZXdlciByZWFkcyBpdCwgaXRzIHRva2VucyBmaWxsZWQgKCdTaWduLXVwcyDigJQgU2VwdGVtYmVyIDIwMjYnKSwgd2hpY2hcbiAgLy8gdGhlIHNlcnZlciBuYW1lcyB0aGUgZmlsZSBhZnRlci4gYGZvcm1hdGAgJ3hsc3gnIGFza3MgZm9yIGFuIEV4Y2VsIGZpbGVcbiAgLy8gKFJlcG9ydEV4cG9ydEZvcm1hdCk7IGFuIG9sZGVyIHNlcnZlciBpZ25vcmVzIGl0IGFuZCBzZW5kcyB0aGUgQ1NWLlxuICBwdWJsaWMgZXhwb3J0Q29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXSxcbiAgICBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge30sXG4gICAgdGl0bGUgPSAnJyxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgICBmb3JtYXQ6IFJlcG9ydEV4cG9ydEZvcm1hdCA9ICdjc3YnLFxuICApOiBPYnNlcnZhYmxlPENvbXBvbmVudEV4cG9ydFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9leHBvcnRgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUsIHRpdGxlLCAuLi4oZm9ybWF0ICE9PSAnY3N2JyA/IHsgZm9ybWF0IH0gOiB7fSkgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBvcnRzIEVWRVJZIGNvbXBvbmVudCBvbiB0aGUgcmVwb3J0IOKAlCBvciBvbiBvbmUgcGFnZSDigJQgc2VydmVyLXNpZGUgYW5kXG4gIC8vIHJlc29sdmVzIHRvIGEgcHJlc2lnbmVkIFVSTCBmb3IgYSB6aXAgb2Ygb25lIENTViBwZXIgY29tcG9uZW50LCBmb2xkZXJlZCBieVxuICAvLyBwYWdlLCBwbHVzIGFuICdFeHBvcnQgTm90ZXMudHh0Jy4gYGZpbHRlcnNgIGNhcnJpZXMgdGhlIHJlc29sdmVkIHZhbHVlcyBmb3JcbiAgLy8gZXZlcnkgY29tcG9uZW50IHRvZ2V0aGVyOyBlYWNoIG9uZSBwaWNrcyBvdXQgaXRzIG93bi4gYGZyZXF1ZW5jeWAgaXMgdGhlXG4gIC8vIHJlcG9ydCdzIGdyb3VwLWJ5IGdyYWluICh0aGUgc2VydmVyIHJlLWJ1Y2tldHMgb25seSB0aGUgdGlsZXMgdGhhdCBmb2xsb3dcbiAgLy8gaXQ6IHRpbWUtc2VyaWVzIGNoYXJ0cyBhbmQgdGFibGVzIG92ZXIgYSB0aW1lIGF4aXMpLCBhbmQgYGZpbHRlckxpbmVzYCBpcyB0aGUgZmlsdGVyIGJhciBhcyB0aGUgdmlld2VyIHJlYWRzIGl0XG4gIC8vIChleHBvcnRMaW5lcyksIHdoaWNoIHRoZSBub3RlcyBmaWxlIHdyaXRlcy4gVGhlaXIgdGV4dCBnb2VzIGFzXG4gIC8vIGZpbHRlclN1bW1hcnkgdG9vLCBmb3IgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCByZWFkIGZpbHRlckxpbmVzOyB0aGVcbiAgLy8gbGluZXMgYXJlIGxlZnQgb3V0IHdoZW4gdGhlcmUgYXJlIG5vbmUuIGBzdGF0ZXNgIGlzIGVhY2ggdGlsZSdzIG93blxuICAvLyBzdGF0ZSBieSBjb21wb25lbnQgaWQgKHppcEV4cG9ydFN0YXRlcyksIHNvIGVhY2ggZmlsZSBob2xkcyB3aGF0IGl0c1xuICAvLyB0aWxlIHNob3dzOyBpdCBpcyBsZWZ0IG91dCB3aGVuIG5vIHRpbGUgaGFzIGFueS4gYHRpdGxlc2AgaG9sZHMgZWFjaCBjb21wb25lbnQncyB0aXRsZSBhcyB0aGUgdmlld2VyIHJlYWRzIGl0LCBpdHMgdG9rZW5zXG4gIC8vIGZpbGxlZCwgYnkgY29tcG9uZW50IGlkLCB3aGljaCB0aGUgc2VydmVyIG5hbWVzIHRoZSBjb21wb25lbnQncyBmaWxlXG4gIC8vIGFmdGVyOyBsZWZ0IG91dCB3aGVuIHRoZXJlIGFyZSBub25lLiBgZm9ybWF0YCAneGxzeCcgYXNrcyBmb3Igb25lIEV4Y2VsXG4gIC8vIHdvcmtib29rIGluc3RlYWQgb2YgdGhlIHppcDogYSBOb3RlcyBzaGVldCwgdGhlbiBhIHNoZWV0IHBlciB0aWxlLiBTYW1lXG4gIC8vIGtlZXAtYWxpdmUgY29udHJhY3QgYXMgZXhwb3J0Q29tcG9uZW50LCBvdmVyIGEgbG9uZ2VyIHJ1bjsgY29uc3VtZVxuICAvLyB0aHJvdWdoIEZzUHJvY2Vzcy5kb3dubG9hZC5cbiAgcHVibGljIGV4cG9ydFJlcG9ydChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCA9IG51bGwsXG4gICAgZnJlcXVlbmN5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCA9IG51bGwsXG4gICAgZmlsdGVyTGluZXM6IFJlcG9ydEV4cG9ydExpbmVbXSA9IFtdLFxuICAgIHN0YXRlczogUmVjb3JkPG51bWJlciwgQ29tcG9uZW50RGF0YVN0YXRlPiA9IHt9LFxuICAgIHRpdGxlczogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHt9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICAgIGZvcm1hdDogUmVwb3J0RXhwb3J0Rm9ybWF0ID0gJ2NzdicsXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2V4cG9ydGApLFxuICAgICAge1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAuLi4ocGFnZUlkID8geyBwYWdlSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZyZXF1ZW5jeSA/IHsgZnJlcXVlbmN5IH0gOiB7fSksXG4gICAgICAgIGZpbHRlclN1bW1hcnk6IGZpbHRlckxpbmVzLm1hcCgobGluZSkgPT4gbGluZS50ZXh0KSxcbiAgICAgICAgLi4uKGZpbHRlckxpbmVzLmxlbmd0aCA/IHsgZmlsdGVyTGluZXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKE9iamVjdC5rZXlzKHN0YXRlcykubGVuZ3RoID8geyBzdGF0ZXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKE9iamVjdC5rZXlzKHRpdGxlcykubGVuZ3RoID8geyB0aXRsZXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZvcm1hdCAhPT0gJ2NzdicgPyB7IGZvcm1hdCB9IDoge30pLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAndXJsJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRGlzdGluY3Qgb3B0aW9ucyBmb3IgYSBzZWxlY3QgZmlsdGVyIChkcml2ZXMgbXVsdGlzZWxlY3QgY29udHJvbHMpLlxuICBwdWJsaWMgZmlsdGVyT3B0aW9ucyhyZXBvcnRJZDogbnVtYmVyLCBmaWx0ZXJJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZmlsdGVycy8ke2ZpbHRlcklkfS9vcHRpb25zYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBzdGF0ZW1lbnQgYSBjb21wb25lbnQgcnVucywgZm9yIHRoZSBTUUwgdGFiLlxuICAvL1xuICAvLyBGZXRjaGVkIHJhdGhlciB0aGFuIHJlYWQgb2ZmIHRoZSBjb21wb25lbnQsIGJlY2F1c2UgYSBERVJJVkVEIGNvbXBvbmVudCBoYXNcbiAgLy8gbm8gc3RvcmVkIFNRTCDigJQgaXQgc3RvcmVzIGEgZG9jdW1lbnQsIGFuZCBpdHMgc3RhdGVtZW50IG9ubHkgZXhpc3RzIG9uY2VcbiAgLy8gdGhlIGJhY2tlbmQgY29tcGlsZXMgdGhhdCBkb2N1bWVudC4gQ29tcGlsZWQgcGVyIHJlcXVlc3QsIGZvciB0aGUgb25lXG4gIC8vIGNvbXBvbmVudCBiZWluZyBsb29rZWQgYXQsIHNvIG9wZW5pbmcgYSByZXBvcnQgbmV2ZXIgcGF5cyBmb3IgaXQuXG4gIC8vXG4gIC8vIGBrZXk6IG51bGxgIGJlY2F1c2UgdGhlIHdob2xlIGVudmVsb3BlIGlzIHRoZSBhbnN3ZXIgaGVyZTogYSBzdGFsZSBkb2N1bWVudFxuICAvLyBjb21lcyBiYWNrIGFzIHsgc3FsOiBudWxsLCBlcnJvciwgZXJyb3JUeXBlIH0gYW5kIHVud3JhcHBpbmcgb25lIGZpZWxkXG4gIC8vIHdvdWxkIHRocm93IHRoZSBkaWFnbm9zaXMgYXdheS5cbiAgcHVibGljIGNvbXBvbmVudFNxbChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0Q29tcG9uZW50U3FsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L3NxbGApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGNvbXBvbmVudCBTUUwncyBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW5zIOKAlCBkcml2ZXMgdGhlIGNvbHVtbiBwaWNrZXJcbiAgLy8gaW4gdGhlIGZpbHRlciBVSSBzbyBhIGNvbHVtbiBuYW1lIGlzIG5ldmVyIHR5cGVkIGJ5IGhhbmQuXG4gIHB1YmxpYyBjb21wb25lbnRDb2x1bW5zKHJlcG9ydElkOiBudW1iZXIsIGNvbXBvbmVudElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2NvbHVtbnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb2x1bW5zJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gTWFrZSBvbmUgY29sdW1uIGZpbHRlcmFibGUuIGBsZXZlbGAgKGNvbXBvbmVudCB8IHJlcG9ydCkgcGxhY2VzIGEgbmV3XG4gIC8vIGdyb3VwOyBgZ3JvdXBJZGAgaW5zdGVhZCBsaW5rcyBpbnRvIGFuIGV4aXN0aW5nIGdyb3VwLiBBIHNlbGVjdCBmaWx0ZXInc1xuICAvLyBvcHRpb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudCBTUUwgd2hlbiBvcHRpb25zU3FsIGlzIG9taXR0ZWQuXG4gIHB1YmxpYyBhZGRGaWx0ZXIoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcjogeyBmaWx0ZXJDb2x1bW46IHN0cmluZzsgdHlwZT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGxldmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBncm91cElkPzogbnVtYmVyIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZmlsdGVyc2ApLFxuICAgICAgZmlsdGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGUgYSBmaWx0ZXIg4oCUIGFueSBzdWJzZXQgb2YgeyBsYWJlbCwgb3B0aW9uc1NxbCwgZW5hYmxlZCB9LlxuICBwdWJsaWMgdXBkYXRlRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZmlsdGVySWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiB7IGxhYmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBlbmFibGVkPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH1gKSxcbiAgICAgIGNoYW5nZXMsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhIGZpbHRlciAoaXRzIGdyb3VwIGdvZXMgdG9vIHdoZW4gbm90aGluZyBlbHNlIHVzZXMgaXQpLlxuICBwdWJsaWMgZGVsZXRlRmlsdGVyKHJlcG9ydElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJzLyR7ZmlsdGVySWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQgKG9wZXJhdG9yLWF1dGhvcmVkIGFnZW50IGluc3RydWN0aW9ucylcbiAgLy8gYW5kIGl0cyBmdWxsIHZlcnNpb24gaGlzdG9yeTogeyBpbnN0cnVjdGlvbnMsIHZlcnNpb25zIH0uXG4gIHB1YmxpYyBpbnN0cnVjdGlvbnMoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoJ2luc3RydWN0aW9ucycpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU2F2ZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCAoYXBwZW5kLW9ubHk7IGFuIHVuY2hhbmdlZCBzYXZlIGlzIGFcbiAgLy8gbm8tb3Agc2VydmVyLXNpZGUpLiBSZXNvbHZlcyB0byB0aGUgc2FtZSB7IGluc3RydWN0aW9ucywgdmVyc2lvbnMgfSBzaGFwZS5cbiAgcHVibGljIHNhdmVJbnN0cnVjdGlvbnMoY29udGVudDogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aCgnaW5zdHJ1Y3Rpb25zJyksXG4gICAgICB7IGNvbnRlbnQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBNYWtlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQgY3VycmVudCAobm8gbmV3IHJvdyBpcyBjcmVhdGVkKS5cbiAgcHVibGljIHJlc3RvcmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgaW5zdHJ1Y3Rpb25zLyR7aW5zdHJ1Y3Rpb25JZH0vcmVzdG9yZWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUnVuIGEgc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQsIHN0cmVhbWVkOiBlbWl0cyBhbiBldmVudCBwZXIgTkRKU09OIGZyYW1lXG4gIC8vICh7IGtpbmQ6ICdsb2cnLCBsaW5lLCBwZXJjZW50IH0gZmVlZCBsaW5lcyBhbmQgeyBraW5kOiAnc2VjdGlvbicgfSBwaGFzZVxuICAvLyBtYXJrZXJzKSBhbmQgY29tcGxldGVzIHdoZW4gdGhlIGJ1aWxkIGVuZHMuIEZlZWQgdGhlIGxpbmVzIGludG8gRnNQcm9jZXNzLlxuICBwdWJsaWMgc2VtYW50aWNCdWlsZChjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5zdHJlYW0oXG4gICAgICAnUE9TVCcsXG4gICAgICB0aGlzLl9wYXRoKCdzZW1hbnRpYy9idWlsZCcpLFxuICAgICAgeyBzdHJlYW06IHRydWUgfSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICB9XG5cbiAgLy8gTGF0ZXN0IGJ1aWxkIHN0YXR1cyArIGVudGl0eSBzY29yZWJvYXJkOiB7IGJ1aWxkLCBkZXRhaWwgfS5cbiAgcHVibGljIHNlbWFudGljQnVpbGRTdGF0dXMoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoJ3NlbWFudGljL2J1aWxkJyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTdG9wIHRoZSBydW5uaW5nIGJ1aWxkICh0aGUgY3VycmVudCBzZW1hbnRpYyBkYXRhYmFzZSBzdGF5cyBpbiBwbGFjZSkuXG4gIHB1YmxpYyBzZW1hbnRpY0J1aWxkU3RvcChjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoJ3NlbWFudGljL2J1aWxkL3N0b3AnKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdidWlsZCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIE9uZSBlbnRpdHkncyBjYWNoZWQgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9ucyDigJQgbG9hZGVkIG9uIGV4cGFuZCwgb25lXG4gIC8vIGVudGl0eSBhdCBhIHRpbWUsIGJlY2F1c2UgdGhlIGZ1bGwgc2V0IGFjcm9zcyBhbGwgZW50aXRpZXMgaXMgZmFyIHRvbyBiaWdcbiAgLy8gdG8gc2hpcCBpbnNpZGUgdGhlIHNjb3JlYm9hcmQgY2FsbC5cbiAgcHVibGljIHNlbWFudGljRW50aXR5RnVuY3Rpb25zKGVudGl0eTogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgc2VtYW50aWMvZW50aXRpZXMvJHtlbnRpdHl9L2Z1bmN0aW9uc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2VudGl0eUZ1bmN0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQgbW9kdWxlJ3MgR2VuZXJhbCBzZXR0aW5ncyAoc2VtYW50aWMtYnVpbGQgY29uY3VycmVuY3kgKyBpdHMgYm91bmRzKS5cbiAgcHVibGljIHNldHRpbmdzKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdzZXR0aW5ncycpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NldHRpbmdzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGxvY2FsZXMgYW5kIGN1cnJlbmNpZXMgYSByZXBvcnQgY2FuIGJlIHdyaXR0ZW4gaW4sIGZvciB0aGUgcmVwb3J0XG4gIC8vIHNldHRpbmdzJyBMb2NhbGUgYW5kIEN1cnJlbmN5IHNlbGVjdHM6IHRoZSBkZWZhdWx0IGxvY2FsZSwgZWFjaCBvZmZlcmVkXG4gIC8vIGxvY2FsZSB3aXRoIHRoZSBjdXJyZW5jeSBhIHJlcG9ydCBpbiBpdCB1c2VzIHdoZW4gaXQgbmFtZXMgbm9uZSwgYW5kIGV2ZXJ5XG4gIC8vIGN1cnJlbmN5IGNvZGUuIE9ubHkgYSBzZXJ2ZXIgdGhhdCBzZW5kcyBlZmZlY3RpdmVMb2NhbGUgaGFzIHRoaXMgcm91dGUuXG4gIHB1YmxpYyBsb2NhbGVzKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxSZXBvcnRMb2NhbGVzPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdsb2NhbGVzJyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnbG9jYWxlcycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNhdmUgdGhlIEdlbmVyYWwgc2V0dGluZ3M7IHJlc29sdmVzIHRvIHRoZSBzYW1lIHsgc2V0dGluZ3MgfSBzaGFwZS5cbiAgcHVibGljIHNhdmVTZXR0aW5ncyhzZXR0aW5nczogeyBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlciB9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aCgnc2V0dGluZ3MnKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzZXR0aW5ncycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBhIGZpbHRlciBncm91cCDigJQgaXRzIGV4cG9zdXJlIGxldmVsICgnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnKSxcbiAgLy8gaXRzIG5hbWUgKGFuIGlkZW50aWZpZXIsIHVuaXF1ZSBpbiB0aGUgcmVwb3J0OyB0aGUgc2VydmVyIHJlZnVzZXMgb25lIHRoYXRcbiAgLy8gYnJlYWtzIHRoZSBydWxlLCB3aXRoIGEgbWVzc2FnZSBuYW1pbmcgdGhlIHByb2JsZW0pLCBpdHMgbGFiZWwgKG5ldmVyXG4gIC8vIGNoYW5nZXMgdGhlIG5hbWUpIGFuZC9vciBpdHMgZGVmYXVsdCB2YWx1ZSAodGhlIHZhbHVlIHNlZWRpbmcgdGhlIHJlcG9ydFxuICAvLyBiYXIgb24gb3BlbikuIFNlbmQgYGRlZmF1bHQ6IG51bGxgIChvciBhbiBlbXB0eSBkZWZhdWx0KSB0byBjbGVhciBpdC4gT25seVxuICAvLyB0aGUga2V5cyBwcm92aWRlZCBhcmUgY2hhbmdlZCwgaW4gdGhlIG9yZGVyIG5hbWUsIGxhYmVsLCBsZXZlbCwgZGVmYXVsdCxcbiAgLy8gc28gYSByZWZ1c2VkIG5hbWUgbGVhdmVzIHRoZSByZXN0IHVud3JpdHRlbi5cbiAgcHVibGljIHVwZGF0ZUZpbHRlckdyb3VwKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZ3JvdXBJZDogbnVtYmVyLFxuICAgIGNoYW5nZXM6IFJlcG9ydEZpbHRlckdyb3VwQ2hhbmdlcyxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJncm91cHMvJHtncm91cElkfWApLFxuICAgICAgY2hhbmdlcyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyR3JvdXAnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBIHNlbGVjdCBmaWx0ZXIncyBvcHRpb25zIG5hcnJvd2VkIGJ5IHRoZSBvdGhlciBlbnRyaWVzIG9mIGl0cyB0aWxlXG4gIC8vIChSZXBvcnRGaWx0ZXJPcHRpb25zUmVxdWVzdCksIHdpdGggdGhlIHBpY2tzIGl0IG5hbWVzIGxhYmVsZWQuIE9ubHkgZm9yXG4gIC8vIGEgcmVwb3J0IHdob3NlIHNlcnZlciBsaXN0cyBjYXNjYWRpbmdPcHRpb25zOyBhbnkgb3RoZXIgcmVhZHMgdGhlIGZ1bGxcbiAgLy8gbGlzdCB0aHJvdWdoIGZpbHRlck9wdGlvbnMoKS5cbiAgcHVibGljIGZpbHRlck9wdGlvbnNOYXJyb3dlZChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcklkOiBudW1iZXIsXG4gICAgYm9keTogUmVwb3J0RmlsdGVyT3B0aW9uc1JlcXVlc3QsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0RmlsdGVyT3B0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH0vb3B0aW9uc2ApLFxuICAgICAgYm9keSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQncyBzYXZlZCBmaWx0ZXJzLCBpbiB0aGVpciBvcmRlci4gU2hhcmVkIGJ5IGV2ZXJ5b25lIHdobyBtYXlcbiAgLy8gb3BlbiB0aGUgcmVwb3J0LlxuICBwdWJsaWMgc2F2ZWRGaWx0ZXJzKHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxSZXBvcnRTYXZlZEZpbHRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9zYXZlZGZpbHRlcnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBIG5ldyBzYXZlZCBmaWx0ZXI6IGl0cyBuYW1lIGFuZCB0aGUgcmVwb3J0LXdpZGUgZmlsdGVyIHZhbHVlcyBpdCBob2xkcy5cbiAgcHVibGljIGNyZWF0ZVNhdmVkRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgc2F2ZWRGaWx0ZXI6IFJlcXVpcmVkPFJlcG9ydFNhdmVkRmlsdGVyQ2hhbmdlcz4sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0U2F2ZWRGaWx0ZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9zYXZlZGZpbHRlcnNgKSxcbiAgICAgIHNhdmVkRmlsdGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbmFtZXMgYSBzYXZlZCBmaWx0ZXIgb3IgcmVwbGFjZXMgaXRzIHZhbHVlczsgb25seSB0aGUga2V5cyBnaXZlbiBjaGFuZ2UuXG4gIHB1YmxpYyB1cGRhdGVTYXZlZEZpbHRlcihcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHJlcG9ydFNhdmVkRmlsdGVySWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiBSZXBvcnRTYXZlZEZpbHRlckNoYW5nZXMsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0U2F2ZWRGaWx0ZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3NhdmVkZmlsdGVycy8ke3JlcG9ydFNhdmVkRmlsdGVySWR9YCksXG4gICAgICBjaGFuZ2VzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVTYXZlZEZpbHRlcihcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHJlcG9ydFNhdmVkRmlsdGVySWQ6IG51bWJlcixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxSZXBvcnRTYXZlZEZpbHRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZGVsZXRlKFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vc2F2ZWRmaWx0ZXJzLyR7cmVwb3J0U2F2ZWRGaWx0ZXJJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBlcnNpc3QgdGhlIHNhdmVkIGZpbHRlcnMnIG9yZGVyIGFmdGVyIGEgZHJhZzogZXZlcnkgaWQsIGluIGl0cyBuZXdcbiAgLy8gb3JkZXIuIFJlc29sdmVzIHRvIHRoZSBsaXN0IGluIHRoYXQgb3JkZXIuXG4gIHB1YmxpYyBzYXZlU2F2ZWRGaWx0ZXJQb3NpdGlvbnMoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICByZXBvcnRTYXZlZEZpbHRlcklkczogbnVtYmVyW10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0U2F2ZWRGaWx0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vc2F2ZWRmaWx0ZXJzL3Bvc2l0aW9uc2ApLFxuICAgICAgeyByZXBvcnRTYXZlZEZpbHRlcklkcyB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzYXZlZEZpbHRlcnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXQtdmlld2VyLXNob3ctcm93cy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtY2hhdC12aWV3ZXItc2hvdy1yb3dzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJvd3MgcGFuZWwgb3BlbiBvbiBzY3JlZW4sIGFzIHRoZSBjaGF0IHJlYWRzIGl0OiB0aGUgdGlsZSBpdCB3YXMgb3BlbmVkXG4vLyBmcm9tIGFuZCB0aGUgdmFsdWUgaXQgc2hvd3MgdGhlIHJvd3Mgb2YuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENoYXRWaWV3ZXJTaG93Um93cyB7XG4gIGNvbXBvbmVudElkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXQtdmlld2VyLXN0YXRlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1jaGF0LXZpZXdlci1zdGF0ZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydENoYXRWaWV3ZXJDcm9zc0ZpbHRlciB9IGZyb20gJy4vcmVwb3J0LWNoYXQtdmlld2VyLWNyb3NzLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlckRldGFpbCB9IGZyb20gJy4vcmVwb3J0LWNoYXQtdmlld2VyLWRldGFpbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlckRyaWxsIH0gZnJvbSAnLi9yZXBvcnQtY2hhdC12aWV3ZXItZHJpbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydENoYXRWaWV3ZXJGaWx0ZXIgfSBmcm9tICcuL3JlcG9ydC1jaGF0LXZpZXdlci1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydENoYXRWaWV3ZXJTZWxlY3Rpb24gfSBmcm9tICcuL3JlcG9ydC1jaGF0LXZpZXdlci1zZWxlY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydENoYXRWaWV3ZXJUaWxlIH0gZnJvbSAnLi9yZXBvcnQtY2hhdC12aWV3ZXItdGlsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyTWF0Y2ggfSBmcm9tICcuL3JlcG9ydC1maWx0ZXItbWF0Y2gudHlwZSc7XG5pbXBvcnQgeyBDaGFydEdyYW51bGFyaXR5IH0gZnJvbSAnLi9yZXBvcnQuaW50ZXJmYWNlJztcblxuXG4vLyBXaGF0IHRoZSB2aWV3ZXIgaGFzIG9uIHNjcmVlbiwgc2VudCBhcyBgdmlld2VyU3RhdGVgIHdpdGggZWFjaCByZXBvcnQgY2hhdFxuLy8gdHVybiBzbyB0aGUgYWdlbnQga25vd3Mgd2hhdCBcInRoaXMgY2hhcnRcIiBhbmQgXCJ0aGlzIHBlcmlvZFwiIG1lYW4uIFJlYWQgYXRcbi8vIHRoZSBtb21lbnQgdGhlIHR1cm4gaXMgc2VudDsgaXQgaXMgbmV2ZXIgc2F2ZWQgdG8gdGhlIHJlcG9ydC4gRXZlcnkgZmllbGRcbi8vIGFmdGVyIGBmaWx0ZXJzYCBpcyBvcHRpb25hbDogYSBrZXkgbGVmdCBvdXQgbWVhbnMgdGhlIHZpZXdlciBoYXMgbm90aGluZ1xuLy8gdGhlcmUsIGFuZCBhIHNlcnZlciB0aGF0IGRvZXMgbm90IGtub3cgYSBrZXkgaWdub3JlcyBpdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFZpZXdlclN0YXRlIHtcbiAgLy8gVGhlIGdyb3VwLWJ5IGNvbnRyb2wncyBncmFpbiwgb3IgbnVsbCB3aGVuIHRoZSB2aWV3ZXIgaGFzIG5vdCBwaWNrZWQgb25lLlxuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIC8vIFRoZSBjYW52YXMgc2VsZWN0aW9uLiBPbmx5IHNlbnQgd2hpbGUgZWRpdCBtb2RlIGlzIG9uLCBiZWNhdXNlIHRoZVxuICAvLyBzZWxlY3Rpb24gaXMgZHJhd24gb25seSB0aGVuLlxuICBzZWxlY3RlZENvbXBvbmVudElkOiBudW1iZXIgfCBudWxsO1xuICAvLyBPbmUgZW50cnkgcGVyIGZpbHRlciBncm91cCB3aXRoIGEgdmFsdWUsIGluIGdyb3VwIGlkIG9yZGVyLlxuICBmaWx0ZXJzOiBSZXBvcnRDaGF0Vmlld2VyRmlsdGVyW107XG4gIC8vICdhbnknIHdoaWxlIHRoZSBiYXIncyBncm91cHMgbWF0Y2ggYW55IGZpbHRlcjsgbGVmdCBvdXQgZm9yICdhbGwnLlxuICBtYXRjaD86IFJlcG9ydEZpbHRlck1hdGNoO1xuICAvLyBUaGUgY3Jvc3MtZmlsdGVyIG9uIHNjcmVlbiAoYXQgbW9zdCBvbmUpLlxuICBjcm9zc0ZpbHRlcnM/OiBSZXBvcnRDaGF0Vmlld2VyQ3Jvc3NGaWx0ZXJbXTtcbiAgLy8gRWFjaCBkcmlsbGVkIGNoYXJ0LCBpbiBjb21wb25lbnQgaWQgb3JkZXIuXG4gIGRyaWxscz86IFJlcG9ydENoYXRWaWV3ZXJEcmlsbFtdO1xuICAvLyBUaGUgcm93cyBwYW5lbCwgb3IgbnVsbCB3aGVuIGl0IGlzIGNsb3NlZC5cbiAgZGV0YWlsPzogUmVwb3J0Q2hhdFZpZXdlckRldGFpbCB8IG51bGw7XG4gIC8vIEV2ZXJ5IHRhYmxlIHRpbGUgb24gdGhlIGJvdW5kIHBhZ2UsIGluIHBhZ2Ugb3JkZXIsIGVhY2ggd2l0aCB0aGUgbGF5b3V0XG4gIC8vIHRoZSB2aWV3ZXIgaGFzIGl0IGluIHdoaWxlIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBzdG9yZWQgb25lLiBUaGUgYWdlbnRcbiAgLy8gcmVhZHMgb25seSBhIGxpc3RlZCB0YWJsZSBhcyBzaG93biwgc28gXCJtYWtlIHRoaXMgdGhlIGRlZmF1bHRcIiBzYXZlc1xuICAvLyB3aGF0IGlzIG9uIHNjcmVlbi5cbiAgdGlsZXM/OiBSZXBvcnRDaGF0Vmlld2VyVGlsZVtdO1xuICAvLyBSZXNlcnZlZCBmb3IgaW5saW5lIHZhbHVlczsgbmV2ZXIgc2V0IGJ5IHRoaXMgdmlld2VyLlxuICBzZWxlY3Rpb24/OiBSZXBvcnRDaGF0Vmlld2VyU2VsZWN0aW9uO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXQtdmlld2VyLXN0YXRlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1jaGF0LXZpZXdlci1zdGF0ZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydENoYXRWaWV3ZXJDcm9zc0ZpbHRlciB9IGZyb20gJy4vcmVwb3J0LWNoYXQtdmlld2VyLWNyb3NzLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlclNob3dSb3dzIH0gZnJvbSAnLi9yZXBvcnQtY2hhdC12aWV3ZXItc2hvdy1yb3dzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRDaGF0Vmlld2VyRHJpbGwgfSBmcm9tICcuL3JlcG9ydC1jaGF0LXZpZXdlci1kcmlsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlckZpbHRlciB9IGZyb20gJy4vcmVwb3J0LWNoYXQtdmlld2VyLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlclNlbGVjdGlvbiB9IGZyb20gJy4vcmVwb3J0LWNoYXQtdmlld2VyLXNlbGVjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlclRpbGUgfSBmcm9tICcuL3JlcG9ydC1jaGF0LXZpZXdlci10aWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJNYXRjaCB9IGZyb20gJy4vcmVwb3J0LWZpbHRlci1tYXRjaC50eXBlJztcbmltcG9ydCB7IENoYXJ0R3JhbnVsYXJpdHkgfSBmcm9tICcuL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbi8vIFdoYXQgdGhlIHZpZXdlciBoYXMgb24gc2NyZWVuLCBzZW50IGFzIGB2aWV3ZXJTdGF0ZWAgd2l0aCBlYWNoIHJlcG9ydCBjaGF0XG4vLyB0dXJuIHNvIHRoZSBhZ2VudCBrbm93cyB3aGF0IFwidGhpcyBjaGFydFwiIGFuZCBcInRoaXMgcGVyaW9kXCIgbWVhbi4gUmVhZCBhdFxuLy8gdGhlIG1vbWVudCB0aGUgdHVybiBpcyBzZW50OyBpdCBpcyBuZXZlciBzYXZlZCB0byB0aGUgcmVwb3J0LiBFdmVyeSBmaWVsZFxuLy8gYWZ0ZXIgYGZpbHRlcnNgIGlzIG9wdGlvbmFsOiBhIGtleSBsZWZ0IG91dCBtZWFucyB0aGUgdmlld2VyIGhhcyBub3RoaW5nXG4vLyB0aGVyZSwgYW5kIGEgc2VydmVyIHRoYXQgZG9lcyBub3Qga25vdyBhIGtleSBpZ25vcmVzIGl0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDaGF0Vmlld2VyU3RhdGUge1xuICAvLyBUaGUgZ3JvdXAtYnkgY29udHJvbCdzIGdyYWluLCBvciBudWxsIHdoZW4gdGhlIHZpZXdlciBoYXMgbm90IHBpY2tlZCBvbmUuXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgLy8gVGhlIGNhbnZhcyBzZWxlY3Rpb24uIE9ubHkgc2VudCB3aGlsZSBlZGl0IG1vZGUgaXMgb24sIGJlY2F1c2UgdGhlXG4gIC8vIHNlbGVjdGlvbiBpcyBkcmF3biBvbmx5IHRoZW4uXG4gIHNlbGVjdGVkQ29tcG9uZW50SWQ6IG51bWJlciB8IG51bGw7XG4gIC8vIE9uZSBlbnRyeSBwZXIgZmlsdGVyIGdyb3VwIHdpdGggYSB2YWx1ZSwgaW4gZ3JvdXAgaWQgb3JkZXIuXG4gIGZpbHRlcnM6IFJlcG9ydENoYXRWaWV3ZXJGaWx0ZXJbXTtcbiAgLy8gJ2FueScgd2hpbGUgdGhlIGJhcidzIGdyb3VwcyBtYXRjaCBhbnkgZmlsdGVyOyBsZWZ0IG91dCBmb3IgJ2FsbCcuXG4gIG1hdGNoPzogUmVwb3J0RmlsdGVyTWF0Y2g7XG4gIC8vIFRoZSBjcm9zcy1maWx0ZXIgb24gc2NyZWVuIChhdCBtb3N0IG9uZSkuXG4gIGNyb3NzRmlsdGVycz86IFJlcG9ydENoYXRWaWV3ZXJDcm9zc0ZpbHRlcltdO1xuICAvLyBFYWNoIGRyaWxsZWQgY2hhcnQsIGluIGNvbXBvbmVudCBpZCBvcmRlci5cbiAgZHJpbGxzPzogUmVwb3J0Q2hhdFZpZXdlckRyaWxsW107XG4gIC8vIFRoZSByb3dzIHBhbmVsLCBvciBudWxsIHdoZW4gaXQgaXMgY2xvc2VkLlxuICBzaG93Um93cz86IFJlcG9ydENoYXRWaWV3ZXJTaG93Um93cyB8IG51bGw7XG4gIC8vIEV2ZXJ5IHRhYmxlIHRpbGUgb24gdGhlIGJvdW5kIHBhZ2UsIGluIHBhZ2Ugb3JkZXIsIGVhY2ggd2l0aCB0aGUgbGF5b3V0XG4gIC8vIHRoZSB2aWV3ZXIgaGFzIGl0IGluIHdoaWxlIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBzdG9yZWQgb25lLiBUaGUgYWdlbnRcbiAgLy8gcmVhZHMgb25seSBhIGxpc3RlZCB0YWJsZSBhcyBzaG93biwgc28gXCJtYWtlIHRoaXMgdGhlIGRlZmF1bHRcIiBzYXZlc1xuICAvLyB3aGF0IGlzIG9uIHNjcmVlbi5cbiAgdGlsZXM/OiBSZXBvcnRDaGF0Vmlld2VyVGlsZVtdO1xuICAvLyBSZXNlcnZlZCBmb3IgaW5saW5lIHZhbHVlczsgbmV2ZXIgc2V0IGJ5IHRoaXMgdmlld2VyLlxuICBzZWxlY3Rpb24/OiBSZXBvcnRDaGF0Vmlld2VyU2VsZWN0aW9uO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1mb3JtYXQudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtZm9ybWF0LnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBmaWxlIGEgc2VydmVyIGV4cG9ydCB3cml0ZXM6ICdjc3YnLCBwbGFpbiB2YWx1ZXMgKGZvciBhIHdob2xlIHJlcG9ydCwgYVxuLy8gemlwIG9mIENTVnMpLCBvciAneGxzeCcsIGFuIEV4Y2VsIHdvcmtib29rIHdpdGggdHlwZWQsIGZvcm1hdHRlZCBudW1iZXJzIGFuZFxuLy8gYSB0YWJsZSBkcmF3biBhcyB0aGUgc2NyZWVuIGRyYXdzIGl0IChmb3IgYSB3aG9sZSByZXBvcnQsIG9uZSBzaGVldCBwZXIgdGlsZVxuLy8gYWZ0ZXIgYSBOb3RlcyBzaGVldCkuXG5leHBvcnQgdHlwZSBSZXBvcnRFeHBvcnRGb3JtYXQgPSAnY3N2JyB8ICd4bHN4JztcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LW1hcmstYWN0aW9uLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1hY3Rpb24udHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2hhdCBhIGNsaWNrIG9uIGEgbWFyayBjYW4gZG8gKEIxMC4yKTogZHJpbGwgZG93biBhIHRpbWUgYXhpcywgZmlsdGVyIHRoZVxuLy8gb3RoZXIgdGlsZXMgYnkgdGhlIG1hcmssIG9yIHNob3cgdGhlIHJvd3MgYmVoaW5kIGl0cyB2YWx1ZS4gRWFjaCBpcyBvZmZlcmVkXG4vLyBvbmx5IHdoaWxlIGl0cyBmZWF0dXJlIGlzLlxuZXhwb3J0IHR5cGUgUmVwb3J0TWFya0FjdGlvbiA9ICdkcmlsbCcgfCAnY3Jvc3NGaWx0ZXInIHwgJ2RldGFpbCc7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LW1hcmstYWN0aW9uLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1hY3Rpb24udHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2hhdCBhIGNsaWNrIG9uIGEgbWFyayBjYW4gZG8gKEIxMC4yKTogZHJpbGwgZG93biBhIHRpbWUgYXhpcywgZmlsdGVyIHRoZVxuLy8gb3RoZXIgdGlsZXMgYnkgdGhlIG1hcmssIG9yIHNob3cgdGhlIHJvd3MgYmVoaW5kIGl0cyB2YWx1ZS4gRWFjaCBpcyBvZmZlcmVkXG4vLyBvbmx5IHdoaWxlIGl0cyBmZWF0dXJlIGlzLlxuZXhwb3J0IHR5cGUgUmVwb3J0TWFya0FjdGlvbiA9ICdkcmlsbCcgfCAnY3Jvc3NGaWx0ZXInIHwgJ3Nob3dSb3dzJztcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXRlbXBvcmFyeS1zdGF0ZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtdGVtcG9yYXJ5LXN0YXRlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHZpZXdlcidzIHRlbXBvcmFyeSBzdGF0ZTogd2hhdCBpdCBwaWNrZWQgb24gYSB0aWxlIGZvciB0aGlzIHZpc2l0IG9ubHkuXG4vLyBEYXRhIHJlcXVlc3RzIGFuZCBleHBvcnRzIHJlYWQgaXQ7IHRoZSBzbmFwc2hvdCBhbmQgdGhlIHNjcmVlbidzXG4vLyBcImRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdHNcIiBjaGVjayBuZXZlciBkbyAoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLnNuYXBzaG90KCkgbGVhdmVzIGl0IG91dCkuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFRlbXBvcmFyeVN0YXRlIHtcbiAgLy8gVGhlIGNyb3NzLWZpbHRlciBlbnRyaWVzIGluIGZvcmNlICh0aGUgdmlld2VyIGtlZXBzIGF0IG1vc3Qgb25lKS5cbiAgY3Jvc3NGaWx0ZXJzOiB1bmtub3duW107XG4gIC8vIFRoZSB0aWxlIGFuZCB2YWx1ZSB3aG9zZSByb3dzIHBhbmVsIGlzIG9wZW4sIG9yIG51bGwuXG4gIGRldGFpbDogdW5rbm93bjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXRlbXBvcmFyeS1zdGF0ZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtdGVtcG9yYXJ5LXN0YXRlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHZpZXdlcidzIHRlbXBvcmFyeSBzdGF0ZTogd2hhdCBpdCBwaWNrZWQgb24gYSB0aWxlIGZvciB0aGlzIHZpc2l0IG9ubHkuXG4vLyBEYXRhIHJlcXVlc3RzIGFuZCBleHBvcnRzIHJlYWQgaXQ7IHRoZSBzbmFwc2hvdCBhbmQgdGhlIHNjcmVlbidzXG4vLyBcImRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdHNcIiBjaGVjayBuZXZlciBkbyAoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLnNuYXBzaG90KCkgbGVhdmVzIGl0IG91dCkuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFRlbXBvcmFyeVN0YXRlIHtcbiAgLy8gVGhlIGNyb3NzLWZpbHRlciBlbnRyaWVzIGluIGZvcmNlICh0aGUgdmlld2VyIGtlZXBzIGF0IG1vc3Qgb25lKS5cbiAgY3Jvc3NGaWx0ZXJzOiB1bmtub3duW107XG4gIC8vIFRoZSB0aWxlIGFuZCB2YWx1ZSB3aG9zZSByb3dzIHBhbmVsIGlzIG9wZW4sIG9yIG51bGwuXG4gIHNob3dSb3dzOiB1bmtub3duO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXZpZXdlci1mZWF0dXJlLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtdmlld2VyLWZlYXR1cmUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQSB2aWV3ZXIgY2FwYWJpbGl0eSB0aGUgc2VydmVyIGNhbiBzZXJ2ZSAoUmVwb3J0LnZpZXdlckZlYXR1cmVzKS4gVGhlXG4vLyB2aWV3ZXIgb2ZmZXJzIGEgY29udHJvbCBvbmx5IHdoZW4gdGhlIHJlcG9ydCBsaXN0cyBpdHMgZmVhdHVyZSwgYW5kIGl0XG4vLyBuYW1lcyB0aGUgZmVhdHVyZXMgaXQgaW1wbGVtZW50cyBvbiB0aGUgcmVwb3J0IEdFVCAoZmVhdHVyZXM9PGxpc3Q+KS5cbi8vIE1pcnJvcnMgdGhlIHNlcnZlcidzIFJlcG9ydFZpZXdlckZlYXR1cmVFbnVtIHZhbHVlIGZvciB2YWx1ZS5cbmV4cG9ydCB0eXBlIFJlcG9ydFZpZXdlckZlYXR1cmUgPVxuICB8ICdleGNsdWRlVmFsdWVzJ1xuICB8ICdudW1iZXJSYW5nZSdcbiAgfCAnbWF0Y2hBbnknXG4gIHwgJ3BhZ2VTY29wZSdcbiAgfCAnY2FzY2FkaW5nT3B0aW9ucydcbiAgfCAnc2NvcGVGaWx0ZXJzJ1xuICB8ICdkcmlsbCdcbiAgfCAnY3Jvc3NGaWx0ZXInXG4gIHwgJ2RldGFpbCc7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXZpZXdlci1mZWF0dXJlLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtdmlld2VyLWZlYXR1cmUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQSB2aWV3ZXIgY2FwYWJpbGl0eSB0aGUgc2VydmVyIGNhbiBzZXJ2ZSAoUmVwb3J0LnZpZXdlckZlYXR1cmVzKS4gVGhlXG4vLyB2aWV3ZXIgb2ZmZXJzIGEgY29udHJvbCBvbmx5IHdoZW4gdGhlIHJlcG9ydCBsaXN0cyBpdHMgZmVhdHVyZSwgYW5kIGl0XG4vLyBuYW1lcyB0aGUgZmVhdHVyZXMgaXQgaW1wbGVtZW50cyBvbiB0aGUgcmVwb3J0IEdFVCAoZmVhdHVyZXM9PGxpc3Q+KS5cbi8vIE1pcnJvcnMgdGhlIHNlcnZlcidzIFJlcG9ydFZpZXdlckZlYXR1cmVFbnVtIHZhbHVlIGZvciB2YWx1ZS5cbmV4cG9ydCB0eXBlIFJlcG9ydFZpZXdlckZlYXR1cmUgPVxuICB8ICdleGNsdWRlVmFsdWVzJ1xuICB8ICdudW1iZXJSYW5nZSdcbiAgfCAnbWF0Y2hBbnknXG4gIHwgJ3BhZ2VTY29wZSdcbiAgfCAnY2FzY2FkaW5nT3B0aW9ucydcbiAgfCAnc2NvcGVGaWx0ZXJzJ1xuICB8ICdkcmlsbCdcbiAgfCAnY3Jvc3NGaWx0ZXInXG4gIHwgJ3Nob3dSb3dzJ1xuICB8ICdncmlkJztcbiJdfQ==
@@ -14,7 +14,7 @@ import { isCalendarDay, isChartGranularity } from './report-state';
14
14
  export const MARK_ACTION_LABELS = {
15
15
  drill: 'Drill down',
16
16
  crossFilter: 'Filter other tiles',
17
- detail: 'Show rows',
17
+ showRows: 'Show rows',
18
18
  };
19
19
  // Where a click was and what made it. A PointerEvent names its pointer; a
20
20
  // TouchEvent is a touch; anything else (a plain MouseEvent, a key press
@@ -190,4 +190,4 @@ function numeric(value) {
190
190
  function finite(value) {
191
191
  return typeof value === 'number' && Number.isFinite(value) ? value : null;
192
192
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1jbGljay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9tYXJrLWNsaWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxrQkFBa0IsRUFFbEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUduRSwyRUFBMkU7QUFDM0UsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLGlDQUFpQztBQUNqQyw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFFdkQscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFxQztJQUNsRSxLQUFLLEVBQUUsWUFBWTtJQUNuQixXQUFXLEVBQUUsb0JBQW9CO0lBQ2pDLE1BQU0sRUFBRSxXQUFXO0NBQ3BCLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsd0VBQXdFO0FBQ3hFLG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQXlDO0lBQ25FLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxJQUFJLElBQUksR0FBdUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUV6RSxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssT0FBTyxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssS0FBSyxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDckcsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU87UUFDTCxD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MUYsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztJQUV2RSxPQUFPO1FBQ0wsTUFBTTtRQUNOLEdBQUc7UUFDSCxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hHLE1BQU07UUFDTixLQUFLO0tBQ04sQ0FBQztBQUNKLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELDhCQUE4QjtBQUM5QixTQUFTLE1BQU0sQ0FBQyxLQUFnQztJQUM5QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50RGF0YURyaWxsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbXBvbmVudC1kYXRhLWRyaWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydEhpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtY2hhcnQtaGl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnREcmlsbFN0ZXAgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LWRyaWxsLXN0ZXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydE1hcmtBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LW1hcmstYWN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgUmVwb3J0TWFya0NsaWNrIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLWNsaWNrLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRNYXJrQ29udGV4dCB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRNYXJrRGVjaXNpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LW1hcmstZGVjaXNpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydE1hcmtFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0TWFya1BvaW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLXBvaW50LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBDaGFydENvbmZpZyxcbiAgQ29tcG9uZW50RGF0YSxcbiAgS3BpQ29uZmlnLFxuICBSZXBvcnRDb21wb25lbnQsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIGNoYXJ0Q29sdW1ucyxcbiAgY2hhcnREYXRlTGFiZWwsXG4gIGV4dHJhY3RDaGFydFNlcmllcyxcbiAgRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGZvcm1hdFBlcmlvZExhYmVsLFxuICBwYXJ0aWFsU2VnbWVudE93bmVyLFxufSBmcm9tICcuL29wdGlvbi1idWlsZGVyJztcbmltcG9ydCB7IGlzQ2FsZW5kYXJEYXksIGlzQ2hhcnRHcmFudWxhcml0eSB9IGZyb20gJy4vcmVwb3J0LXN0YXRlJztcblxuXG4vLyBUaGUgb25lIGNsaWNrIG1vZGVsIChCMTApOiB3aGF0IGEgY2xpY2sgb24gYSB0aWxlJ3MgbWFyayBzdGFuZHMgZm9yLCBhbmRcbi8vIHdoYXQgdGhlIHRpbGUgZG9lcyB3aXRoIGl0LiBQdXJlLCBzbyB0aGUgbm9kZSBoYXJuZXNzIHJ1bnMgaXQuXG4vL1xuLy8gLSBjaGFydE1hcmtDbGljayBhbmQga3BpTWFya0NsaWNrIHR1cm4gYSBjbGljayBpbnRvIGEgUmVwb3J0TWFya0NsaWNrOiB0aGVcbi8vICAgcmF3IHZhbHVlcyBmcm9tIGRhdGEucm93cyAobmV2ZXIgdGhlIGRyYXduIHRleHQpLCB0aGUgY2xpY2tlZCBzZXJpZXMgYW5kXG4vLyAgIGl0cyBudW1iZXIsIGFuZCB0aGUgcG9pbnRlci5cbi8vIC0gbWFya0FjdGlvbnMgbGlzdHMgd2hhdCB0aGUgY2xpY2sgbWF5IGRvLCBlYWNoIG9ubHkgd2hpbGUgaXRzIGZlYXR1cmUgaXNcbi8vICAgb2ZmZXJlZDsgZGVjaWRlTWFya0NsaWNrIGFwcGxpZXMgdGhlIGFjdGlvbiBydWxlOiBub25lIGRvZXMgbm90aGluZywgb25lXG4vLyAgIHJ1bnMsIHR3byBvciBtb3JlIG9wZW4gdGhlIG1lbnUgYXQgdGhlIG1hcmssIGFuZCBhIHRvdWNoIGZpcnN0IHNob3dzIHRoZVxuLy8gICB0b29sdGlwIGFuZCBhY3RzIG9uIGEgc2Vjb25kIHRhcCBvbiB0aGUgc2FtZSBtYXJrLlxuXG4vLyBBIG1hcmsgbWVudSByb3cncyB0ZXh0LCBieSBhY3Rpb24uXG5leHBvcnQgY29uc3QgTUFSS19BQ1RJT05fTEFCRUxTOiBSZWNvcmQ8UmVwb3J0TWFya0FjdGlvbiwgc3RyaW5nPiA9IHtcbiAgZHJpbGw6ICdEcmlsbCBkb3duJyxcbiAgY3Jvc3NGaWx0ZXI6ICdGaWx0ZXIgb3RoZXIgdGlsZXMnLFxuICBkZXRhaWw6ICdTaG93IHJvd3MnLFxufTtcblxuLy8gV2hlcmUgYSBjbGljayB3YXMgYW5kIHdoYXQgbWFkZSBpdC4gQSBQb2ludGVyRXZlbnQgbmFtZXMgaXRzIHBvaW50ZXI7IGFcbi8vIFRvdWNoRXZlbnQgaXMgYSB0b3VjaDsgYW55dGhpbmcgZWxzZSAoYSBwbGFpbiBNb3VzZUV2ZW50LCBhIGtleSBwcmVzc1xuLy8gdGhhdCBjbGlja2VkKSByZWFkcyBhcyB0aGUgbW91c2UuXG5leHBvcnQgZnVuY3Rpb24gbWFya1BvaW50ZXIoZXZlbnQ6IFJlcG9ydE1hcmtFdmVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBSZXBvcnRNYXJrQ2xpY2tbJ3BvaW50ZXInXSB7XG4gIGNvbnN0IHRvdWNoID0gZXZlbnQ/LmNoYW5nZWRUb3VjaGVzPy5bMF07XG4gIGxldCB0eXBlOiBSZXBvcnRNYXJrQ2xpY2tbJ3BvaW50ZXInXVsndHlwZSddID0gdG91Y2ggPyAndG91Y2gnIDogJ21vdXNlJztcblxuICBpZiAoZXZlbnQ/LnBvaW50ZXJUeXBlID09PSAndG91Y2gnIHx8IGV2ZW50Py5wb2ludGVyVHlwZSA9PT0gJ3BlbicgfHwgZXZlbnQ/LnBvaW50ZXJUeXBlID09PSAnbW91c2UnKSB7XG4gICAgdHlwZSA9IGV2ZW50LnBvaW50ZXJUeXBlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBmaW5pdGUoZXZlbnQ/LnBhZ2VYKSA/PyBmaW5pdGUodG91Y2g/LnBhZ2VYKSA/PyAwLFxuICAgIHk6IGZpbml0ZShldmVudD8ucGFnZVkpID8/IGZpbml0ZSh0b3VjaD8ucGFnZVkpID8/IDAsXG4gICAgdHlwZSxcbiAgfTtcbn1cblxuLy8gQSBjbGljayBvbiBhIGNoYXJ0OiBhIGJhciAoYW5kIGl0cyBzcGxpdCB2YWx1ZSksIGEgbGluZSBvciBhcmVhIHBvaW50IG9yXG4vLyB0aGUgbGluZSBpdHNlbGYsIGEgcGllIHNsaWNlLCBhIHdhdGVyZmFsbCBzdGVwLCBvciBhIGNhdGVnb3J5J3MgZW1wdHkgYmFuZFxuLy8gKHdpdGggdGhlIG1vdXNlIG9ubHk6IGEgdGFwIHRoZXJlIGlzIGhvdyBhIHBob25lIHNob3dzIHRoZSB0b29sdGlwKS4gQVxuLy8gcGFydGlhbCBzZWdtZW50IHJlYWRzIGFzIHRoZSBzZXJpZXMgaXQgY29udGludWVzLCBhbmQgYSBjb21wYXJlZCBzZXJpZXNcbi8vIGFzIGl0cyBjYXRlZ29yeSwgdGhlIGN1cnJlbnQgcGVyaW9kLiBudWxsIGZvciBhIHJlZmVyZW5jZSBsaW5lIG9yIGJhbmQsXG4vLyBhIHdhdGVyZmFsbCdzIGJhc2UgYW5kIGl0cyBUb3RhbCwgYW5kIGEgY2F0ZWdvcnkgdGhlIGNoYXJ0IGRvZXMgbm90IGhhdmUuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRNYXJrQ2xpY2soXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBoaXQ6IFJlcG9ydENoYXJ0SGl0LFxuICBldmVudDogUmVwb3J0TWFya0V2ZW50IHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFJlcG9ydE1hcmtDbGljayB8IG51bGwge1xuICBjb25zdCBwb2ludGVyID0gbWFya1BvaW50ZXIoZXZlbnQpO1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3Qgc2VyaWVzID0gaGl0U2VyaWVzKGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWcsIGV4dHJhY3RlZCwgaGl0KTtcblxuICBpZiAoc2VyaWVzID09PSBudWxsIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGhpdC5kYXRhSW5kZXgpXG4gICAgfHwgaGl0LmRhdGFJbmRleCA8IDAgfHwgaGl0LmRhdGFJbmRleCA+PSBleHRyYWN0ZWQucmF3Q2F0ZWdvcmllcy5sZW5ndGhcbiAgICB8fCAoc2VyaWVzID09PSAnYmFuZCcgJiYgcG9pbnRlci50eXBlICE9PSAnbW91c2UnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2xpY2tlZCA9IHNlcmllcyA9PT0gJ2JhbmQnID8gbnVsbCA6IGV4dHJhY3RlZC5zZXJpZXNbc2VyaWVzXTtcblxuICByZXR1cm4ge1xuICAgIGNvbXBvbmVudElkOiBjb21wb25lbnQuaWQsXG4gICAgcG9pbnRzOiBjaGFydFBvaW50cyhjb21wb25lbnQsIGRhdGEsIGNvbnRleHQsIGV4dHJhY3RlZCwgaGl0LmRhdGFJbmRleCwgc2VyaWVzID09PSAnYmFuZCcgPyBudWxsIDogc2VyaWVzKSxcbiAgICBtZWFzdXJlOiBjbGlja2VkPy5tZWFzdXJlLmNvbHVtbiA/PyBudWxsLFxuICAgIHZhbHVlOiBjbGlja2VkPy52YWx1ZXNbaGl0LmRhdGFJbmRleF0gPz8gbnVsbCxcbiAgICBhZGRpdGl2ZTogISEoZXZlbnQ/LmN0cmxLZXkgfHwgZXZlbnQ/Lm1ldGFLZXkpLFxuICAgIHBvaW50ZXIsXG4gIH07XG59XG5cbi8vIEEgY2xpY2sgb24gYSBLUEkncyB2YWx1ZTogbm8gcG9pbnRzLCB0aGUgS1BJJ3MgbWVhc3VyZSBhbmQgaXRzIG51bWJlci5cbmV4cG9ydCBmdW5jdGlvbiBrcGlNYXJrQ2xpY2soXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhIHwgbnVsbCxcbiAgZXZlbnQ6IFJlcG9ydE1hcmtFdmVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBSZXBvcnRNYXJrQ2xpY2sge1xuICBjb25zdCBjb25maWcgPSAoY29tcG9uZW50LmNvbmZpZyA/PyB7fSkgYXMgS3BpQ29uZmlnO1xuICBjb25zdCByb3cgPSBkYXRhPy5yb3dzPy5bMF07XG4gIGNvbnN0IG1lYXN1cmUgPSBjb25maWcubWVhc3VyZT8uY29sdW1uID8/IE9iamVjdC5rZXlzKHJvdyA/PyB7fSlbMF0gPz8gbnVsbDtcbiAgY29uc3QgdmFsdWUgPSBkYXRhPy5rcGkgPyBkYXRhLmtwaS52YWx1ZSA6IGZpbml0ZShudW1lcmljKG1lYXN1cmUgPT09IG51bGwgPyB1bmRlZmluZWQgOiByb3c/LlttZWFzdXJlXSkpO1xuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50SWQ6IGNvbXBvbmVudC5pZCxcbiAgICBwb2ludHM6IFtdLFxuICAgIG1lYXN1cmUsXG4gICAgdmFsdWU6IHZhbHVlID8/IG51bGwsXG4gICAgYWRkaXRpdmU6ICEhKGV2ZW50Py5jdHJsS2V5IHx8IGV2ZW50Py5tZXRhS2V5KSxcbiAgICBwb2ludGVyOiBtYXJrUG9pbnRlcihldmVudCksXG4gIH07XG59XG5cbi8vIFdoYXQgYSB0aWxlJ3MgbWFya3MgbWF5IGRvIG9uIGl0cyBsYXN0IGFuc3dlciwgYmVmb3JlIGFueSBvbmUgbWFyayBpc1xuLy8gY2xpY2tlZDogdGhlIGNoYXJ0J3MgdG9vbHRpcCBoaW50IGFuZCBpdHMgaGFuZCBwb2ludGVyIHJlYWQgaXQuIERyaWxsXG4vLyBkb3duIHdoaWxlIGRyaWxsIGlzIG9mZmVyZWQgYW5kIHRoZSBhbnN3ZXIgbmFtZXMgYSBsZXZlbCBiZWxvdy5cbmV4cG9ydCBmdW5jdGlvbiB0aWxlTWFya0FjdGlvbnMoY29udGV4dDogUmVwb3J0TWFya0NvbnRleHQpOiBSZXBvcnRNYXJrQWN0aW9uW10ge1xuICByZXR1cm4gY29udGV4dC5mZWF0dXJlcy5pbmNsdWRlcygnZHJpbGwnKSAmJiBjb250ZXh0LmRhdGE/LmRyaWxsPy5uZXh0ID8gWydkcmlsbCddIDogW107XG59XG5cbi8vIFdoYXQgdGhpcyBjbGljayBtYXkgZG86IHRoZSB0aWxlJ3MgYWN0aW9ucyB0aGF0IGFwcGx5IHRvIHRoZSBjbGlja2VkIG1hcmsuXG4vLyBEcmlsbCBkb3duIG5lZWRzIGEgcGVyaW9kIG9uIHRoZSBkcmlsbGVkIGF4aXMsIHNvIGEgS1BJJ3MgdmFsdWUgYW5kIGEgbWFya1xuLy8gb2ZmIHRoYXQgYXhpcyBuZXZlciBkcmlsbC5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQWN0aW9ucyhjbGljazogUmVwb3J0TWFya0NsaWNrLCBjb250ZXh0OiBSZXBvcnRNYXJrQ29udGV4dCk6IFJlcG9ydE1hcmtBY3Rpb25bXSB7XG4gIHJldHVybiB0aWxlTWFya0FjdGlvbnMoY29udGV4dClcbiAgICAuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gJ2RyaWxsJyB8fCBkcmlsbFBvaW50KGNsaWNrLCBjb250ZXh0LmRhdGE/LmRyaWxsKSAhPT0gbnVsbCk7XG59XG5cbi8vIFRoZSBhY3Rpb24gcnVsZSAoQjEwLjIpLiBObyBhY3Rpb246IG5vdGhpbmcgaGFwcGVucy4gQSB0b3VjaCAob3IgYSBwZW4pXG4vLyBvbiBhIGNoYXJ0J3MgbWFyayBmaXJzdCBzaG93cyBpdHMgdG9vbHRpcCBvbmx5LCBhbmQgYSBzZWNvbmQgdGFwIG9uIHRoZVxuLy8gc2FtZSBtYXJrIGFjdHM7IGEgS1BJJ3MgdmFsdWUgaGFzIG5vIHRvb2x0aXAsIHNvIGl0cyBmaXJzdCB0YXAgYWN0cy4gVGhlblxuLy8gb25lIGFjdGlvbiBydW5zIGF0IG9uY2UsIGFuZCB0d28gb3IgbW9yZSBvcGVuIHRoZSBtZW51IGF0IHRoZSBtYXJrLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY2lkZU1hcmtDbGljayhcbiAgY2xpY2s6IFJlcG9ydE1hcmtDbGljayxcbiAgYWN0aW9uczogcmVhZG9ubHkgUmVwb3J0TWFya0FjdGlvbltdLFxuICB0b3VjaGVkOiBzdHJpbmcgfCBudWxsLFxuKTogUmVwb3J0TWFya0RlY2lzaW9uIHtcbiAgaWYgKCFhY3Rpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiB7IG91dGNvbWU6ICdub25lJywgYWN0aW9uczogW10sIHRvdWNoZWQ6IG51bGwgfTtcbiAgfVxuXG4gIGNvbnN0IGtleSA9IG1hcmtLZXkoY2xpY2spO1xuICBpZiAoY2xpY2sucG9pbnRlci50eXBlICE9PSAnbW91c2UnICYmIGNsaWNrLnBvaW50cy5sZW5ndGggJiYgdG91Y2hlZCAhPT0ga2V5KSB7XG4gICAgcmV0dXJuIHsgb3V0Y29tZTogJ3Rvb2x0aXAnLCBhY3Rpb25zOiBbLi4uYWN0aW9uc10sIHRvdWNoZWQ6IGtleSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgb3V0Y29tZTogYWN0aW9ucy5sZW5ndGggPT09IDEgPyAncnVuJyA6ICdtZW51JywgYWN0aW9uczogWy4uLmFjdGlvbnNdLCB0b3VjaGVkOiBudWxsIH07XG59XG5cbi8vIFdoaWNoIG1hcmsgYSBjbGljayBpcyBvbjogaXRzIHRpbGUsIGl0cyByYXcgdmFsdWVzIGFuZCBpdHMgc2VyaWVzLiBUd29cbi8vIHRhcHMgYXJlIG9uIHRoZSBzYW1lIG1hcmsgd2hlbiB0aGVpciBrZXlzIG1hdGNoLlxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtLZXkoY2xpY2s6IFJlcG9ydE1hcmtDbGljayk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbXG4gICAgY2xpY2suY29tcG9uZW50SWQsXG4gICAgY2xpY2sucG9pbnRzLm1hcCgocG9pbnQpID0+IFtwb2ludC5jb2x1bW4sIHBvaW50LnJhdyA/PyBudWxsXSksXG4gICAgY2xpY2subWVhc3VyZSxcbiAgXSk7XG59XG5cbi8vIFRoZSBwb2ludCBhIGRyaWxsIHN0ZXBzIGludG86IHRoZSBjbGlja2VkIHBlcmlvZCBvbiB0aGUgZHJpbGxlZCBheGlzLCBvclxuLy8gbnVsbCB3aGVuIHRoZSBjbGljayBoYXMgbm9uZS5cbmV4cG9ydCBmdW5jdGlvbiBkcmlsbFBvaW50KFxuICBjbGljazogUmVwb3J0TWFya0NsaWNrLFxuICBkcmlsbDogQ29tcG9uZW50RGF0YURyaWxsIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFJlcG9ydE1hcmtQb2ludCB8IG51bGwge1xuICByZXR1cm4gZHJpbGxcbiAgICA/IGNsaWNrLnBvaW50cy5maW5kKChwb2ludCkgPT4gcG9pbnQuY29sdW1uID09PSBkcmlsbC5heGlzICYmICEhcG9pbnQucGVyaW9kKSA/PyBudWxsXG4gICAgOiBudWxsO1xufVxuXG4vLyBUaGUgZHJpbGwgcGF0aCBvbmUgbGV2ZWwgZG93biBmcm9tIHdoYXQgdGhlIGNoYXJ0IHNob3dzOiB0aGUgc3RlcHMgdGhlXG4vLyBzZXJ2ZXIgYXBwbGllZCAoZHJpbGwucGF0aCksIHRoZW4gdGhlIGNsaWNrZWQgcGVyaW9kIGF0IHRoZSBsZXZlbCBpdCB3YXNcbi8vIGNsaWNrZWQgYXQgKGRyaWxsLmxldmVsKSwgd2hpY2ggdGhlIGNoYXJ0IHRoZW4gc2hvd3MgYXQgZHJpbGwubmV4dC4gQSBzdGVwXG4vLyBuYW1lcyB0aGUgcGVyaW9kIGNsaWNrZWQsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIGF0IHRoZSBjaGFydCdzIHRvcCBsZXZlbC5cbi8vIG51bGwgd2hlbiB0aGUgY2hhcnQgaXMgYXQgaXRzIGxvd2VzdCBsZXZlbCBvciB0aGUgY2xpY2sgaGFzIG5vIHBlcmlvZC5cbmV4cG9ydCBmdW5jdGlvbiBkcmlsbERvd25QYXRoKFxuICBkcmlsbDogQ29tcG9uZW50RGF0YURyaWxsIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY2xpY2s6IFJlcG9ydE1hcmtDbGljayxcbik6IFJlcG9ydERyaWxsU3RlcFtdIHwgbnVsbCB7XG4gIGNvbnN0IHBvaW50ID0gZHJpbGxQb2ludChjbGljaywgZHJpbGwpO1xuXG4gIGlmICghZHJpbGw/Lm5leHQgfHwgIXBvaW50Py5wZXJpb2QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLi4uZHJpbGwucGF0aC5tYXAoKGNydW1iKSA9PiAoeyBsZXZlbDogY3J1bWIubGV2ZWwsIHZhbHVlOiBjcnVtYi52YWx1ZSB9KSksXG4gICAgeyBsZXZlbDogZHJpbGwubGV2ZWwsIHZhbHVlOiBwb2ludC5wZXJpb2QgfSxcbiAgXTtcbn1cblxuLy8gVGhlIGV4dHJhY3RlZCBzZXJpZXMgYSBoaXQgaXMgb246IGl0cyBpbmRleCwgJ2JhbmQnIGZvciBhIGNhdGVnb3J5J3Ncbi8vIGVtcHR5IGJhbmQsIG9yIG51bGwgZm9yIHdoYXQgaXMgbm90IGEgbWFyay4gQW4gYXhpcyBjaGFydCdzIHBhcnRpYWxcbi8vIHNlZ21lbnQgbWFwcyB0byB0aGUgc2VyaWVzIGl0IGNvbnRpbnVlczsgYSByZWZlcmVuY2UgY2FycmllciBtYXBzIHRvXG4vLyBub3RoaW5nLiBBIHdhdGVyZmFsbCdzIHN0ZXBzIGFyZSBpdHMgc2Vjb25kIHNlcmllcyAodGhlIGZpcnN0IGlzIHRoZVxuLy8gaW52aXNpYmxlIGJhc2UpOyBhIHBpZSdzIHNsaWNlcyBpdHMgb25seSBvbmUuXG5mdW5jdGlvbiBoaXRTZXJpZXMoY29uZmlnOiBDaGFydENvbmZpZywgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgaGl0OiBSZXBvcnRDaGFydEhpdCk6IG51bWJlciB8ICdiYW5kJyB8IG51bGwge1xuICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuXG4gIGlmIChoaXQuc2VyaWVzSW5kZXggPT09IG51bGwpIHtcbiAgICByZXR1cm4gY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcgPyBudWxsIDogJ2JhbmQnO1xuICB9XG5cbiAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICByZXR1cm4gaGl0LnNlcmllc0luZGV4ID09PSAxICYmIGV4dHJhY3RlZC5zZXJpZXMubGVuZ3RoID8gMCA6IG51bGw7XG4gIH1cblxuICBpZiAoaGl0LnNlcmllc0luZGV4ID49IDAgJiYgaGl0LnNlcmllc0luZGV4IDwgZXh0cmFjdGVkLnNlcmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcgPyAwIDogaGl0LnNlcmllc0luZGV4O1xuICB9XG5cbiAgY29uc3Qgb3duZXIgPSBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyA/IG51bGwgOiBwYXJ0aWFsU2VnbWVudE93bmVyKGhpdC5zZXJpZXNJZCk7XG5cbiAgcmV0dXJuIG93bmVyICE9PSBudWxsICYmIG93bmVyIDwgZXh0cmFjdGVkLnNlcmllcy5sZW5ndGggPyBvd25lciA6IG51bGw7XG59XG5cbi8vIFRoZSBjbGlja2VkIGNhdGVnb3J5LCB0aGVuIHRoZSBzcGxpdCB2YWx1ZSB3aGVuIHRoZSBjaGFydCBzcGxpdHMgYnlcbi8vIGFub3RoZXIgY29sdW1uIHRoYW4gaXRzIGF4aXMgKGEgY29sb3JCeSBjaGFydCdzIHNlcmllcyBhcmUgaXRzIGNhdGVnb3JpZXMpLlxuZnVuY3Rpb24gY2hhcnRQb2ludHMoXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBkYXRhSW5kZXg6IG51bWJlcixcbiAgc2VyaWVzOiBudW1iZXIgfCBudWxsLFxuKTogUmVwb3J0TWFya1BvaW50W10ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCB7IHhDb2x1bW4sIGdyb3VwQ29sdW1uIH0gPSBjaGFydENvbHVtbnMoY29uZmlnLCBkYXRhKTtcbiAgY29uc3QgcG9pbnRzID0gW2NhdGVnb3J5UG9pbnQoY29uZmlnLCBkYXRhLCBjb250ZXh0LCBleHRyYWN0ZWQsIHhDb2x1bW4sIGRhdGFJbmRleCldO1xuXG4gIGlmIChzZXJpZXMgIT09IG51bGwgJiYgZ3JvdXBDb2x1bW4gJiYgZ3JvdXBDb2x1bW4gIT09IHhDb2x1bW4pIHtcbiAgICBwb2ludHMucHVzaCh7IGNvbHVtbjogZ3JvdXBDb2x1bW4sIHJhdzogZXh0cmFjdGVkLnJhd0dyb3Vwc1tzZXJpZXNdLCBsYWJlbDogZXh0cmFjdGVkLnNlcmllc1tzZXJpZXNdLm5hbWUgfSk7XG4gIH1cblxuICByZXR1cm4gcG9pbnRzO1xufVxuXG4vLyBUaGUgY2F0ZWdvcnkgYXMgdGhlIHJvd3MgaG9sZCBpdCBhbmQgYXMgdGhlIGF4aXMgd3JvdGUgaXQuIE9uIGEgdGltZSBheGlzXG4vLyBpdCBhbHNvIGdpdmVzIHRoZSBwZXJpb2QncyBmaXJzdCBkYXkgYW5kIHRoZSBncmFpbiwgYW5kIHJlYWRzIGFzIHRoZVxuLy8gdG9vbHRpcCBuYW1lcyBpdCAoJ0phbnVhcnkgMjAyNicpOyBhIHBpZSB3cml0ZXMgaXRzIHNsaWNlcyBhcyB0aGV5IGNvbWUuXG5mdW5jdGlvbiBjYXRlZ29yeVBvaW50KFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBjb2x1bW46IHN0cmluZyxcbiAgZGF0YUluZGV4OiBudW1iZXIsXG4pOiBSZXBvcnRNYXJrUG9pbnQge1xuICBjb25zdCByYXcgPSBleHRyYWN0ZWQucmF3Q2F0ZWdvcmllc1tkYXRhSW5kZXhdO1xuICBjb25zdCBsYWJlbCA9IGV4dHJhY3RlZC5jYXRlZ29yaWVzW2RhdGFJbmRleF07XG4gIGNvbnN0IGdyYWluID0gaXNDaGFydEdyYW51bGFyaXR5KGRhdGEuZ3JhbnVsYXJpdHkpID8gZGF0YS5ncmFudWxhcml0eSA6IG51bGw7XG4gIGNvbnN0IHBlcmlvZCA9IGdyYWluICYmIHJhdyAhPT0gbnVsbCAmJiByYXcgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhyYXcpLnNsaWNlKDAsIDEwKSA6ICcnO1xuXG4gIGlmICghZ3JhaW4gfHwgIWlzQ2FsZW5kYXJEYXkocGVyaW9kKSkge1xuICAgIHJldHVybiB7IGNvbHVtbiwgcmF3LCBsYWJlbCB9O1xuICB9XG5cbiAgY29uc3QgcGllID0gY29uZmlnLmNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY29uZmlnLmNoYXJ0VHlwZSA9PT0gJ2RvbnV0JztcblxuICByZXR1cm4ge1xuICAgIGNvbHVtbixcbiAgICByYXcsXG4gICAgbGFiZWw6IHBpZSA/IGxhYmVsIDogZm9ybWF0UGVyaW9kTGFiZWwoU3RyaW5nKHJhdyksIGdyYWluLCB0cnVlLCBjb250ZXh0LmxvY2FsZSwgY2hhcnREYXRlTGFiZWwoY29uZmlnKSksXG4gICAgcGVyaW9kLFxuICAgIGdyYWluLFxuICB9O1xufVxuXG4vLyBBIG51bWJlciBhcyBhIGNlbGwgaG9sZHMgaXQgKGEgbnVtYmVyIG9yIG51bWVyaWMgdGV4dCksIGVsc2UgbnVsbC5cbmZ1bmN0aW9uIG51bWVyaWModmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbn1cblxuLy8gQSBmaW5pdGUgbnVtYmVyLCBlbHNlIG51bGwuXG5mdW5jdGlvbiBmaW5pdGUodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogbnVsbDtcbn1cbiJdfQ==
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1jbGljay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9tYXJrLWNsaWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxrQkFBa0IsRUFFbEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUduRSwyRUFBMkU7QUFDM0UsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLGlDQUFpQztBQUNqQyw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFFdkQscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFxQztJQUNsRSxLQUFLLEVBQUUsWUFBWTtJQUNuQixXQUFXLEVBQUUsb0JBQW9CO0lBQ2pDLFFBQVEsRUFBRSxXQUFXO0NBQ3RCLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsd0VBQXdFO0FBQ3hFLG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQXlDO0lBQ25FLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxJQUFJLElBQUksR0FBdUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUV6RSxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssT0FBTyxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssS0FBSyxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDckcsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU87UUFDTCxD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MUYsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztJQUV2RSxPQUFPO1FBQ0wsTUFBTTtRQUNOLEdBQUc7UUFDSCxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hHLE1BQU07UUFDTixLQUFLO0tBQ04sQ0FBQztBQUNKLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELDhCQUE4QjtBQUM5QixTQUFTLE1BQU0sQ0FBQyxLQUFnQztJQUM5QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50RGF0YURyaWxsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbXBvbmVudC1kYXRhLWRyaWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydEhpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtY2hhcnQtaGl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnREcmlsbFN0ZXAgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LWRyaWxsLXN0ZXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydE1hcmtBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LW1hcmstYWN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgUmVwb3J0TWFya0NsaWNrIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLWNsaWNrLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRNYXJrQ29udGV4dCB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRNYXJrRGVjaXNpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LW1hcmstZGVjaXNpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydE1hcmtFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0TWFya1BvaW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC1tYXJrLXBvaW50LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBDaGFydENvbmZpZyxcbiAgQ29tcG9uZW50RGF0YSxcbiAgS3BpQ29uZmlnLFxuICBSZXBvcnRDb21wb25lbnQsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIGNoYXJ0Q29sdW1ucyxcbiAgY2hhcnREYXRlTGFiZWwsXG4gIGV4dHJhY3RDaGFydFNlcmllcyxcbiAgRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGZvcm1hdFBlcmlvZExhYmVsLFxuICBwYXJ0aWFsU2VnbWVudE93bmVyLFxufSBmcm9tICcuL29wdGlvbi1idWlsZGVyJztcbmltcG9ydCB7IGlzQ2FsZW5kYXJEYXksIGlzQ2hhcnRHcmFudWxhcml0eSB9IGZyb20gJy4vcmVwb3J0LXN0YXRlJztcblxuXG4vLyBUaGUgb25lIGNsaWNrIG1vZGVsIChCMTApOiB3aGF0IGEgY2xpY2sgb24gYSB0aWxlJ3MgbWFyayBzdGFuZHMgZm9yLCBhbmRcbi8vIHdoYXQgdGhlIHRpbGUgZG9lcyB3aXRoIGl0LiBQdXJlLCBzbyB0aGUgbm9kZSBoYXJuZXNzIHJ1bnMgaXQuXG4vL1xuLy8gLSBjaGFydE1hcmtDbGljayBhbmQga3BpTWFya0NsaWNrIHR1cm4gYSBjbGljayBpbnRvIGEgUmVwb3J0TWFya0NsaWNrOiB0aGVcbi8vICAgcmF3IHZhbHVlcyBmcm9tIGRhdGEucm93cyAobmV2ZXIgdGhlIGRyYXduIHRleHQpLCB0aGUgY2xpY2tlZCBzZXJpZXMgYW5kXG4vLyAgIGl0cyBudW1iZXIsIGFuZCB0aGUgcG9pbnRlci5cbi8vIC0gbWFya0FjdGlvbnMgbGlzdHMgd2hhdCB0aGUgY2xpY2sgbWF5IGRvLCBlYWNoIG9ubHkgd2hpbGUgaXRzIGZlYXR1cmUgaXNcbi8vICAgb2ZmZXJlZDsgZGVjaWRlTWFya0NsaWNrIGFwcGxpZXMgdGhlIGFjdGlvbiBydWxlOiBub25lIGRvZXMgbm90aGluZywgb25lXG4vLyAgIHJ1bnMsIHR3byBvciBtb3JlIG9wZW4gdGhlIG1lbnUgYXQgdGhlIG1hcmssIGFuZCBhIHRvdWNoIGZpcnN0IHNob3dzIHRoZVxuLy8gICB0b29sdGlwIGFuZCBhY3RzIG9uIGEgc2Vjb25kIHRhcCBvbiB0aGUgc2FtZSBtYXJrLlxuXG4vLyBBIG1hcmsgbWVudSByb3cncyB0ZXh0LCBieSBhY3Rpb24uXG5leHBvcnQgY29uc3QgTUFSS19BQ1RJT05fTEFCRUxTOiBSZWNvcmQ8UmVwb3J0TWFya0FjdGlvbiwgc3RyaW5nPiA9IHtcbiAgZHJpbGw6ICdEcmlsbCBkb3duJyxcbiAgY3Jvc3NGaWx0ZXI6ICdGaWx0ZXIgb3RoZXIgdGlsZXMnLFxuICBzaG93Um93czogJ1Nob3cgcm93cycsXG59O1xuXG4vLyBXaGVyZSBhIGNsaWNrIHdhcyBhbmQgd2hhdCBtYWRlIGl0LiBBIFBvaW50ZXJFdmVudCBuYW1lcyBpdHMgcG9pbnRlcjsgYVxuLy8gVG91Y2hFdmVudCBpcyBhIHRvdWNoOyBhbnl0aGluZyBlbHNlIChhIHBsYWluIE1vdXNlRXZlbnQsIGEga2V5IHByZXNzXG4vLyB0aGF0IGNsaWNrZWQpIHJlYWRzIGFzIHRoZSBtb3VzZS5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrUG9pbnRlcihldmVudDogUmVwb3J0TWFya0V2ZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IFJlcG9ydE1hcmtDbGlja1sncG9pbnRlciddIHtcbiAgY29uc3QgdG91Y2ggPSBldmVudD8uY2hhbmdlZFRvdWNoZXM/LlswXTtcbiAgbGV0IHR5cGU6IFJlcG9ydE1hcmtDbGlja1sncG9pbnRlciddWyd0eXBlJ10gPSB0b3VjaCA/ICd0b3VjaCcgOiAnbW91c2UnO1xuXG4gIGlmIChldmVudD8ucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgfHwgZXZlbnQ/LnBvaW50ZXJUeXBlID09PSAncGVuJyB8fCBldmVudD8ucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHtcbiAgICB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGZpbml0ZShldmVudD8ucGFnZVgpID8/IGZpbml0ZSh0b3VjaD8ucGFnZVgpID8/IDAsXG4gICAgeTogZmluaXRlKGV2ZW50Py5wYWdlWSkgPz8gZmluaXRlKHRvdWNoPy5wYWdlWSkgPz8gMCxcbiAgICB0eXBlLFxuICB9O1xufVxuXG4vLyBBIGNsaWNrIG9uIGEgY2hhcnQ6IGEgYmFyIChhbmQgaXRzIHNwbGl0IHZhbHVlKSwgYSBsaW5lIG9yIGFyZWEgcG9pbnQgb3Jcbi8vIHRoZSBsaW5lIGl0c2VsZiwgYSBwaWUgc2xpY2UsIGEgd2F0ZXJmYWxsIHN0ZXAsIG9yIGEgY2F0ZWdvcnkncyBlbXB0eSBiYW5kXG4vLyAod2l0aCB0aGUgbW91c2Ugb25seTogYSB0YXAgdGhlcmUgaXMgaG93IGEgcGhvbmUgc2hvd3MgdGhlIHRvb2x0aXApLiBBXG4vLyBwYXJ0aWFsIHNlZ21lbnQgcmVhZHMgYXMgdGhlIHNlcmllcyBpdCBjb250aW51ZXMsIGFuZCBhIGNvbXBhcmVkIHNlcmllc1xuLy8gYXMgaXRzIGNhdGVnb3J5LCB0aGUgY3VycmVudCBwZXJpb2QuIG51bGwgZm9yIGEgcmVmZXJlbmNlIGxpbmUgb3IgYmFuZCxcbi8vIGEgd2F0ZXJmYWxsJ3MgYmFzZSBhbmQgaXRzIFRvdGFsLCBhbmQgYSBjYXRlZ29yeSB0aGUgY2hhcnQgZG9lcyBub3QgaGF2ZS5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydE1hcmtDbGljayhcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIGhpdDogUmVwb3J0Q2hhcnRIaXQsXG4gIGV2ZW50OiBSZXBvcnRNYXJrRXZlbnQgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVwb3J0TWFya0NsaWNrIHwgbnVsbCB7XG4gIGNvbnN0IHBvaW50ZXIgPSBtYXJrUG9pbnRlcihldmVudCk7XG4gIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQsIGRhdGEpO1xuICBjb25zdCBzZXJpZXMgPSBoaXRTZXJpZXMoY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZywgZXh0cmFjdGVkLCBoaXQpO1xuXG4gIGlmIChzZXJpZXMgPT09IG51bGwgfHwgIU51bWJlci5pc0ludGVnZXIoaGl0LmRhdGFJbmRleClcbiAgICB8fCBoaXQuZGF0YUluZGV4IDwgMCB8fCBoaXQuZGF0YUluZGV4ID49IGV4dHJhY3RlZC5yYXdDYXRlZ29yaWVzLmxlbmd0aFxuICAgIHx8IChzZXJpZXMgPT09ICdiYW5kJyAmJiBwb2ludGVyLnR5cGUgIT09ICdtb3VzZScpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjbGlja2VkID0gc2VyaWVzID09PSAnYmFuZCcgPyBudWxsIDogZXh0cmFjdGVkLnNlcmllc1tzZXJpZXNdO1xuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50SWQ6IGNvbXBvbmVudC5pZCxcbiAgICBwb2ludHM6IGNoYXJ0UG9pbnRzKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dCwgZXh0cmFjdGVkLCBoaXQuZGF0YUluZGV4LCBzZXJpZXMgPT09ICdiYW5kJyA/IG51bGwgOiBzZXJpZXMpLFxuICAgIG1lYXN1cmU6IGNsaWNrZWQ/Lm1lYXN1cmUuY29sdW1uID8/IG51bGwsXG4gICAgdmFsdWU6IGNsaWNrZWQ/LnZhbHVlc1toaXQuZGF0YUluZGV4XSA/PyBudWxsLFxuICAgIGFkZGl0aXZlOiAhIShldmVudD8uY3RybEtleSB8fCBldmVudD8ubWV0YUtleSksXG4gICAgcG9pbnRlcixcbiAgfTtcbn1cblxuLy8gQSBjbGljayBvbiBhIEtQSSdzIHZhbHVlOiBubyBwb2ludHMsIHRoZSBLUEkncyBtZWFzdXJlIGFuZCBpdHMgbnVtYmVyLlxuZXhwb3J0IGZ1bmN0aW9uIGtwaU1hcmtDbGljayhcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEgfCBudWxsLFxuICBldmVudDogUmVwb3J0TWFya0V2ZW50IHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFJlcG9ydE1hcmtDbGljayB7XG4gIGNvbnN0IGNvbmZpZyA9IChjb21wb25lbnQuY29uZmlnID8/IHt9KSBhcyBLcGlDb25maWc7XG4gIGNvbnN0IHJvdyA9IGRhdGE/LnJvd3M/LlswXTtcbiAgY29uc3QgbWVhc3VyZSA9IGNvbmZpZy5tZWFzdXJlPy5jb2x1bW4gPz8gT2JqZWN0LmtleXMocm93ID8/IHt9KVswXSA/PyBudWxsO1xuICBjb25zdCB2YWx1ZSA9IGRhdGE/LmtwaSA/IGRhdGEua3BpLnZhbHVlIDogZmluaXRlKG51bWVyaWMobWVhc3VyZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJvdz8uW21lYXN1cmVdKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb21wb25lbnRJZDogY29tcG9uZW50LmlkLFxuICAgIHBvaW50czogW10sXG4gICAgbWVhc3VyZSxcbiAgICB2YWx1ZTogdmFsdWUgPz8gbnVsbCxcbiAgICBhZGRpdGl2ZTogISEoZXZlbnQ/LmN0cmxLZXkgfHwgZXZlbnQ/Lm1ldGFLZXkpLFxuICAgIHBvaW50ZXI6IG1hcmtQb2ludGVyKGV2ZW50KSxcbiAgfTtcbn1cblxuLy8gV2hhdCBhIHRpbGUncyBtYXJrcyBtYXkgZG8gb24gaXRzIGxhc3QgYW5zd2VyLCBiZWZvcmUgYW55IG9uZSBtYXJrIGlzXG4vLyBjbGlja2VkOiB0aGUgY2hhcnQncyB0b29sdGlwIGhpbnQgYW5kIGl0cyBoYW5kIHBvaW50ZXIgcmVhZCBpdC4gRHJpbGxcbi8vIGRvd24gd2hpbGUgZHJpbGwgaXMgb2ZmZXJlZCBhbmQgdGhlIGFuc3dlciBuYW1lcyBhIGxldmVsIGJlbG93LlxuZXhwb3J0IGZ1bmN0aW9uIHRpbGVNYXJrQWN0aW9ucyhjb250ZXh0OiBSZXBvcnRNYXJrQ29udGV4dCk6IFJlcG9ydE1hcmtBY3Rpb25bXSB7XG4gIHJldHVybiBjb250ZXh0LmZlYXR1cmVzLmluY2x1ZGVzKCdkcmlsbCcpICYmIGNvbnRleHQuZGF0YT8uZHJpbGw/Lm5leHQgPyBbJ2RyaWxsJ10gOiBbXTtcbn1cblxuLy8gV2hhdCB0aGlzIGNsaWNrIG1heSBkbzogdGhlIHRpbGUncyBhY3Rpb25zIHRoYXQgYXBwbHkgdG8gdGhlIGNsaWNrZWQgbWFyay5cbi8vIERyaWxsIGRvd24gbmVlZHMgYSBwZXJpb2Qgb24gdGhlIGRyaWxsZWQgYXhpcywgc28gYSBLUEkncyB2YWx1ZSBhbmQgYSBtYXJrXG4vLyBvZmYgdGhhdCBheGlzIG5ldmVyIGRyaWxsLlxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtBY3Rpb25zKGNsaWNrOiBSZXBvcnRNYXJrQ2xpY2ssIGNvbnRleHQ6IFJlcG9ydE1hcmtDb250ZXh0KTogUmVwb3J0TWFya0FjdGlvbltdIHtcbiAgcmV0dXJuIHRpbGVNYXJrQWN0aW9ucyhjb250ZXh0KVxuICAgIC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZHJpbGwnIHx8IGRyaWxsUG9pbnQoY2xpY2ssIGNvbnRleHQuZGF0YT8uZHJpbGwpICE9PSBudWxsKTtcbn1cblxuLy8gVGhlIGFjdGlvbiBydWxlIChCMTAuMikuIE5vIGFjdGlvbjogbm90aGluZyBoYXBwZW5zLiBBIHRvdWNoIChvciBhIHBlbilcbi8vIG9uIGEgY2hhcnQncyBtYXJrIGZpcnN0IHNob3dzIGl0cyB0b29sdGlwIG9ubHksIGFuZCBhIHNlY29uZCB0YXAgb24gdGhlXG4vLyBzYW1lIG1hcmsgYWN0czsgYSBLUEkncyB2YWx1ZSBoYXMgbm8gdG9vbHRpcCwgc28gaXRzIGZpcnN0IHRhcCBhY3RzLiBUaGVuXG4vLyBvbmUgYWN0aW9uIHJ1bnMgYXQgb25jZSwgYW5kIHR3byBvciBtb3JlIG9wZW4gdGhlIG1lbnUgYXQgdGhlIG1hcmsuXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlTWFya0NsaWNrKFxuICBjbGljazogUmVwb3J0TWFya0NsaWNrLFxuICBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10sXG4gIHRvdWNoZWQ6IHN0cmluZyB8IG51bGwsXG4pOiBSZXBvcnRNYXJrRGVjaXNpb24ge1xuICBpZiAoIWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgb3V0Y29tZTogJ25vbmUnLCBhY3Rpb25zOiBbXSwgdG91Y2hlZDogbnVsbCB9O1xuICB9XG5cbiAgY29uc3Qga2V5ID0gbWFya0tleShjbGljayk7XG4gIGlmIChjbGljay5wb2ludGVyLnR5cGUgIT09ICdtb3VzZScgJiYgY2xpY2sucG9pbnRzLmxlbmd0aCAmJiB0b3VjaGVkICE9PSBrZXkpIHtcbiAgICByZXR1cm4geyBvdXRjb21lOiAndG9vbHRpcCcsIGFjdGlvbnM6IFsuLi5hY3Rpb25zXSwgdG91Y2hlZDoga2V5IH07XG4gIH1cblxuICByZXR1cm4geyBvdXRjb21lOiBhY3Rpb25zLmxlbmd0aCA9PT0gMSA/ICdydW4nIDogJ21lbnUnLCBhY3Rpb25zOiBbLi4uYWN0aW9uc10sIHRvdWNoZWQ6IG51bGwgfTtcbn1cblxuLy8gV2hpY2ggbWFyayBhIGNsaWNrIGlzIG9uOiBpdHMgdGlsZSwgaXRzIHJhdyB2YWx1ZXMgYW5kIGl0cyBzZXJpZXMuIFR3b1xuLy8gdGFwcyBhcmUgb24gdGhlIHNhbWUgbWFyayB3aGVuIHRoZWlyIGtleXMgbWF0Y2guXG5leHBvcnQgZnVuY3Rpb24gbWFya0tleShjbGljazogUmVwb3J0TWFya0NsaWNrKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFtcbiAgICBjbGljay5jb21wb25lbnRJZCxcbiAgICBjbGljay5wb2ludHMubWFwKChwb2ludCkgPT4gW3BvaW50LmNvbHVtbiwgcG9pbnQucmF3ID8/IG51bGxdKSxcbiAgICBjbGljay5tZWFzdXJlLFxuICBdKTtcbn1cblxuLy8gVGhlIHBvaW50IGEgZHJpbGwgc3RlcHMgaW50bzogdGhlIGNsaWNrZWQgcGVyaW9kIG9uIHRoZSBkcmlsbGVkIGF4aXMsIG9yXG4vLyBudWxsIHdoZW4gdGhlIGNsaWNrIGhhcyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIGRyaWxsUG9pbnQoXG4gIGNsaWNrOiBSZXBvcnRNYXJrQ2xpY2ssXG4gIGRyaWxsOiBDb21wb25lbnREYXRhRHJpbGwgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVwb3J0TWFya1BvaW50IHwgbnVsbCB7XG4gIHJldHVybiBkcmlsbFxuICAgID8gY2xpY2sucG9pbnRzLmZpbmQoKHBvaW50KSA9PiBwb2ludC5jb2x1bW4gPT09IGRyaWxsLmF4aXMgJiYgISFwb2ludC5wZXJpb2QpID8/IG51bGxcbiAgICA6IG51bGw7XG59XG5cbi8vIFRoZSBkcmlsbCBwYXRoIG9uZSBsZXZlbCBkb3duIGZyb20gd2hhdCB0aGUgY2hhcnQgc2hvd3M6IHRoZSBzdGVwcyB0aGVcbi8vIHNlcnZlciBhcHBsaWVkIChkcmlsbC5wYXRoKSwgdGhlbiB0aGUgY2xpY2tlZCBwZXJpb2QgYXQgdGhlIGxldmVsIGl0IHdhc1xuLy8gY2xpY2tlZCBhdCAoZHJpbGwubGV2ZWwpLCB3aGljaCB0aGUgY2hhcnQgdGhlbiBzaG93cyBhdCBkcmlsbC5uZXh0LiBBIHN0ZXBcbi8vIG5hbWVzIHRoZSBwZXJpb2QgY2xpY2tlZCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYXQgdGhlIGNoYXJ0J3MgdG9wIGxldmVsLlxuLy8gbnVsbCB3aGVuIHRoZSBjaGFydCBpcyBhdCBpdHMgbG93ZXN0IGxldmVsIG9yIHRoZSBjbGljayBoYXMgbm8gcGVyaW9kLlxuZXhwb3J0IGZ1bmN0aW9uIGRyaWxsRG93blBhdGgoXG4gIGRyaWxsOiBDb21wb25lbnREYXRhRHJpbGwgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjbGljazogUmVwb3J0TWFya0NsaWNrLFxuKTogUmVwb3J0RHJpbGxTdGVwW10gfCBudWxsIHtcbiAgY29uc3QgcG9pbnQgPSBkcmlsbFBvaW50KGNsaWNrLCBkcmlsbCk7XG5cbiAgaWYgKCFkcmlsbD8ubmV4dCB8fCAhcG9pbnQ/LnBlcmlvZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5kcmlsbC5wYXRoLm1hcCgoY3J1bWIpID0+ICh7IGxldmVsOiBjcnVtYi5sZXZlbCwgdmFsdWU6IGNydW1iLnZhbHVlIH0pKSxcbiAgICB7IGxldmVsOiBkcmlsbC5sZXZlbCwgdmFsdWU6IHBvaW50LnBlcmlvZCB9LFxuICBdO1xufVxuXG4vLyBUaGUgZXh0cmFjdGVkIHNlcmllcyBhIGhpdCBpcyBvbjogaXRzIGluZGV4LCAnYmFuZCcgZm9yIGEgY2F0ZWdvcnknc1xuLy8gZW1wdHkgYmFuZCwgb3IgbnVsbCBmb3Igd2hhdCBpcyBub3QgYSBtYXJrLiBBbiBheGlzIGNoYXJ0J3MgcGFydGlhbFxuLy8gc2VnbWVudCBtYXBzIHRvIHRoZSBzZXJpZXMgaXQgY29udGludWVzOyBhIHJlZmVyZW5jZSBjYXJyaWVyIG1hcHMgdG9cbi8vIG5vdGhpbmcuIEEgd2F0ZXJmYWxsJ3Mgc3RlcHMgYXJlIGl0cyBzZWNvbmQgc2VyaWVzICh0aGUgZmlyc3QgaXMgdGhlXG4vLyBpbnZpc2libGUgYmFzZSk7IGEgcGllJ3Mgc2xpY2VzIGl0cyBvbmx5IG9uZS5cbmZ1bmN0aW9uIGhpdFNlcmllcyhjb25maWc6IENoYXJ0Q29uZmlnLCBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLCBoaXQ6IFJlcG9ydENoYXJ0SGl0KTogbnVtYmVyIHwgJ2JhbmQnIHwgbnVsbCB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgaWYgKGhpdC5zZXJpZXNJbmRleCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyA/IG51bGwgOiAnYmFuZCc7XG4gIH1cblxuICBpZiAoY2hhcnRUeXBlID09PSAnd2F0ZXJmYWxsJykge1xuICAgIHJldHVybiBoaXQuc2VyaWVzSW5kZXggPT09IDEgJiYgZXh0cmFjdGVkLnNlcmllcy5sZW5ndGggPyAwIDogbnVsbDtcbiAgfVxuXG4gIGlmIChoaXQuc2VyaWVzSW5kZXggPj0gMCAmJiBoaXQuc2VyaWVzSW5kZXggPCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyA/IDAgOiBoaXQuc2VyaWVzSW5kZXg7XG4gIH1cblxuICBjb25zdCBvd25lciA9IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnID8gbnVsbCA6IHBhcnRpYWxTZWdtZW50T3duZXIoaGl0LnNlcmllc0lkKTtcblxuICByZXR1cm4gb3duZXIgIT09IG51bGwgJiYgb3duZXIgPCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCA/IG93bmVyIDogbnVsbDtcbn1cblxuLy8gVGhlIGNsaWNrZWQgY2F0ZWdvcnksIHRoZW4gdGhlIHNwbGl0IHZhbHVlIHdoZW4gdGhlIGNoYXJ0IHNwbGl0cyBieVxuLy8gYW5vdGhlciBjb2x1bW4gdGhhbiBpdHMgYXhpcyAoYSBjb2xvckJ5IGNoYXJ0J3Mgc2VyaWVzIGFyZSBpdHMgY2F0ZWdvcmllcykuXG5mdW5jdGlvbiBjaGFydFBvaW50cyhcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuICBzZXJpZXM6IG51bWJlciB8IG51bGwsXG4pOiBSZXBvcnRNYXJrUG9pbnRbXSB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gIGNvbnN0IHsgeENvbHVtbiwgZ3JvdXBDb2x1bW4gfSA9IGNoYXJ0Q29sdW1ucyhjb25maWcsIGRhdGEpO1xuICBjb25zdCBwb2ludHMgPSBbY2F0ZWdvcnlQb2ludChjb25maWcsIGRhdGEsIGNvbnRleHQsIGV4dHJhY3RlZCwgeENvbHVtbiwgZGF0YUluZGV4KV07XG5cbiAgaWYgKHNlcmllcyAhPT0gbnVsbCAmJiBncm91cENvbHVtbiAmJiBncm91cENvbHVtbiAhPT0geENvbHVtbikge1xuICAgIHBvaW50cy5wdXNoKHsgY29sdW1uOiBncm91cENvbHVtbiwgcmF3OiBleHRyYWN0ZWQucmF3R3JvdXBzW3Nlcmllc10sIGxhYmVsOiBleHRyYWN0ZWQuc2VyaWVzW3Nlcmllc10ubmFtZSB9KTtcbiAgfVxuXG4gIHJldHVybiBwb2ludHM7XG59XG5cbi8vIFRoZSBjYXRlZ29yeSBhcyB0aGUgcm93cyBob2xkIGl0IGFuZCBhcyB0aGUgYXhpcyB3cm90ZSBpdC4gT24gYSB0aW1lIGF4aXNcbi8vIGl0IGFsc28gZ2l2ZXMgdGhlIHBlcmlvZCdzIGZpcnN0IGRheSBhbmQgdGhlIGdyYWluLCBhbmQgcmVhZHMgYXMgdGhlXG4vLyB0b29sdGlwIG5hbWVzIGl0ICgnSmFudWFyeSAyMDI2Jyk7IGEgcGllIHdyaXRlcyBpdHMgc2xpY2VzIGFzIHRoZXkgY29tZS5cbmZ1bmN0aW9uIGNhdGVnb3J5UG9pbnQoXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGNvbHVtbjogc3RyaW5nLFxuICBkYXRhSW5kZXg6IG51bWJlcixcbik6IFJlcG9ydE1hcmtQb2ludCB7XG4gIGNvbnN0IHJhdyA9IGV4dHJhY3RlZC5yYXdDYXRlZ29yaWVzW2RhdGFJbmRleF07XG4gIGNvbnN0IGxhYmVsID0gZXh0cmFjdGVkLmNhdGVnb3JpZXNbZGF0YUluZGV4XTtcbiAgY29uc3QgZ3JhaW4gPSBpc0NoYXJ0R3JhbnVsYXJpdHkoZGF0YS5ncmFudWxhcml0eSkgPyBkYXRhLmdyYW51bGFyaXR5IDogbnVsbDtcbiAgY29uc3QgcGVyaW9kID0gZ3JhaW4gJiYgcmF3ICE9PSBudWxsICYmIHJhdyAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHJhdykuc2xpY2UoMCwgMTApIDogJyc7XG5cbiAgaWYgKCFncmFpbiB8fCAhaXNDYWxlbmRhckRheShwZXJpb2QpKSB7XG4gICAgcmV0dXJuIHsgY29sdW1uLCByYXcsIGxhYmVsIH07XG4gIH1cblxuICBjb25zdCBwaWUgPSBjb25maWcuY2hhcnRUeXBlID09PSAncGllJyB8fCBjb25maWcuY2hhcnRUeXBlID09PSAnZG9udXQnO1xuXG4gIHJldHVybiB7XG4gICAgY29sdW1uLFxuICAgIHJhdyxcbiAgICBsYWJlbDogcGllID8gbGFiZWwgOiBmb3JtYXRQZXJpb2RMYWJlbChTdHJpbmcocmF3KSwgZ3JhaW4sIHRydWUsIGNvbnRleHQubG9jYWxlLCBjaGFydERhdGVMYWJlbChjb25maWcpKSxcbiAgICBwZXJpb2QsXG4gICAgZ3JhaW4sXG4gIH07XG59XG5cbi8vIEEgbnVtYmVyIGFzIGEgY2VsbCBob2xkcyBpdCAoYSBudW1iZXIgb3IgbnVtZXJpYyB0ZXh0KSwgZWxzZSBudWxsLlxuZnVuY3Rpb24gbnVtZXJpYyh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBOdW1iZXIodmFsdWUpO1xufVxuXG4vLyBBIGZpbml0ZSBudW1iZXIsIGVsc2UgbnVsbC5cbmZ1bmN0aW9uIGZpbml0ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBudWxsO1xufVxuIl19