@firestitch/report 18.17.0 → 18.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/data/report.data.d.ts +0 -2
- package/app/reports/export/report-export-collector.service.d.ts +6 -0
- package/app/reports/export/report-export.service.d.ts +1 -0
- package/app/reports/export/report-pdf.service.d.ts +5 -0
- package/esm2022/app/reports/components/component-grid/report-grid-formatter.mjs +26 -4
- package/esm2022/app/reports/data/report.data.mjs +3 -3
- package/esm2022/app/reports/export/report-export-collector.service.mjs +1 -1
- package/esm2022/app/reports/export/report-export.service.mjs +31 -5
- package/esm2022/app/reports/export/report-grid-export.mjs +5 -4
- package/esm2022/app/reports/export/report-pdf.service.mjs +212 -80
- package/esm2022/app/reports/export/report-pptx.service.mjs +4 -1
- package/fesm2022/{firestitch-report-echarts-7AUAX6RO.mjs → firestitch-report-echarts-CBoGhanh.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-7AUAX6RO.mjs.map → firestitch-report-echarts-CBoGhanh.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-DgeCapUH.mjs → firestitch-report-firestitch-report-MBuBuGiA.mjs} +276 -95
- package/fesm2022/firestitch-report-firestitch-report-MBuBuGiA.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +2 -2
- package/fesm2022/firestitch-report-firestitch-report-DgeCapUH.mjs.map +0 -1
|
@@ -687,4 +687,4 @@ export class ReportExportCollectorService {
|
|
|
687
687
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExportCollectorService, decorators: [{
|
|
688
688
|
type: Injectable
|
|
689
689
|
}] });
|
|
690
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTRCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNFLE9BQU8sRUFBYyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUNMLFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQXNCbkIsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLGdCQUFn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QUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDTixDQUFDO3dHQTdjVSw0QkFBNEI7NEdBQTVCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkRm9ybWF0dGVyLCBHcmlkVGFibGUsIHJlYWRHcmlkVGFibGUgfSBmcm9tICdAZmlyZXN0aXRjaC9ncmlkJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIGZyb20sIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHJlcG9ydEdyaWRGb3JtYXR0ZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1ncmlkL3JlcG9ydC1ncmlkLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBSZXBvcnRHcmlkU291cmNlIH0gZnJvbSAnLi4vZGF0YS9yZXBvcnQtZ3JpZC1zb3VyY2UnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHsgY3J1bWJlZFRpdGxlLCBkcmlsbENydW1iTGFiZWxzIH0gZnJvbSAnLi4vZHJpbGwtY3J1bWJzJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgbGF5ZXJGaWx0ZXJGaWVsZHMsIHRleHRGaWx0ZXJGaWVsZHMgfSBmcm9tICcuLi9maWx0ZXItdGV4dCc7XG5pbXBvcnQge1xuICBEQVlfTE9ORyxcbiAgZm9ybWF0TG9jYWxEYXRlLFxuICBmb3JtYXROdW1iZXIsXG4gIGZvcm1hdE91dHB1dFZhbHVlLFxuICBmb3JtYXRSZXBvcnREYXRlLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIHJlc29sdmVSZXBvcnRUaW1lem9uZSxcbn0gZnJvbSAnLi4vZm9ybWF0JztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtbGluZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZXNJbnB1dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lcy1pbnB1dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0U25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtc25hcHNob3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFN0YXRlU25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1zdGF0ZS1zbmFwc2hvdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YSxcbiAgQ29tcG9uZW50RGF0YVN0YXRlLFxuICBGaWx0ZXJHcm91cFZhbHVlLFxuICBMaXN0Q29sdW1uLFxuICBMaXN0Q29uZmlnLFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0TG9jYWxlVGFnLFxuICBSZXBvcnRNYXN0ZXIsXG4gIFJlcG9ydFBhZ2UsXG4gIFJlcG9ydFBhZ2VWYWx1ZSxcbiAgUmVwb3J0UmVsYXRpdmVSYW5nZSxcbiAgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEtwaUNhcmRWaWV3IH0gZnJvbSAnLi4va3BpLWNhcmQnO1xuaW1wb3J0IHtcbiAgTElTVF9UT1RBTF9MQUJFTCxcbiAgTGlzdE91dHB1dENvbHVtbixcbiAgbGlzdEhpZGRlbkNvbHVtbnMsXG4gIGxpc3RPdXRwdXRDb2x1bW5zLFxuICBsaXN0VG90YWxzTGFiZWxDb2x1bW4sXG59IGZyb20gJy4uL2xpc3QtY29uZmlnJztcbmltcG9ydCB7IHBpdm90Q29sdW1uU3BlY3MgfSBmcm9tICcuLi9vcHRpb24tYnVpbGRlcic7XG5pbXBvcnQgeyBjb21wb25lbnROb3RlTGluZXMsIGNvbXBvbmVudFdpbmRvd3NMaW5lIH0gZnJvbSAnLi4vb3V0cHV0LW5vdGVzJztcbmltcG9ydCB7IGdyb3VwT3B0aW9uc1JlYWRlciwgcmVzb2x2ZU9wdGlvblZhbHVlcyB9IGZyb20gJy4uL3JlcG9ydC1maWx0ZXItaXRlbXMnO1xuaW1wb3J0IHsgYXV0aG9yZWRHcmlkTGF5b3V0IH0gZnJvbSAnLi4vcmVwb3J0LWdyaWQtbGF5b3V0JztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4uL3JlcG9ydC10aWxlJztcbmltcG9ydCB7IG9mZmVyZWRWaWV3ZXJGZWF0dXJlcyB9IGZyb20gJy4uL3JlcG9ydC12aWV3ZXItZmVhdHVyZXMnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dEZpbHRlckZpZWxkLCBUZXh0VG9rZW5Db250ZXh0LCBUZXh0VmFsdWUsIGZpbGxUaXRsZVRva2VucywgdGV4dFBsYWluIH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyB0aWxlRGF0YVN0YXRlLCB2YWx1ZXNNYXRjaEFueUdyb3VwSWRzIH0gZnJvbSAnLi4vdGlsZS1kYXRhLXN0YXRlJztcbmltcG9ydCB7XG4gIGZhaWxlZFZhbHVlS2V5cywgcmVwb3J0Q29tcG9uZW50cywgc2hvd25WYWx1ZXMsIHRleHRWYWx1ZXMsIHZhbHVlS2V5cyxcbn0gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHsgZXhwb3J0TGluZXMsIG1hdGNoTGluZVRleHQsIHZhbHVlUGlja3MgfSBmcm9tICcuL3JlcG9ydC1maWx0ZXItbGluZXMnO1xuaW1wb3J0IHsgR1JJRF9FWFBPUlRfQ09MVU1OUywgZ3JpZEV4cG9ydE5vdGVzIH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1leHBvcnQnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGVkQ29tcG9uZW50IHtcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQ7XG4gIC8vIG51bGwgPSBpdHMgcXVlcnkgZmFpbGVkOyBleHBvcnRzIHNob3cgYSBub3RlLiBBbHdheXMgbnVsbCBmb3IgYSB0ZXh0XG4gIC8vIGJsb2NrLCB3aGljaCBoYXMgbm8gcXVlcnkg4oCUIHNlZSBpc0ZhaWxlZCgpLlxuICBkYXRhOiBDb21wb25lbnREYXRhIHwgbnVsbDtcbiAgLy8gVGhlIHRleHQgYSBsaXN0IHdhcyBzZWFyY2hlZCBieSB3aGVuIGl0IHdhcyBmZXRjaGVkOyBhYnNlbnQgd2hlbiBpdHNcbiAgLy8gc2VhcmNoIGJveCB3YXMgZW1wdHksIGFuZCBmb3IgZXZlcnkgb3RoZXIgY29tcG9uZW50LlxuICBzZWFyY2g/OiBzdHJpbmc7XG4gIC8vIFRoZSBjb25maWcgY29sdW1ucyBhIHZpZXdlciBoaWQgb24gYSBwbGFpbiBsaXN0LCB3aGljaCBpdHMgdGFibGUgbGVhdmVzXG4gIC8vIG91dCAobGlzdENvbHVtbnMpOyBlbXB0eSBmb3IgZXZlcnkgb3RoZXIgY29tcG9uZW50LlxuICBoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXTtcbiAgLy8gVGhlIGJyZWFkY3J1bWIgb2YgdGhlIGRyaWxsIHBhdGggYSBjaGFydCB3YXMgcmVhZCBhdCAodGhlIHBhdGggaXRzXG4gIC8vIGFuc3dlciBhcHBsaWVkKSwgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZTsgYWJzZW50IGF0IHRoZSBjaGFydCdzIHRvcC5cbiAgY3J1bWJzPzogc3RyaW5nW107XG4gIC8vIEEgdGFibGUgdGlsZSBhcyB0aGUgc2NyZWVuIGRyYXdzIGl0IChyZWFkR3JpZFRhYmxlKCkpLCB1cCB0byB0aGVcbiAgLy8gcmVuZGVyZXIncyByb3cgY2FwIGFuZCBHUklEX0VYUE9SVF9DT0xVTU5TIGNvbHVtbnM7IGl0cyBkYXRhIGlzIHRoZW5cbiAgLy8gdGhlIHJlYWQncyByZXBvcnQgbGluZSwgd2l0aCBubyByb3dzLiBBYnNlbnQgZm9yIGV2ZXJ5IG90aGVyIGNvbXBvbmVudC5cbiAgdGFibGU/OiBHcmlkVGFibGU7XG4gIC8vIFRoZSBsaW5lcyBhIHRhYmxlIGFkZHMgdW5kZXIgaXRzIGJveCAoZ3JpZEV4cG9ydE5vdGVzKCkpLlxuICB0YWJsZU5vdGVzPzogc3RyaW5nW107XG4gIC8vIEEgdGFibGUgd2hvc2UgY29sdW1uIGZpbHRlcnMgbmFycm93ZWQgaXRzIHJvd3MsIHdoaWNoIGl0cyB0aXRsZSBzYXlzLlxuICBmaWx0ZXJlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGVkUGFnZSB7XG4gIHBhZ2U6IFJlcG9ydFBhZ2U7XG4gIGNvbXBvbmVudHM6IENvbGxlY3RlZENvbXBvbmVudFtdO1xuICAvLyBXaGF0IHRoZSBwYWdlJ3MgdGV4dCBibG9ja3MgZmlsbCB0aGVpciB7e3ZhbHVlLjxrZXk+fX0gdG9rZW5zIHdpdGgsIGJ5IGtleVxuICAvLyAodGV4dFZhbHVlcyksIGFuZCB0aGUga2V5cyBvZiB0aGUgdmFsdWVzIGl0cyB0ZXh0IHNob3dzIHdob3NlIG51bWJlcnMgZGlkXG4gIC8vIG5vdCBjb21lIGJhY2s6IHRoZSByZXF1ZXN0IGZhaWxlZCwgb3IgdGhlIHZhbHVlJ3Mgb3duIHF1ZXJ5IGRpZC5cbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBUZXh0VmFsdWU+O1xuICBmYWlsZWRWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RlZFJlcG9ydCB7XG4gIHJlcG9ydDogUmVwb3J0O1xuICBwYWdlczogQ29sbGVjdGVkUGFnZVtdO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIncyB2YWx1ZXMsIGFzIGEgcGFnZSdzOiByZWFkIG9uY2UgZm9yIHRoZSB3aG9sZVxuICAvLyBmaWxlLCBzaW5jZSBldmVyeSBwYWdlIHRoYXQgc2hvd3MgdGhlIG1hc3RlciBzaG93cyB0aGUgc2FtZSBudW1iZXJzLlxuICBtYXN0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT47XG4gIG1hc3RlckZhaWxlZFZhbHVlczogc3RyaW5nW107XG4gIC8vIFRoZSBmaWx0ZXIgbGluZXMgb2YgdGhlIHRpdGxlIHNsaWRlL3BhZ2UsIGluIG9yZGVyOiB0aGVcbiAgLy8gZXhwb3J0J3MgZmlsdGVyIGxpbmVzIChjb3ZlckZpbHRlckxpbmVzKSwgdGhlbiB0aGUgbWF0Y2ggd2hpbGUgaXQgaXNcbiAgLy8gJ2FueScuXG4gIGZpbHRlclN1bW1hcnk6IHN0cmluZ1tdO1xuICAvLyBXaGF0IGVhY2gge3tmaWx0ZXIuPGlkPn19IHRva2VuIHByaW50cywgYnkgZmlsdGVyIGdyb3VwIGlkOiB0aGUgZmlsdGVyXG4gIC8vIGJhcidzIHZhbHVlcyBhcyB0aGUgc2NyZWVuIHdvcmRzIHRoZW0sIHJlYWQgb25jZSBzbyBldmVyeSBwYWdlIG9mIHRoZVxuICAvLyBmaWxlIGFncmVlcy4gRXZlcnkgZ3JvdXAnczogYSBwYWdlIHJlYWRzIGl0cyBvd24gKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgZmlsdGVyRmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+O1xuICAvLyBXaGF0IHRoZSBudW1iZXJzIGFyZSBtZWFzdXJlZCBpbiwgZm9yIHRoZSB0aXRsZSBzbGlkZS9wYWdlOiB0aGUgem9uZSBhbmRcbiAgLy8gdGhlIGN1cnJlbmN5IHRoZSBzZXJ2ZXIgcmVzb2x2ZWQgZm9yIHRoZSByZXBvcnQuIEVhY2ggaXMgbGVmdCBvdXQgd2hlbiB0aGVcbiAgLy8gc2VydmVyIGRvZXMgbm90IHNlbmQgaXQsIHJhdGhlciB0aGFuIGEgZ3Vlc3MgdGhhdCB3b3VsZCBiZSB3cm9uZyB3aGVuZXZlclxuICAvLyB0aGUgZGVmYXVsdCBhcHBsaWVzLlxuICBjb250ZXh0TGluZXM6IHN0cmluZ1tdO1xuICAvLyBIb3cgdGhlIG9wZW4gcmVwb3J0IHdyaXRlcyBpdHMgbnVtYmVycyBhbmQgZGF0ZXMgKGl0cyBsb2NhbGUsIGN1cnJlbmN5XG4gIC8vIGFuZCBwZXJjZW50IGZvcm0pLCByZWFkIG9uY2Ugc28gZXZlcnkgcGFnZSBvZiB0aGUgZmlsZSBhZ3JlZXMuXG4gIGZvcm1hdENvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQ7XG59XG5cbi8vIEhvdyBhbiBleHBvcnQgd29yZHMgdGhlIHNjcmVlbiAoZXhwb3J0V29yZGluZyk6IHRoZSBmaWx0ZXIgbGluZXMgKHRoZVxuLy8gY292ZXIncywgYW5kIHRoZSB6aXAncyBub3RlcyksIHdoYXQgZWFjaCB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzLCBieVxuLy8gZmlsdGVyIGdyb3VwIGlkLCBhbmQgZWFjaCB0aWxlJ3MgdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQsIGJ5XG4vLyBjb21wb25lbnQgaWQsIHdoaWNoIHRoZSB6aXAgbmFtZXMgdGhlIHRpbGUncyBmaWxlIGFmdGVyLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRFeHBvcnRXb3JkaW5nIHtcbiAgbGluZXM6IFJlcG9ydEV4cG9ydExpbmVbXTtcbiAgZmlsdGVyRmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+O1xuICB0aXRsZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz47XG59XG5cbi8vIEEgdGV4dCBibG9jayB3aG9zZSB3b3JkcyBkbyBub3QgZml0IGl0cyBib3ggaW4gYSBidWlsdCBmaWxlOiB0aGUgYmxvY2ssIHRoZVxuLy8gcGFnZSB0aGUgb3ZlcmZsb3cgZ2F0ZSBuYW1lcyBpdCB1bmRlciAoSEVBREVSX0ZPT1RFUl9OQU1FIGZvciBhIGhlYWRlciBvclxuLy8gZm9vdGVyIGJsb2NrKSBhbmQgdGhlIHN0YXJ0IG9mIGl0cyB0ZXh0LCBzbyB0aGUgcmVhZGVyIGNhbiBmaW5kIGl0LlxuZXhwb3J0IGludGVyZmFjZSBUZXh0T3ZlcmZsb3cge1xuICBjb21wb25lbnRJZDogbnVtYmVyO1xuICBwYWdlOiBzdHJpbmc7XG4gIHNuaXBwZXQ6IHN0cmluZztcbn1cblxuLy8gQSBmaWxlIGJ1aWx0IGFuZCBub3QgeWV0IHNhdmVkLiBXaGV0aGVyIHRleHQgZml0cyBpdHMgYm94IGlzIGtub3duIG9ubHkgb25jZVxuLy8gdGhlIGZpbGUgaXMgYnVpbHQsIHNvIHRoZSBleHBvcnQgYXNrcyBhYm91dCB0aGUgb3ZlcmZsb3dzIGJldHdlZW4gdGhlIGJ1aWxkXG4vLyBhbmQgdGhlIHNhdmU6IGBvdmVyZmxvd05vdGVgIHNheXMgd2hhdCB0aGlzIGZvcm1hdCBkb2VzIHdpdGggc3VjaCB0ZXh0LCBhbmRcbi8vIGBzYXZlYCB3cml0ZXMgdGhlIGZpbGUuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWx0RXhwb3J0IHtcbiAgb3ZlcmZsb3dzOiBUZXh0T3ZlcmZsb3dbXTtcbiAgb3ZlcmZsb3dOb3RlOiBzdHJpbmc7XG4gIHNhdmU6ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuXG4vLyBPbmUgZXhwb3J0ZWQgbGlzdCBjb2x1bW46IHRoZSBjZWxsIGtleSwgaXRzIGhlYWRpbmcgYW5kIGl0cyBmb3JtYXQsIGFuZFxuLy8gd2hldGhlciBpdHMgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBldmVyeSBleHBvcnQgcmlnaHQtYWxpZ25zXG4vLyAoaGVhZGVyIGluY2x1ZGVkKSBhcyB0aGUgc2NyZWVuIGRvZXMuIEEgY29sdW1uIHRoYXQgaG9sZHMgYSBjb21wYXJlZCxcbi8vIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjYXJyaWVzIGhvdyBpdCBpcyB3cml0dGVuIChvdXRwdXQpLCBhbmRcbi8vIGhvbGRzIG51bWJlcnMgd2hldGhlciBvciBub3QgaXQgbmFtZXMgYSBmb3JtYXQuXG5leHBvcnQgdHlwZSBFeHBvcnRMaXN0Q29sdW1uID0gTGlzdENvbHVtbiAmIHsgbnVtZXJpYzogYm9vbGVhbjsgb3V0cHV0PzogTGlzdE91dHB1dENvbHVtbiB9O1xuXG4vLyBIb3cgdGFsbCBlYWNoIHBhcnQgb2YgYW4gZXhwb3J0ZWQgS1BJIGNhcmQgaXMsIGluIHRoZSByZW5kZXJlcidzIHVuaXRcbi8vIChwb2ludHMgaW4gdGhlIFBERiwgaW5jaGVzIGluIHRoZSBkZWNrKS4gQSBub3RlIGlzIG9uZSBsaW5lLlxuZXhwb3J0IGludGVyZmFjZSBLcGlFeHBvcnRIZWlnaHRzIHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw6IG51bWJlcjtcbiAgZGVsdGE6IG51bWJlcjtcbiAgd2luZG93OiBudW1iZXI7XG4gIHRhcmdldDogbnVtYmVyO1xuICBzcGFya2xpbmU6IG51bWJlcjtcbiAgbm90ZTogbnVtYmVyO1xufVxuXG4vLyBUaGUgcGFydHMgb2YgYSBLUEkgY2FyZCBhbiBleHBvcnQgZHJhd3M6IHRoZSB2YWx1ZSBhbmQgaXRzIGxhYmVsIGFsd2F5cyxcbi8vIHRoZSByZXN0IHdoZW4gdGhlIGNhcmQgaGFzIHRoZW0gYW5kIHRoZSB0aWxlIGhhcyByb29tIChrcGlFeHBvcnRQYXJ0cykuXG4vLyBzY2FsZSBzaHJpbmtzIHRoZSByb3dzIGFuZCB0aGVpciB0ZXh0IHdoZW4gdGhlIHBhcnRzIHRoYXQgYWx3YXlzIHN0YXkgc3RpbGxcbi8vIHN0YW5kIHRhbGxlciB0aGFuIHRoZSB0aWxlIChzY2FsZWRLcGlIZWlnaHRzKTogMSB3aGVuIHRoZXkgZml0LlxuZXhwb3J0IGludGVyZmFjZSBLcGlFeHBvcnRQYXJ0cyB7XG4gIGRlbHRhOiBib29sZWFuO1xuICB3aW5kb3c6IGJvb2xlYW47XG4gIHRhcmdldDogYm9vbGVhbjtcbiAgc3BhcmtsaW5lOiBib29sZWFuO1xuICBub3Rlczogc3RyaW5nW107XG4gIHNjYWxlOiBudW1iZXI7XG59XG5cbi8vIEhvdyBmYXIgYSBLUEkgY2FyZCdzIHJvd3Mgc2hyaW5rIHRvIGZpdCBhIHNob3J0IHRpbGUuIEEgdGlsZSBzaG9ydGVyIHN0aWxsXG4vLyBsZXRzIHRoZSBjYXJkIHJ1biBwYXN0IGl0cyBmb290IHJhdGhlciB0aGFuIHByaW50IGl0IHVucmVhZGFibHkgc21hbGwuXG5jb25zdCBLUElfRVhQT1JUX01JTl9TQ0FMRSA9IDAuNTtcblxuLy8gSG93IG1hbnkgdGlsZSBxdWVyaWVzIGFuIGV4cG9ydCBydW5zIGF0IG9uY2UuXG4vL1xuLy8gTm90IGEgcG9saXRlbmVzcyBzZXR0aW5nIOKAlCBpdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgZGVjayBhbmQgYSBicm9rZW5cbi8vIG9uZS4gVGhlc2UgcXVlcmllcyBhcmUgaGVhdnkgYW5kIHJlYWQgdGhlIHNhbWUgdGFibGVzLCBzbyBmaXJpbmcgYWxsIG9mIHRoZW1cbi8vIHRvZ2V0aGVyIHB1dHMgZXZlcnkgb25lIGluIGNvbnRlbnRpb24gZm9yIHRoZSBzYW1lIGRhdGFiYXNlIGF0IHRoZSBzYW1lXG4vLyBtb21lbnQgYW5kIHRoZXkgY3Jvc3MgdGhlIHN0YXRlbWVudCBjZWlsaW5nIGFzIGEgZ3JvdXA6IG1lYXN1cmVkIG9uIHJlcG9ydFxuLy8gMjgsIHRlbiB0aWxlcyB0aGF0IGVhY2ggYW5zd2VyIGluIDktMjRzIHJ1biBvbmUgYWZ0ZXIgYW5vdGhlciBhbGwgZmFpbGVkIGF0XG4vLyB+MzBzIHdoZW4gcmVsZWFzZWQgdG9nZXRoZXIuIENvbmN1cnJlbmN5IGJ1eXMgd2FsbC1jbG9jayBvbmx5IHVwIHRvIHRoZSBwb2ludFxuLy8gd2hlcmUgdGhlIHF1ZXJpZXMgc3RhcnQgdGFraW5nIGl0IGJhY2sgb2ZmIGVhY2ggb3RoZXIsIGFuZCBwYXN0IHRoYXQgaXQgYnV5c1xuLy8gZmFpbHVyZXMuXG5jb25zdCBFWFBPUlRfQ09OQ1VSUkVOQ1kgPSAzO1xuXG4vLyBXaGF0IHRoZSBleHBvcnQgZ2F0ZXMgY2FsbCB0aGUgaGVhZGVyIGFuZCBmb290ZXI6IHdoZW4gYSB2YWx1ZSB0aGV5IHNob3dcbi8vIGNhbWUgYmFjayB3aXRob3V0IGl0cyBudW1iZXIsIGFuZCB3aGVuIG9uZSBvZiB0aGVpciB0ZXh0IGJsb2NrcyBkb2VzIG5vdFxuLy8gZml0IGl0cyBib3guXG5leHBvcnQgY29uc3QgSEVBREVSX0ZPT1RFUl9OQU1FID0gJ0hlYWRlciAmIGZvb3Rlcic7XG5cbi8vIEhvdyBtdWNoIG9mIGEgdGV4dCBibG9jaydzIHdvcmRzIHRoZSBleHBvcnQgZ2F0ZXMgcXVvdGUgdG8gbmFtZSBhIGJsb2NrIHRoYXRcbi8vIGRvZXMgbm90IGZpdCBpdHMgYm94LlxuY29uc3QgT1ZFUkZMT1dfU05JUFBFVF9MRU5HVEggPSA0MDtcblxuLy8gT25lIHJlcXVlc3QgaW4gYW4gZXhwb3J0J3MgcXVldWU6IGEgdGlsZSdzIGRhdGEsIG9yIHRoZSBudW1iZXJzIG9mIHRoZVxuLy8gdmFsdWVzIG9uZSBsYXllcidzIHRleHQgcmVhZHMsIHJlYWQgdG9nZXRoZXIuIEEgdmFsdWVzIGpvYidzIHBhZ2VJbmRleCBpc1xuLy8gbnVsbCBmb3IgdGhlIGhlYWRlciBhbmQgZm9vdGVyICh0aGUgbWFzdGVyKTsgYHZhbHVlc2AgaXMgZXZlcnkgdmFsdWUgb2YgdGhlXG4vLyBsYXllciwgd2hpY2ggbmFtZXMgaXRzIHRva2VucyBhbmQgd2hvc2UgZmlsdGVyIHZhbHVlcyB0aGUgcmVxdWVzdCBjYXJyaWVzLFxuLy8gYW5kIGBjb21wb25lbnRzYCB0aGUgb25lcyBpdHMgdGV4dCBzaG93cywgd2hvc2UgbnVtYmVycyB0aGUgZmFpbHVyZSBnYXRlXG4vLyByZXF1aXJlcy5cbnR5cGUgQ29sbGVjdEpvYiA9XG4gIHwgeyBraW5kOiAnY29tcG9uZW50JzsgcGFnZUluZGV4OiBudW1iZXI7IGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50IH1cbiAgfCB7XG4gICAga2luZDogJ3ZhbHVlcyc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIHBhZ2VJZDogbnVtYmVyO1xuICAgIHZhbHVlczogUmVwb3J0Q29tcG9uZW50W107XG4gICAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG4gIH07XG5cbi8vIE9uZSBsYXllcidzIHZhbHVlcyBhcyB0aGUgZmlsZSBwcmludHMgdGhlbS5cbnR5cGUgQ29sbGVjdGVkVmFsdWVzID0gUGljazxDb2xsZWN0ZWRQYWdlLCAndmFsdWVzJyB8ICdmYWlsZWRWYWx1ZXMnPjtcblxuLy8gV2hhdCBhIGpvYiBjYW1lIGJhY2sgd2l0aCwgYW5kIHRoZSBwYWdlIGl0IGlzIGZpbGVkIHVuZGVyLlxudHlwZSBDb2xsZWN0UmVzdWx0ID1cbiAgfCB7IGtpbmQ6ICdjb21wb25lbnQnOyBwYWdlSW5kZXg6IG51bWJlcjsgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50IH1cbiAgfCB7IGtpbmQ6ICd2YWx1ZXMnOyBwYWdlSW5kZXg6IG51bWJlciB8IG51bGw7IGNvbGxlY3RlZDogQ29sbGVjdGVkVmFsdWVzIH07XG5cbi8vIFdoYXQgYSBjb21wb25lbnQgd2l0aCBub3RoaW5nIHRvIGRyYXcgcHJpbnRzIGluIHRoZSBleHBvcnRlZCBmaWxlLlxuLy9cbi8vIFRoZSB0d28gY2FzZXMgbXVzdCBub3QgcmVhZCBhbGlrZS4gQSB0aWxlIHRoYXQgcmV0dXJuZWQgbm8gcm93cyBpcyBhIGZpbmRpbmdcbi8vIGFib3V0IHRoZSBwZXJpb2Qg4oCUIHRoZSByZXBvcnQgd29ya2VkIGFuZCB0aGUgYW5zd2VyIGlzIFwibm9uZVwiLiBBIHRpbGUgd2hvc2Vcbi8vIHF1ZXJ5IGZhaWxlZCBpcyBhIGhvbGUgaW4gdGhlIGZpbGUsIGFuZCBjYWxsaW5nIHRoYXQgXCJEYXRhIHVuYXZhaWxhYmxlXCIgdGVsbHNcbi8vIHRoZSByZWFkZXIgdGhlIGRhdGEgZG9lcyBub3QgZXhpc3Qgd2hlbiB3aGF0IGhhcHBlbmVkIGlzIHRoYXQgbm9ib2R5IG1hbmFnZWRcbi8vIHRvIGFzayBmb3IgaXQuIFNoYXJlZCBieSBib3RoIHJlbmRlcmVycyBzbyB0aGUgUERGIGFuZCB0aGUgZGVjayBjYW5ub3QgZW5kIHVwXG4vLyBkZXNjcmliaW5nIHRoZSBzYW1lIGhvbGUgdHdvIGRpZmZlcmVudCB3YXlzLlxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TGFiZWwoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGl0ZW0uZGF0YSA/ICdObyBkYXRhJyA6ICdDb3VsZCBub3QgYmUgZ2VuZXJhdGVkJztcbn1cblxuLy8gQSBjb21wb25lbnQncyB0aXRsZSBhcyBhbiBleHBvcnRlZCBmaWxlIHByaW50cyBpdDogaXRzIHRva2VucyBmaWxsZWQgd2l0aFxuLy8gdGhlIHBhZ2UgaXQgaXMgZHJhd24gb24gKHRoZSBwaHlzaWNhbCBwYWdlIHdoZXJlIHRoZSBQREYgbnVtYmVycyBhXG4vLyBjb250aW51YXRpb24gcGFnZSksIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0LiBBIGRyaWxsZWQgY2hhcnQncyB0aXRsZVxuLy8gaXMgZm9sbG93ZWQgYnkgaXRzIGJyZWFkY3J1bWIsIGBjcnVtYnNgIChkcmlsbENydW1iTGFiZWxzKTogJ09yZGVycyBieVxuLy8gUGVyaW9kIOKAuiAyMDI2IOKAuiBRMycuIEEgc2VhcmNoZWQgbGlzdCBzYXlzIHNvLCBzaW5jZSBpdHMgdGFibGUgaG9sZHMgb25seVxuLy8gdGhlIG1hdGNoaW5nIHJvd3M6ICdPcmRlcnMgKG1hdGNoaW5nIFwibm9ydGhcIiknLiBBbiB1bnRpdGxlZCBvbmUgcmVhZHNcbi8vICdNYXRjaGluZyBcIm5vcnRoXCInLiAnJyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcHJpbnQuIFNoYXJlZCBieSB0aGUgUERGXG4vLyBhbmQgdGhlIGRlY2ssIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZC5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRUaXRsZShcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgc2VhcmNoPzogc3RyaW5nIHwgbnVsbCxcbiAgY3J1bWJzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuICBmaWx0ZXJlZCA9IGZhbHNlLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBjcnVtYmVkVGl0bGUoZmlsbFRpdGxlVG9rZW5zKGNvbXBvbmVudC50aXRsZSwgdG9rZW5zKSwgY3J1bWJzID8/IFtdKTtcblxuICBpZiAoZmlsdGVyZWQpIHtcbiAgICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKGZpbHRlcmVkKWAgOiAnRmlsdGVyZWQnO1xuICB9XG5cbiAgaWYgKCFzZWFyY2gpIHtcbiAgICByZXR1cm4gdGl0bGU7XG4gIH1cblxuICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKG1hdGNoaW5nIFwiJHtzZWFyY2h9XCIpYCA6IGBNYXRjaGluZyBcIiR7c2VhcmNofVwiYDtcbn1cblxuLy8gV2hldGhlciBhIHRpbGUncyBxdWVyeSBmYWlsZWQuIEEgdGV4dCBibG9jayBoYXMgbm8gcXVlcnksIHNvIGl0IG5ldmVyIGRpZC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZhaWxlZChpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuICFpdGVtLmRhdGEgJiYgaXRlbS5jb21wb25lbnQudHlwZSAhPT0gJ3RleHQnO1xufVxuXG4vLyBBIHRleHQgYmxvY2sgdGhhdCBkb2VzIG5vdCBmaXQgaXRzIGJveCBpbiBhIGJ1aWx0IGZpbGUsIGFzIHRoZSBvdmVyZmxvdyBnYXRlXG4vLyBuYW1lcyBpdDogdW5kZXIgaXRzIHBhZ2UgKEhFQURFUl9GT09URVJfTkFNRSBmb3IgYSBoZWFkZXIgb3IgZm9vdGVyIGJsb2NrKVxuLy8gYW5kIGJ5IHRoZSBzdGFydCBvZiBpdHMgd29yZHMsIG9uIG9uZSBsaW5lLiBTaGFyZWQgYnkgdGhlIFBERiBhbmQgdGhlIGRlY2suXG5leHBvcnQgZnVuY3Rpb24gdGV4dE92ZXJmbG93KGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBwYWdlOiBzdHJpbmcsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IFRleHRPdmVyZmxvdyB7XG4gIGNvbnN0IHRleHQgPSB0ZXh0UGxhaW4oY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJywgdG9rZW5zKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50SWQ6IGNvbXBvbmVudC5pZCxcbiAgICBwYWdlLFxuICAgIHNuaXBwZXQ6IHRleHQubGVuZ3RoID4gT1ZFUkZMT1dfU05JUFBFVF9MRU5HVEggPyBgJHt0ZXh0LnNsaWNlKDAsIE9WRVJGTE9XX1NOSVBQRVRfTEVOR1RIKS50cmltRW5kKCl94oCmYCA6IHRleHQsXG4gIH07XG59XG5cbi8vIFRoZSBsaW5lcyB1bmRlciB0aGUgcmVwb3J0J3MgbmFtZSBvbiB0aGUgUERGIHRpdGxlIHBhZ2UgYW5kIHRoZSB0aXRsZSBzbGlkZTpcbi8vIHRoZSBleHBvcnQgZGF0ZSwgdGhlIGFjdGl2ZSBmaWx0ZXJzLCB0aGVuIHdoYXQgdGhlIG51bWJlcnMgYXJlIG1lYXN1cmVkIGluLlxuLy8gVGhlIGRhdGUgYWx3YXlzIGxlYWRzICh0aGUgUG93ZXJQb2ludCBtYXJrcyB0aGF0IGxpbmUgYXMgd3JpdHRlbiBpbiB0aGVcbi8vIHJlcG9ydCdzIGxvY2FsZSkuIEl0IGlzIHRvZGF5IGluIHRoZSByZXBvcnQncyB6b25lLCB0aGUgc2FtZSBkYXkgaXRzIGZpbHRlcnNcbi8vIHJlc29sdmUgXCJ0b2RheVwiIHRvLCB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUuXG5leHBvcnQgZnVuY3Rpb24gY292ZXJMaW5lcyhjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICBmb3JtYXRMb2NhbERhdGUoXG4gICAgICBuZXcgRGF0ZSgpLFxuICAgICAgY29sbGVjdGVkLmZvcm1hdENvbnRleHQubG9jYWxlLFxuICAgICAgREFZX0xPTkcsXG4gICAgICByZXNvbHZlUmVwb3J0VGltZXpvbmUoY29sbGVjdGVkLnJlcG9ydCksXG4gICAgKSxcbiAgICAuLi5jb2xsZWN0ZWQuZmlsdGVyU3VtbWFyeSxcbiAgICAuLi5jb2xsZWN0ZWQuY29udGV4dExpbmVzLFxuICBdO1xufVxuXG4vLyBBbiBleHBvcnRlZCBsaXN0IGNlbGwsIHJlYWRpbmcgbGlrZSB0aGUgb24tc2NyZWVuIGNlbGwsIHRocm91Z2ggdGhlIHNhbWVcbi8vIGZ1bmN0aW9ucyBhcyB0aGUgc2NyZWVuOiBhIGRhdGUgY29sdW1uIHJlbmRlcnMgaW4gdGhlIHJlcG9ydCdzIHpvbmUgYW5kXG4vLyBsb2NhbGUsIGFuZCBhIGNvbHVtbiB3aXRoIG51bWJlci1mb3JtYXQga2V5cyAoYSBjcm9zcy10YWIncyBjZWxscyB0aHJvdWdoXG4vLyBpdHMgY2VsbEZvcm1hdCkgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSBhbmQgY3VycmVuY3kuIEFueSBvdGhlciB2YWx1ZSBnb2VzXG4vLyBvdXQgdmVyYmF0aW0sIGFuZCBhbiBlbXB0eSBvbmUgYXMgJycuIENTViBuZXZlciBjb21lcyB0aHJvdWdoIGhlcmU6IGl0c1xuLy8gdmFsdWVzIHN0YXkgcmF3LlxuLy9cbi8vIEFuIG91dHB1dCBjb2x1bW4gaXMgd3JpdHRlbiBieSB3aGF0IGl0IGhvbGRzLCBhcyB0aGUgc2NyZWVuJ3MgY2VsbCBpc1xuLy8gKGZvcm1hdE91dHB1dFZhbHVlKTogYSBzaWduZWQgY2hhbmdlLCBhIHBlcmNlbnQgY2hhbmdlLCBhIGNoYW5nZSBvZiBhIHJhdGVcbi8vIGluIHBvaW50cywgYSByYW5rLCBhIHNoYXJlLiBJdHMgcm93IGdpdmVzIGEgY2hhbmdlIHRoZSBwcmlvciBiZXNpZGUgaXQsIHNvXG4vLyBhIG1pc3NpbmcgYmFzZWxpbmUgKCfigJQnKSByZWFkcyBhcGFydCBmcm9tIGEgemVybyBvbmUgKCduL2EnKS5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDZWxsKFxuICB2YWx1ZTogdW5rbm93bixcbiAgY29sdW1uOiBMaXN0Q29sdW1uICYgeyBvdXRwdXQ/OiBMaXN0T3V0cHV0Q29sdW1uIH0sXG4gIHRpbWV6b25lOiBzdHJpbmcsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIHJvdz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG91dHB1dCA9IGNvbHVtbi5vdXRwdXQ7XG5cbiAgaWYgKG91dHB1dCkge1xuICAgIHJldHVybiBmb3JtYXRPdXRwdXRWYWx1ZSh2YWx1ZSwgb3V0cHV0Lm91dHB1dCwgY29sdW1uLCBjb250ZXh0LCB7XG4gICAgICBtZWFzdXJlU3BlYzogb3V0cHV0Lm1lYXN1cmVTcGVjLFxuICAgICAgcHJpb3I6IG91dHB1dC5wcmlvckFsaWFzICYmIHJvdyA/IHJvd1tvdXRwdXQucHJpb3JBbGlhc10gOiB1bmRlZmluZWQsXG4gICAgICBmbG9vcjogb3V0cHV0LmZsb29yLFxuICAgICAgZW1wdHk6ICcnLFxuICAgIH0pLnRleHQ7XG4gIH1cblxuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChjb2x1bW4uZm9ybWF0ID09PSBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0LkRhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0UmVwb3J0RGF0ZSh2YWx1ZSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcbiAgfVxuXG4gIHJldHVybiBoYXNOdW1iZXJGb3JtYXQoY29sdW1uKSA/IGZvcm1hdE51bWJlcih2YWx1ZSwgY29sdW1uLCBjb250ZXh0LCB7IGVtcHR5OiAnJyB9KSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbi8vIFRoZSBjb2x1bW5zIGFuIGV4cG9ydGVkIGxpc3QgdGFibGUgZHJhd3MuIEEgY3Jvc3MtdGFiJ3MgYXJyaXZlIHdpdGggaXRzXG4vLyByb3dzICh0aGUgcm93IGtleSBmaXJzdCwgdGhlbiBvbmUgcGVyIHBpdm90IHZhbHVlKSwgc2luY2Ugb25seSB0aGUgcmVzdWx0XG4vLyBrbm93cyB0aGUgcGl2b3QgdmFsdWVzLCBhbmQgYXJlIGJ1aWx0IGJ5IHBpdm90Q29sdW1uU3BlY3MoKSBhcyBvbiBzY3JlZW46XG4vLyBoZWFkZWQgYnkgaXRzIHBlcmlvZHMgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSwgZWFjaCBwaXZvdCB2YWx1ZSBmb3JtYXR0ZWQgYnlcbi8vIGNlbGxGb3JtYXQuIEEgcGxhaW4gbGlzdCBkcmF3cyBpdHMgY29uZmlndXJlZCBjb2x1bW5zIGJ1dCB0aGUgb25lcyB0aGVcbi8vIHZpZXdlciBoaWQgKGBoaWRkZW5gLCBrZXB0IHRvIGxpc3RIaWRkZW5Db2x1bW5zLCBzbyBuZXZlciBhbGwgb2YgdGhlbSksXG4vLyBlbHNlIGV2ZXJ5IGNvbHVtbiB0aGUgcXVlcnkgcmV0dXJuZWQsIGFzIGl0IGNhbWUuIE91dHB1dCBjb2x1bW5zICh0aGVcbi8vIGRhdGEncyBvdXRwdXRzLCBhIGNyb3NzLXRhYiBjZWxsIHRocm91Z2ggY2VsbE1lYXN1cmVzKSBjYXJyeSBob3cgdGhleSBhcmVcbi8vIHdyaXR0ZW47IHdpdGhvdXQgdGhvc2Uga2V5cyB0aGUgY29sdW1ucyBhcmUgZXhhY3RseSBhcyBiZWZvcmUuXG5leHBvcnQgZnVuY3Rpb24gbGlzdENvbHVtbnMoXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgaGlkZGVuOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuKTogRXhwb3J0TGlzdENvbHVtbltdIHtcbiAgY29uc3QgY29uZmlnID0gKGNvbXBvbmVudC5jb25maWcgPz8ge30pIGFzIExpc3RDb25maWc7XG5cbiAgaWYgKGNvbmZpZy5waXZvdEJ5Py5jb2x1bW4pIHtcbiAgICByZXR1cm4gd2l0aE91dHB1dENvbHVtbnMocGl2b3RDb2x1bW5TcGVjcyhjb25maWcsIGRhdGEsIGxvY2FsZSksIGRhdGEsIFtdKTtcbiAgfVxuXG4gIGlmIChjb25maWcuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgY29uc3QgaGlkZGVuTmFtZXMgPSBsaXN0SGlkZGVuQ29sdW1ucyhjb25maWcsIGhpZGRlbik7XG5cbiAgICByZXR1cm4gd2l0aE91dHB1dENvbHVtbnMoXG4gICAgICBjb25maWcuY29sdW1uc1xuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+ICFoaWRkZW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4uY29sdW1uKSlcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiAoeyAuLi5jb2x1bW4sIG51bWVyaWM6IGhhc051bWJlckZvcm1hdChjb2x1bW4pIH0pKSxcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcuY29sdW1ucyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhPdXRwdXRDb2x1bW5zKGRhdGEuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gKHsgY29sdW1uLCBudW1lcmljOiBmYWxzZSB9KSksIGRhdGEsIFtdKTtcbn1cblxuLy8gVGhlIGNvbHVtbnMgd2l0aCB0aGVpciBvdXRwdXQgbWV0YWRhdGEgYXR0YWNoZWQgKGxpc3RPdXRwdXRDb2x1bW5zLCBhcyB0aGVcbi8vIHNjcmVlbidzIGxpc3QgcmVzb2x2ZXMgaXQpOiBhbiBvdXRwdXQgY29sdW1uIGhvbGRzIG51bWJlcnMgYW5kIGlzIHdyaXR0ZW5cbi8vIGJ5IHdoYXQgaXQgaG9sZHMuIFVuY2hhbmdlZCB3aGVuIHRoZSBkYXRhIGhhcyBubyBvdXRwdXRzLlxuZnVuY3Rpb24gd2l0aE91dHB1dENvbHVtbnMoXG4gIGNvbHVtbnM6IEV4cG9ydExpc3RDb2x1bW5bXSxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgYXV0aG9yZWQ6IHJlYWRvbmx5IExpc3RDb2x1bW5bXSxcbik6IEV4cG9ydExpc3RDb2x1bW5bXSB7XG4gIGlmICghZGF0YS5vdXRwdXRzKSB7XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBjb25zdCBvdXRwdXRzID0gbGlzdE91dHB1dENvbHVtbnMoY29sdW1ucywgZGF0YSwgYXV0aG9yZWQpO1xuXG4gIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAob3V0cHV0c1tjb2x1bW4uY29sdW1uXVxuICAgID8geyAuLi5jb2x1bW4sIG51bWVyaWM6IHRydWUsIG91dHB1dDogb3V0cHV0c1tjb2x1bW4uY29sdW1uXSB9XG4gICAgOiBjb2x1bW4pKTtcbn1cblxuLy8gVGhlIGhlYWRpbmcgb3ZlciBlYWNoIGNvbHVtbiBvZiBsaXN0Q29sdW1ucygpOiBhIHBsYWluIGxpc3QncyBjb25maWd1cmVkXG4vLyBsYWJlbCwgZWxzZSBpdHMgY29sdW1uOyBhIGNyb3NzLXRhYidzIGhlYWRpbmcgZnJvbSBwaXZvdENvbHVtblNwZWNzKCkuXG5leHBvcnQgZnVuY3Rpb24gbGlzdEhlYWRpbmdzKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGhpZGRlbjogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGxpc3RDb2x1bW5zKGNvbXBvbmVudCwgZGF0YSwgbG9jYWxlLCBoaWRkZW4pLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmNvbHVtbik7XG59XG5cbi8vIEFuIGV4cG9ydGVkIGxpc3QncyB0b3RhbHMgcm93LCBvbmUgY2VsbCBwZXIgY29sdW1uIG9mIGxpc3RDb2x1bW5zKCk6IGVhY2hcbi8vIHRvdGFsIHdyaXR0ZW4gbGlrZSBpdHMgY29sdW1uJ3MgY2VsbHMsIGFuZCBMSVNUX1RPVEFMX0xBQkVMIGluIHRoZSBmaXJzdFxuLy8gY29sdW1uIHdoZW4gdGhhdCBjb2x1bW4gaG9sZHMgbm8gdG90YWwgKGEgY3Jvc3MtdGFiJ3Mgcm93IGtleSkuIG51bGwgd2hlblxuLy8gdGhlIGxpc3QgaGFzIG5vIHRvdGFscy4gVGhlIENTViBuZXZlciBjYXJyaWVzIG9uZTogaXRzIHJvd3Mgc3RheSByYXcuXG5leHBvcnQgZnVuY3Rpb24gbGlzdFRvdGFsc1JvdyhcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29sdW1uczogcmVhZG9ubHkgRXhwb3J0TGlzdENvbHVtbltdLFxuICB0aW1lem9uZTogc3RyaW5nLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogc3RyaW5nW10gfCBudWxsIHtcbiAgY29uc3QgdG90YWxzID0gZGF0YS50b3RhbHM7XG5cbiAgaWYgKCF0b3RhbHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsID0gbGlzdFRvdGFsc0xhYmVsQ29sdW1uKGNvbHVtbnMsIHRvdGFscyk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IChjb2x1bW4uY29sdW1uID09PSBsYWJlbFxuICAgID8gTElTVF9UT1RBTF9MQUJFTFxuICAgIDogZXhwb3J0Q2VsbCh0b3RhbHNbY29sdW1uLmNvbHVtbl0sIGNvbHVtbiwgdGltZXpvbmUsIGNvbnRleHQsIHRvdGFscykpKTtcbn1cblxuLy8gVGhlIHN1YnRpdGxlIHVuZGVyIGEgY2hhcnQncyBvciBhIGxpc3QncyB0aXRsZTogdGhlIGRheXMgaXQgcmVhZHMsIGFuZCB0aGVcbi8vIGRheXMgZWFjaCBjb21wYXJpc29uIGxhbmUgcmVhZHMgKCdTZXAgMSDigJMgMTUsIDIwMjYgwrcgdnMgcHJldmlvdXMgbW9udGg6XG4vLyBBdWcgMSDigJMgMTUsIDIwMjYnKSwgYXMgdGhlIHNjcmVlbidzIG5vdGUgb3BlbnMgd2l0aC4gJycgd2l0aG91dCBhXG4vLyBjb21wYXJpc29uIG9yIGEgdGltZWZyYW1lLCBhbmQgZm9yIGEgS1BJLCB3aG9zZSBjYXJkIHByaW50cyBpdHMgb3duIHdpbmRvd1xuLy8gbGluZS5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRXaW5kb3dzTGluZShpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsIHRpbWV6b25lOiBzdHJpbmcsIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnKTogc3RyaW5nIHtcbiAgaWYgKCFpdGVtLmRhdGEgfHwgaXRlbS5jb21wb25lbnQudHlwZSA9PT0gJ2twaScpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50V2luZG93c0xpbmUoaXRlbS5kYXRhLCB7IGxvY2FsZSwgdGltZXpvbmUgfSk7XG59XG5cbi8vIFRoZSBub3RlIGxpbmVzIHVuZGVyIGEgY29tcG9uZW50J3MgYm94OiB3aHkgYSBjb21wYXJpc29uIHJlYWRzIGFzIGl0IGRvZXMsXG4vLyBhIEtQSSdzIGRlbHRhIG5vdGUsIGFuZCB3aGF0IGVhY2ggd2luZG93ZWQgdmFsdWUgaXMgYW5kIHdoeS4gVGhlIGRheXMgYXJlXG4vLyBsZWZ0IG91dCAodGhlIHN1YnRpdGxlIG9yIHRoZSBLUEkgY2FyZCBwcmludHMgdGhlbSksIGFuZCB0aGUgd2luZG93XG4vLyBkZXNjcmlwdGlvbnMgYXJlIGluLCBzaW5jZSBhIGZpbGUgaGFzIG5vIHRvb2x0aXAgb3IgaGVhZGVyIHRvIGNhcnJ5IHRoZW0uXG4vLyBFbXB0eSB3aGVuIHRoZSBkYXRhIGhhcyBub25lIG9mIHRoZSBrZXlzLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE5vdGVMaW5lcyhpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsIHRpbWV6b25lOiBzdHJpbmcsIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLmNvbXBvbmVudE5vdGVMaW5lcyhpdGVtLmRhdGEsIHsgbG9jYWxlLCB0aW1lem9uZSB9LCB7IHdpbmRvd3M6IGZhbHNlLCB3aW5kb3dEZXNjcmlwdGlvbnM6IHRydWUgfSksXG4gICAgLi4uKGl0ZW0udGFibGVOb3RlcyA/PyBbXSksXG4gIF07XG59XG5cbi8vIFdoZXRoZXIgYSB0aWxlIGhhcyBub3RoaW5nIHRvIGRyYXc6IG5vIHJvd3MsIG9yIGEgdGFibGUgd2l0aCBubyBsaW5lLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlUaWxlKGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXRlbS50YWJsZVxuICAgID8gIWl0ZW0udGFibGUucm93cy5sZW5ndGggJiYgIWl0ZW0udGFibGUudG90YWxSb3dcbiAgICA6ICFpdGVtLmRhdGE/LnJvd3M/Lmxlbmd0aDtcbn1cblxuLy8gV2hldGhlciBhIEtQSSBjYXJkIGhhcyBtb3JlIHRvIGRyYXcgdGhhbiBpdHMgdmFsdWUgYW5kIGxhYmVsLiBXaXRob3V0LCBib3RoXG4vLyBleHBvcnRzIGRyYXcgdGhlIHRpbGUgZXhhY3RseSBhcyB0aGV5IGFsd2F5cyBoYXZlLlxuZXhwb3J0IGZ1bmN0aW9uIGtwaUNhcmRIYXNFeHRyYXModmlldzogS3BpQ2FyZFZpZXcsIG5vdGVzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEodmlldy5kZWx0YSB8fCB2aWV3LndpbmRvdyB8fCB2aWV3LnRhcmdldCB8fCB2aWV3LnNwYXJrbGluZSB8fCBub3Rlcy5sZW5ndGgpO1xufVxuXG4vLyBXaGljaCBwYXJ0cyBvZiBhIEtQSSBjYXJkIGZpdCBhIHRpbGUgYGF2YWlsYWJsZWAgdGFsbC4gQSBzaG9ydCB0aWxlIHNoZWRzIHRoZVxuLy8gc3BhcmtsaW5lIGZpcnN0LCB0aGVuIHRoZSB0YXJnZXQgbGluZSwgdGhlbiB0aGUgbm90ZXM7IHRoZSB2YWx1ZSwgaXRzIGxhYmVsXG4vLyBhbmQgdGhlIGRlbHRhIHJvdyBhbHdheXMgc3RheSwgYW5kIHRoZSB3aW5kb3cgbGluZSBzdGF5cyB3aGVuZXZlciB0aGUgY2FyZFxuLy8gc2hvd3MgYSBjb21wYXJpc29uIChpdHMgZGF5cyBhcmUgd2hhdCB0aGUgZGVsdGEgaXMgbWVhc3VyZWQgb3ZlcikuIFRoZVxuLy8gc3BhcmtsaW5lIG5lZWRzIHZhbHVlcyB0byBkcmF3LiBXaGVuIHdoYXQgc3RheXMgaXMgc3RpbGwgdG9vIHRhbGwsIGV2ZXJ5XG4vLyByb3cgc2hyaW5rcyBieSB0aGUgc2FtZSBzY2FsZSwgZG93biB0byBLUElfRVhQT1JUX01JTl9TQ0FMRTsgYnkgdGhlbiB0aGVcbi8vIHNwYXJrbGluZSwgdGhlIHRhcmdldCBhbmQgdGhlIG5vdGVzIGFyZSBnb25lLlxuZXhwb3J0IGZ1bmN0aW9uIGtwaUV4cG9ydFBhcnRzKFxuICB2aWV3OiBLcGlDYXJkVmlldyxcbiAgbm90ZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhdmFpbGFibGU6IG51bWJlcixcbiAgaGVpZ2h0czogS3BpRXhwb3J0SGVpZ2h0cyxcbik6IEtwaUV4cG9ydFBhcnRzIHtcbiAgY29uc3QgcGFydHM6IEtwaUV4cG9ydFBhcnRzID0ge1xuICAgIGRlbHRhOiAhIXZpZXcuZGVsdGEsXG4gICAgd2luZG93OiAhIXZpZXcud2luZG93LFxuICAgIHRhcmdldDogISF2aWV3LnRhcmdldCxcbiAgICBzcGFya2xpbmU6ICEhdmlldy5zcGFya2xpbmU/LnZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwpLFxuICAgIG5vdGVzOiBbLi4ubm90ZXNdLFxuICAgIHNjYWxlOiAxLFxuICB9O1xuICBjb25zdCBoZWlnaHQgPSAoKSA9PiBrcGlFeHBvcnRIZWlnaHQodmlldywgcGFydHMsIGhlaWdodHMpO1xuXG4gIGlmIChoZWlnaHQoKSA+IGF2YWlsYWJsZSkge1xuICAgIHBhcnRzLnNwYXJrbGluZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGhlaWdodCgpID4gYXZhaWxhYmxlKSB7XG4gICAgcGFydHMudGFyZ2V0ID0gZmFsc2U7XG4gIH1cblxuICB3aGlsZSAoaGVpZ2h0KCkgPiBhdmFpbGFibGUgJiYgcGFydHMubm90ZXMubGVuZ3RoKSB7XG4gICAgcGFydHMubm90ZXMucG9wKCk7XG4gIH1cblxuICBpZiAoaGVpZ2h0KCkgPiBhdmFpbGFibGUgJiYgIXBhcnRzLmRlbHRhKSB7XG4gICAgcGFydHMud2luZG93ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaGVpZ2h0KCkgPiBhdmFpbGFibGUpIHtcbiAgICBwYXJ0cy5zY2FsZSA9IE1hdGgubWF4KEtQSV9FWFBPUlRfTUlOX1NDQUxFLCBNYXRoLm1heCgwLCBhdmFpbGFibGUpIC8gaGVpZ2h0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBUaGUgaGVpZ2h0cyBzY2FsZWQgYnkgdGhlIHBhcnRzJyBzY2FsZTogd2hhdCB0aGUgcmVuZGVyZXIgbGF5cyB0aGUgY2FyZFxuLy8gb3V0IHdpdGgsIGl0cyB0ZXh0IHNpemVkIGJ5IHRoZSBzYW1lIHNjYWxlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlZEtwaUhlaWdodHMoaGVpZ2h0czogS3BpRXhwb3J0SGVpZ2h0cywgc2NhbGU6IG51bWJlcik6IEtwaUV4cG9ydEhlaWdodHMge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBoZWlnaHRzLnZhbHVlICogc2NhbGUsXG4gICAgbGFiZWw6IGhlaWdodHMubGFiZWwgKiBzY2FsZSxcbiAgICBkZWx0YTogaGVpZ2h0cy5kZWx0YSAqIHNjYWxlLFxuICAgIHdpbmRvdzogaGVpZ2h0cy53aW5kb3cgKiBzY2FsZSxcbiAgICB0YXJnZXQ6IGhlaWdodHMudGFyZ2V0ICogc2NhbGUsXG4gICAgc3BhcmtsaW5lOiBoZWlnaHRzLnNwYXJrbGluZSAqIHNjYWxlLFxuICAgIG5vdGU6IGhlaWdodHMubm90ZSAqIHNjYWxlLFxuICB9O1xufVxuXG4vLyBIb3cgdGFsbCB0aGUgY2FyZCdzIGRyYXduIHBhcnRzIHN0YW5kIHRvZ2V0aGVyLCBpbiB0aGUgaGVpZ2h0cycgdW5pdC5cbmV4cG9ydCBmdW5jdGlvbiBrcGlFeHBvcnRIZWlnaHQodmlldzogS3BpQ2FyZFZpZXcsIHBhcnRzOiBLcGlFeHBvcnRQYXJ0cywgaGVpZ2h0czogS3BpRXhwb3J0SGVpZ2h0cyk6IG51bWJlciB7XG4gIHJldHVybiBoZWlnaHRzLnZhbHVlXG4gICAgKyAodmlldy5sYWJlbCA/IGhlaWdodHMubGFiZWwgOiAwKVxuICAgICsgKHBhcnRzLmRlbHRhID8gaGVpZ2h0cy5kZWx0YSA6IDApXG4gICAgKyAocGFydHMud2luZG93ID8gaGVpZ2h0cy53aW5kb3cgOiAwKVxuICAgICsgKHBhcnRzLnRhcmdldCA/IGhlaWdodHMudGFyZ2V0IDogMClcbiAgICArIChwYXJ0cy5zcGFya2xpbmUgPyBoZWlnaHRzLnNwYXJrbGluZSA6IDApXG4gICAgKyBwYXJ0cy5ub3Rlcy5sZW5ndGggKiBoZWlnaHRzLm5vdGU7XG59XG5cbi8vIFRoZSBsYXN0IHJvdyBvZiBhbiBleHBvcnRlZCBsaXN0IHRhYmxlIHRoYXQgc3RvcHMgc2hvcnQgb2YgaXRzIHJlc3VsdDogaG93XG4vLyBtYW55IHJvd3MgdGhlIGZpbGUgbGVhdmVzIG91dCBhbmQgd2hlcmUgdGhlIHdob2xlIHNldCBjYW4gYmUgaGFkLiBFYWNoXG4vLyBmb3JtYXQgZmV0Y2hlcyBpdHMgb3duIG51bWJlciBvZiByb3dzIChQREZfTElTVF9ST1dTLCBQUFRYX0xJU1RfUk9XUyksIGFuZFxuLy8gYm90aCBuYW1lIHdoYXQgaXMgbGVmdCB3aXRoIHRoaXMgb25lIHNlbnRlbmNlLlxuZXhwb3J0IGZ1bmN0aW9uIG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZzogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGDigKYgJHtyZW1haW5pbmd9IG1vcmUgcm93KHMpIOKAlCB1c2UgdGhlIGNvbXBvbmVudCdzIENTViBleHBvcnQgZm9yIHRoZSBmdWxsIGRhdGFzZXRgO1xufVxuXG4vLyBUaGUgcGFnZXMgb2YgYSBjb2xsZWN0ZWQgcmVwb3J0IHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgdGlsZSB3aG9zZSBxdWVyeVxuLy8gZmFpbGVkLCBvciB3aG9zZSB0ZXh0IHNob3dzIGEgdmFsdWUgdGhhdCBjYW1lIGJhY2sgd2l0aG91dCBpdHMgbnVtYmVyLCB0aGVuXG4vLyBIRUFERVJfRk9PVEVSX05BTUUgd2hlbiB0aGUgaGVhZGVyIG9yIGZvb3RlciBzaG93cyBvbmUgb24gYSBwYWdlIHRoYXQgc2hvd3Ncbi8vIHRoZSBtYXN0ZXIg4oCUIHdoYXQgdGhlIGZhaWx1cmUgZ2F0ZSBuYW1lcyB0byB0aGUgdXNlciwgYW5kIHdoYXQgbWFrZXMgXCJzb21lXG4vLyBvZiB0aGlzIGZpbGUgaXMgbWlzc2luZ1wiIGEgZmFjdCB0aGUgY2FsbGVyIGNhbiBhY3Qgb24gcmF0aGVyIHRoYW4gYSB0aGluZ1xuLy8gdGhleSBub3RpY2UgaW4gdGhlIFBERiBhZnRlcndhcmRzLlxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZFBhZ2VOYW1lcyhjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IHN0cmluZ1tdIHtcbiAgLy8gTnVtYmVyZWQgYmVmb3JlIHRoZSBmaWx0ZXIg4oCUIGFuIHVubmFtZWQgcGFnZSA0IHRoYXQgZmFpbGVkIGhhcyB0byByZWFkXG4gIC8vIFwiUGFnZSA0XCIsIG5vdCBcIlBhZ2UgMVwiIGJlY2F1c2UgaXQgaGFwcGVuZWQgdG8gYmUgdGhlIGZpcnN0IGZhaWx1cmUuXG4gIGNvbnN0IG5hbWVzID0gY29sbGVjdGVkLnBhZ2VzXG4gICAgLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7IHBhZ2UsIG51bWJlcjogaW5kZXggKyAxIH0pKVxuICAgIC5maWx0ZXIoKHsgcGFnZSB9KSA9PiBwYWdlLmNvbXBvbmVudHMuc29tZShpc0ZhaWxlZClcbiAgICAgIHx8IHNob3dzRmFpbGVkVmFsdWUocGFnZS5jb21wb25lbnRzLm1hcCgoaXRlbSkgPT4gaXRlbS5jb21wb25lbnQpLCBwYWdlLmZhaWxlZFZhbHVlcykpXG4gICAgLm1hcCgoeyBwYWdlLCBudW1iZXIgfSkgPT4gcGFnZS5wYWdlLm5hbWUgfHwgYFBhZ2UgJHtudW1iZXJ9YCk7XG4gIGNvbnN0IG1hc3RlciA9IGNvbGxlY3RlZC5yZXBvcnQubWFzdGVyO1xuICBjb25zdCBzaG93c01hc3RlciA9IGNvbGxlY3RlZC5wYWdlcy5zb21lKCh7IHBhZ2UgfSkgPT4gIXBhZ2UubWFzdGVySGlkZGVuKTtcblxuICBpZiAobWFzdGVyICYmIHNob3dzTWFzdGVyICYmIHNob3dzRmFpbGVkVmFsdWUobWFzdGVyLmNvbXBvbmVudHMsIGNvbGxlY3RlZC5tYXN0ZXJGYWlsZWRWYWx1ZXMpKSB7XG4gICAgbmFtZXMucHVzaChIRUFERVJfRk9PVEVSX05BTUUpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufVxuXG4vLyBXaGV0aGVyIGFueSBvZiB0aGUgdGV4dCBibG9ja3Mgc2hvd3Mgb25lIG9mIHRoZSBmYWlsZWQgdmFsdWUga2V5cy5cbmZ1bmN0aW9uIHNob3dzRmFpbGVkVmFsdWUoY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W10sIGZhaWxlZDogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3Qgc2hvd24gPSBuZXcgU2V0KGNvbXBvbmVudHNcbiAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlID09PSAndGV4dCcpXG4gICAgLmZsYXRNYXAoKGNvbXBvbmVudCkgPT4gdmFsdWVLZXlzKGNvbXBvbmVudC5jb25maWc/Lmh0bWwpKSk7XG5cbiAgcmV0dXJuIGZhaWxlZC5zb21lKChrZXkpID0+IHNob3duLmhhcyhrZXkpKTtcbn1cblxuLy8gVGhlIGNvdmVyJ3MgZmlsdGVyIGxpbmVzOiB0aGUgZXhwb3J0J3MgZmlsdGVyIGxpbmVzLCB0aGVuIHRoZSBtYXRjaCB3aGlsZSB0aGUgcmVwb3J0IGJhcidzIGZpbHRlcnMgbWF0Y2ggYW55LiBBIGRyaWxsZWQgY2hhcnQncyBsaW5lXG4vLyBpcyBpdHMgdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQgKGB0aXRsZXNgLCBieSBjb21wb25lbnQgaWQpIGFuZFxuLy8gdGhlIGNydW1icyBvZiB0aGUgcGF0aCBpdHMgYW5zd2VyIGFwcGxpZWQgKHRoZSBvbmVzIGl0cyB0aXRsZSBwcmludHMpLCBub3Rcbi8vIHRoZSBwYXRoIHRoZSBzY3JlZW4gYXNrZWQgZm9yOiB0aGUgc2VydmVyIG1heSBoYXZlIGN1dCB0aGF0IHBhdGggc2hvcnQgb3Jcbi8vIHJlZnVzZWQgaXQuXG5leHBvcnQgZnVuY3Rpb24gY292ZXJGaWx0ZXJMaW5lcyhcbiAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICBsaW5lczogcmVhZG9ubHkgUmVwb3J0RXhwb3J0TGluZVtdLFxuICBwYWdlczogcmVhZG9ubHkgUGljazxDb2xsZWN0ZWRQYWdlLCAnY29tcG9uZW50cyc+W10sXG4gIHRpdGxlczogUmVhZG9ubHk8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7fSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWF0Y2ggPSBzbmFwc2hvdC5mZWF0dXJlcy5pbmNsdWRlcygnbWF0Y2hBbnknKSA/IG1hdGNoTGluZVRleHQoc25hcHNob3Quc3RhdGUubWF0Y2gsICdsaW5lJykgOiBudWxsO1xuICBjb25zdCBkcmlsbGVkID0gcGFnZXNcbiAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzKVxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbS5jcnVtYnM/Lmxlbmd0aClcbiAgICAubWFwKChpdGVtKSA9PiBjcnVtYmVkVGl0bGUodGl0bGVzW2l0ZW0uY29tcG9uZW50LmlkXSA/PyBpdGVtLmNvbXBvbmVudC50aXRsZSwgaXRlbS5jcnVtYnMpKTtcblxuICByZXR1cm4gW1xuICAgIC4uLmxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS5raW5kICE9PSAnZHJpbGwnKS5tYXAoKGxpbmUpID0+IGxpbmUudGV4dCksXG4gICAgLi4uZHJpbGxlZCxcbiAgICBtYXRjaCxcbiAgXVxuICAgIC5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIHN0cmluZyA9PiAhIWxpbmUpO1xufVxuXG4vLyBXaGV0aGVyIGEgUERGIG9yIFBvd2VyUG9pbnQgZXhwb3J0IGxheXMgYSBjb21wb25lbnQgb3V0OiBldmVyeSB0aWxlLCBhbmRcbi8vIGV2ZXJ5IHRleHQgYmxvY2ssIHdoaWNoIGhhcyBub3RoaW5nIHRvIGZldGNoIGFuZCByaWRlcyB0aHJvdWdoIHdpdGggbm9cbi8vIGRhdGEuIEFueSBvdGhlciB0eXBlIChhbiBpbmxpbmUgdmFsdWUsIG9yIGEgdHlwZSB0aGlzIHZpZXdlciBkb2VzIG5vdFxuLy8ga25vdykgbmV2ZXIgaXM6IGEgdmFsdWUgaXMgcmVhZCBvbmx5IHRocm91Z2ggaXRzIGxheWVyJ3MgdmFsdWVzIGpvYi5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cG9ydFNsb3QoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVGlsZShjb21wb25lbnQpIHx8IGNvbXBvbmVudC50eXBlID09PSAndGV4dCc7XG59XG5cbi8vIEdhdGhlcnMgZXZlcnl0aGluZyBhbiBleHBvcnQgbmVlZHM6IGV2ZXJ5IGNvbXBvbmVudCdzIGRhdGEgYWNyb3NzIEFMTCBwYWdlc1xuLy8gKHRoZSBjYW52YXMgb25seSByZW5kZXJzIHRoZSBhY3RpdmUgcGFnZSwgc28gZXhwb3J0cyBjYW4ndCBzY3JhcGUgdGhlXG4vLyBzY3JlZW4pLCBhbmQgdGhlIG51bWJlcnMgb2YgdGhlIHZhbHVlcyB0aGVpciB0ZXh0IHJlYWRzLCBmZXRjaGVkIGZyZXNoIHdpdGhcbi8vIHRoZSB2aWV3ZXIncyBjdXJyZW50IGZpbHRlciBzdGF0ZS5cbi8vXG4vLyBBIGZhaWxlZCBjb21wb25lbnQgcmVzb2x2ZXMgdG8gYSBudWxsIGBkYXRhYCwgYW5kIGEgZmFpbGVkIHZhbHVlIHRvIGEga2V5IGluXG4vLyBpdHMgcGFnZSdzIGZhaWxlZFZhbHVlcywgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgd2hvbGUgY29sbGVjdGlvbiDigJQgYnV0IHRoYXRcbi8vIGlzIHNvIHRoZSBjYWxsZXIgY2FuIFJFUE9SVCB3aGF0IGZhaWxlZCwgbm90IHNvIGl0IGNhbiBiZSBpZ25vcmVkOiBzZWVcbi8vIGZhaWxlZFBhZ2VOYW1lcygpIGFuZCB0aGUgZmFpbHVyZSBnYXRlIHRoYXQgdXNlcyBpdC5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9maWx0ZXJTdGF0ZSA9IGluamVjdChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zID0gaW5qZWN0KFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlKTtcblxuICAvLyBsaXN0Um93cyBpcyBob3cgbWFueSByb3dzIGVhY2ggbGlzdCBmZXRjaGVzOiB0aGUgcmVuZGVyZXIncyBvd24gY2FwLCBzaW5jZVxuICAvLyBhIFBERiB0YWJsZSBjb250aW51ZXMgb250byBleHRyYSBwYWdlcyBhbmQgYSBzbGlkZSB0YWJsZSBjYW5ub3QuXG4gIC8vXG4gIC8vIFRoZSBzY3JlZW4gaXMgcmVhZCBvbmNlLCB3aGVuIHRoZSBleHBvcnQgc3RhcnRzIChzbmFwc2hvdCk6IGV2ZXJ5IHRpbGUsXG4gIC8vIGV2ZXJ5IHZhbHVlcyBqb2IsIHRoZSBmaWx0ZXIgbGluZXMgYW5kIHRoZSBjb3ZlciByZWFkIHRoYXQgY29weSwgc28gYVxuICAvLyBmaWx0ZXIgY2hhbmdlZCB3aGlsZSB0aGUgdGlsZXMgYXJlIGZldGNoZWQgcmVhY2hlcyBub25lIG9mIHRoZW0uIEEgcmV0cnlcbiAgLy8gY29sbGVjdHMgYWdhaW4sIGFuZCBzbyByZWFkcyB0aGUgc2NyZWVuIGFzIGl0IGlzIHRoZW4uXG4gIHB1YmxpYyBjb2xsZWN0KHJlcG9ydDogUmVwb3J0LCBsaXN0Um93czogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRSZXBvcnQ+IHtcbiAgICBjb25zdCBqb2JzID0gdGhpcy5fam9icyhyZXBvcnQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5zbmFwc2hvdChyZXBvcnQpO1xuICAgIGNvbnN0IGZvcm1hdENvbnRleHQgPSBzbmFwc2hvdC5mb3JtYXRDb250ZXh0O1xuXG4gICAgLy8gUmVsZWFzZWQgYSBmZXcgYXQgYSB0aW1lIHJhdGhlciB0aGFuIGFsbCBhdCBvbmNlLCBhIHBhZ2UncyB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gc2FtZSBxdWV1ZSBhcyB0aGUgdGlsZXMsIHNvIHRoZXkgbmV2ZXIgYWRkIHRvIHRoZSBxdWVyaWVzIGFscmVhZHlcbiAgICAvLyBydW5uaW5nLiBtZXJnZU1hcCBjb21wbGV0ZXMgb3V0IG9mIG9yZGVyLCBzbyBlYWNoIHJlc3VsdCBjYXJyaWVzIHRoZSBqb2JcbiAgICAvLyBpdCBjYW1lIGZyb20gYW5kIHRoZSByb3dzIGFyZSBmaWxlZCBieSBpbmRleCDigJQgdGhlIGRlY2sncyBwYWdlIG9yZGVyXG4gICAgLy8gY2FuJ3QgZGVwZW5kIG9uIHdoaWNoIHF1ZXJ5IGhhcHBlbmVkIHRvIGZpbmlzaCBmaXJzdC5cbiAgICBjb25zdCBhbGwkID0gam9icy5sZW5ndGhcbiAgICAgID8gZnJvbShqb2JzLm1hcCgoam9iLCBpbmRleCkgPT4gKHsgam9iLCBpbmRleCB9KSkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgKHsgam9iLCBpbmRleCB9KSA9PiB0aGlzLl9ydW5Kb2IocmVwb3J0LCBqb2IsIGxpc3RSb3dzLCBzbmFwc2hvdClcbiAgICAgICAgICAgICAgLnBpcGUobWFwKChyZXN1bHQpID0+ICh7IHJlc3VsdCwgaW5kZXggfSkpKSxcbiAgICAgICAgICAgIEVYUE9SVF9DT05DVVJSRU5DWSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRvQXJyYXkoKSxcbiAgICAgICAgKVxuICAgICAgOiBvZihbXSBhcyB7IHJlc3VsdDogQ29sbGVjdFJlc3VsdDsgaW5kZXg6IG51bWJlciB9W10pO1xuXG4gICAgLy8gVGhlIGxpbmVzIGFuZCB0aGUgZmlsdGVyIHRva2VucyByaWRlIGFsb25nc2lkZSB0aGUgY29tcG9uZW50IGRhdGFcbiAgICAvLyByYXRoZXIgdGhhbiBiZWluZyBidWlsdCBhdCB0aGUgZW5kLCBiZWNhdXNlIG5hbWluZyBhIHNlbGVjdCBmaWx0ZXInc1xuICAgIC8vIHZhbHVlcyBpcyBpdHNlbGYgYSByZXF1ZXN0LlxuICAgIHJldHVybiBmb3JrSm9pbih7IGNvbGxlY3RlZDogYWxsJCwgd29yZGluZzogdGhpcy5leHBvcnRXb3JkaW5nKHJlcG9ydCwgc25hcHNob3QpIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGNvbGxlY3RlZCwgd29yZGluZyB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuX2ZpbGUocmVwb3J0LCBjb2xsZWN0ZWQsIGZvcm1hdENvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlcG9ydCxcbiAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICBmaWx0ZXJTdW1tYXJ5OiBjb3ZlckZpbHRlckxpbmVzKHNuYXBzaG90LCB3b3JkaW5nLmxpbmVzLCBmaWxlLnBhZ2VzLCB3b3JkaW5nLnRpdGxlcyksXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHM6IHdvcmRpbmcuZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgY29udGV4dExpbmVzOiB0aGlzLl9jb250ZXh0TGluZXMocmVwb3J0KSxcbiAgICAgICAgICAgIGZvcm1hdENvbnRleHQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gVGhlIHNjcmVlbiBhcyBvbmUgZXhwb3J0IHJlYWRzIGl0OiB0aGUgc3RhdGUgc25hcHNob3QsIGVhY2ggZ3JvdXAncyB2YWx1ZVxuICAvLyBhbmQgbGl2ZSBwcmVzZXQsIGVhY2ggdGlsZSdzIGZpbHRlciBlbnRyaWVzIGFuZCBzdGF0ZSAodGlsZURhdGFTdGF0ZSksXG4gIC8vIGVhY2ggdmFsdWUncyBmaWx0ZXIgZW50cmllcywgdGhlIGdyYWluLCB0aGUgZmVhdHVyZXMgc2VydmVkIGFuZCB0aGVcbiAgLy8gZm9ybWF0LiBBIHZhbHVlJ3MgZW50cmllcyBhcmUgcmVhZCBoZXJlIHRvbywgc28gdGhlXG4gIC8vIG51bWJlcnMgaW4gYSBmaWxlJ3MgdGV4dCBhcmUgZmlsdGVyZWQgYXMgaXRzIHRpbGVzIGFyZSwgd2hhdGV2ZXIgdGhlIGJhclxuICAvLyBkb2VzIHdoaWxlIHRoZSBleHBvcnQgcnVucy5cbiAgcHVibGljIHNuYXBzaG90KHJlcG9ydDogUmVwb3J0KTogUmVwb3J0RXhwb3J0U25hcHNob3Qge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZmlsdGVyU3RhdGUuc25hcHNob3QoKTtcbiAgICBjb25zdCB0aWxlcyA9IChyZXBvcnQucGFnZXMgPz8gW10pXG4gICAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBpc1RpbGUoY29tcG9uZW50KSk7XG4gICAgY29uc3QgdmFsdWVzID0gcmVwb3J0Q29tcG9uZW50cyhyZXBvcnQpXG4gICAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlID09PSAndmFsdWUnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZSxcbiAgICAgIC4uLnRoaXMuX2dyb3VwVmFsdWVzKHJlcG9ydCksXG4gICAgICBmaWx0ZXJzOiBPYmplY3QuZnJvbUVudHJpZXModGlsZXMubWFwKCh0aWxlKSA9PiBbdGlsZS5pZCwgdGhpcy5fZmlsdGVyU3RhdGUucmVzb2x2ZUZvckNvbXBvbmVudCh0aWxlKV0pKSxcbiAgICAgIHZhbHVlRmlsdGVyczogT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlc1xuICAgICAgICAubWFwKCh2YWx1ZSkgPT4gW3ZhbHVlLmlkLCB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHZhbHVlKV0pKSxcbiAgICAgIHN0YXRlczogT2JqZWN0LmZyb21FbnRyaWVzKHRpbGVzLm1hcCgodGlsZSkgPT4gW3RpbGUuaWQsIHRoaXMuX3RpbGVTdGF0ZShyZXBvcnQsIHRpbGUsIHN0YXRlKV0pKSxcbiAgICAgIGdyaWRFeHBhbnNpb25zOiBPYmplY3QuZnJvbUVudHJpZXModGlsZXNcbiAgICAgICAgLm1hcCgodGlsZSkgPT4gW3RpbGUuaWQsIHRoaXMuX2ZpbHRlclN0YXRlLmdyaWRFeHBhbnNpb24odGlsZSldIGFzIGNvbnN0KVxuICAgICAgICAuZmlsdGVyKChbLCBleHBhbnNpb25dKSA9PiAhIWV4cGFuc2lvbikpLFxuICAgICAgZnJlcXVlbmN5OiB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKSxcbiAgICAgIGZlYXR1cmVzOiBvZmZlcmVkVmlld2VyRmVhdHVyZXMocmVwb3J0LnZpZXdlckZlYXR1cmVzKSxcbiAgICAgIGZvcm1hdENvbnRleHQ6IHRoaXMuX2ZpbHRlclN0YXRlLmZvcm1hdENvbnRleHQoKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gSG93IGFuIGV4cG9ydCB3b3JkcyB0aGUgc2NyZWVuLCBvdmVyIGEgc25hcHNob3QgKGBwYWdlSWRgIGZvciBhIFRoaXNcbiAgLy8gUGFnZSB6aXApOiBpdHMgZmlsdGVyIGxpbmVzIChleHBvcnRMaW5lczogdGhlIGNvdmVyJ3MsIGFuZCB0aGUgemlwJ3NcbiAgLy8gZmlsdGVyTGluZXMpLCB3aGF0IGVhY2gge3tmaWx0ZXIuPGlkPn19IHRva2VuIHByaW50cywgYW5kIGVhY2ggdGlsZSdzXG4gIC8vIHRpdGxlIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0ICh0aGUgemlwIG5hbWVzIGl0cyBmaWxlcyBhZnRlclxuICAvLyB0aGVtKS4gQSBzZWxlY3QncyBwaWNrcyBhcmUgbmFtZWQgb25jZSBmb3IgYWxsIHRocmVlLCBhcyB0aGUgcmVwb3J0IGJhclxuICAvLyBuYW1lcyB0aGVtLCBzbyBubyB0b2tlbiBpbiBhIGZpbGUgcmVhZHMgYXMgbG9hZGluZy5cbiAgcHVibGljIGV4cG9ydFdvcmRpbmcoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICAgIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCA9IG51bGwsXG4gICk6IE9ic2VydmFibGU8UmVwb3J0RXhwb3J0V29yZGluZz4ge1xuICAgIGNvbnN0IG5hbWVzID0gdGhpcy5fcGlja05hbWVyKHJlcG9ydCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyRmllbGRzKHJlcG9ydCwgc25hcHNob3QsIG5hbWVzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZmlsdGVyRmllbGRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGl0bGVzID0gdGhpcy5fZXhwb3J0VGl0bGVzKHJlcG9ydCwgcGFnZUlkLCBmaWx0ZXJGaWVsZHMpO1xuXG4gICAgICAgICAgcmV0dXJuIGV4cG9ydExpbmVzKHsgcmVwb3J0LCBzbmFwc2hvdCwgcGFnZUlkLCBuYW1lcywgdGl0bGVzIH0pXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpbmVzKSA9PiAoeyBsaW5lcywgZmlsdGVyRmllbGRzLCB0aXRsZXMgfSkpKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gVGhlIHRpdGxlIG9mIGVhY2ggdGlsZSwgYnkgY29tcG9uZW50IGlkLCBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdDpcbiAgLy8gaXRzIHRva2VucyBmaWxsZWQgd2l0aCBpdHMgcGFnZSdzIGZpZWxkcyBhbmQgdGhlIGZpbHRlcnMgdGhlIHBhZ2UgcmVhZHNcbiAgLy8gKGxheWVyRmlsdGVyRmllbGRzKS4gVGhlIHdob2xlIHJlcG9ydCdzIG9yIG9uZSBwYWdlJ3MgKHBhZ2VJZCkuIEFuXG4gIC8vIHVudGl0bGVkIHRpbGUgaXMgbGVmdCBvdXQ6IHRoZSBzZXJ2ZXIgbmFtZXMgaXRzIGZpbGUgYnkgaXRzIHR5cGUuXG4gIHByaXZhdGUgX2V4cG9ydFRpdGxlcyhcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBwYWdlSWQ6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+LFxuICApOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKChyZXBvcnQucGFnZXMgPz8gW10pXG4gICAgICAubWFwKChwYWdlLCBpbmRleCkgPT4gKHsgcGFnZSwgaW5kZXggfSkpXG4gICAgICAuZmlsdGVyKCh7IHBhZ2UgfSkgPT4gIXBhZ2VJZCB8fCBwYWdlLmlkID09PSBwYWdlSWQpXG4gICAgICAuZmxhdE1hcCgoeyBwYWdlLCBpbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuczogVGV4dFRva2VuQ29udGV4dCA9IHtcbiAgICAgICAgICBwYWdlTnVtYmVyOiBpbmRleCArIDEsXG4gICAgICAgICAgcGFnZU5hbWU6IHBhZ2UubmFtZSB8fCBgUGFnZSAke2luZGV4ICsgMX1gLFxuICAgICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydC5uYW1lLFxuICAgICAgICAgIGZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGZpZWxkcywgcmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSwgcGFnZS5pZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChwYWdlLmNvbXBvbmVudHMgPz8gW10pXG4gICAgICAgICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBpc1RpbGUoY29tcG9uZW50KSAmJiAhIWNvbXBvbmVudC50aXRsZSlcbiAgICAgICAgICAubWFwKChjb21wb25lbnQpOiBbbnVtYmVyLCBzdHJpbmddID0+IFtjb21wb25lbnQuaWQsIGZpbGxUaXRsZVRva2Vucyhjb21wb25lbnQudGl0bGUsIHRva2VucyldKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8vIEV2ZXJ5IHJlcXVlc3QgdGhlIGV4cG9ydCBtYWtlcywgaW4gcGFnZSBvcmRlcjogZWFjaCBwYWdlJ3MgdGlsZXMsIHRoZW4gdGhlXG4gIC8vIHZhbHVlcyBpdHMgdGV4dCBzaG93czsgdGhlIGhlYWRlciBhbmQgZm9vdGVyJ3MgdmFsdWVzIGxhc3QsIHdoZW4gc29tZSBwYWdlXG4gIC8vIHNob3dzIHRoZSBtYXN0ZXIuIFRleHQgYmxvY2tzIGhhdmUgbm90aGluZyB0byBmZXRjaCBvZiB0aGVpciBvd24g4oCUIHRoZXlcbiAgLy8gcmlkZSB0aHJvdWdoIHdpdGggbm8gZGF0YSwgYW5kIHRoZWlyIHRva2VucyBhcmUgZmlsbGVkIGZyb20gdGhlaXIgbGF5ZXInc1xuICAvLyB2YWx1ZXMuIEEgdmFsdWUgaXMgcmVhZCBvbmx5IHRocm91Z2ggaXRzIGxheWVyJ3MgcmVxdWVzdCwgbmV2ZXIgYXMgYSB0aWxlXG4gIC8vIChpc0V4cG9ydFNsb3QpLiBUaGUgaGVhZGVyL2Zvb3RlciBibG9ja3MgKHJlcG9ydC5tYXN0ZXIpIGFyZSByZWFkIGJ5IHRoZVxuICAvLyByZW5kZXJlcnMgc3RyYWlnaHQgb2ZmIHRoZSByZXBvcnQuXG4gIHByaXZhdGUgX2pvYnMocmVwb3J0OiBSZXBvcnQpOiBDb2xsZWN0Sm9iW10ge1xuICAgIGNvbnN0IGpvYnM6IENvbGxlY3RKb2JbXSA9IFtdO1xuXG4gICAgcmVwb3J0LnBhZ2VzLmZvckVhY2goKHBhZ2UsIHBhZ2VJbmRleCkgPT4ge1xuICAgICAgcGFnZS5jb21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoaXNFeHBvcnRTbG90KVxuICAgICAgICAuZm9yRWFjaCgoY29tcG9uZW50KSA9PiBqb2JzLnB1c2goeyBraW5kOiAnY29tcG9uZW50JywgcGFnZUluZGV4LCBjb21wb25lbnQgfSkpO1xuICAgICAgam9icy5wdXNoKC4uLnRoaXMuX3ZhbHVlc0pvYnMocGFnZSwgcGFnZUluZGV4KSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVwb3J0Lm1hc3RlciAmJiByZXBvcnQucGFnZXMuc29tZSgocGFnZSkgPT4gIXBhZ2UubWFzdGVySGlkZGVuKSkge1xuICAgICAgam9icy5wdXNoKC4uLnRoaXMuX3ZhbHVlc0pvYnMocmVwb3J0Lm1hc3RlciwgbnVsbCkpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JzO1xuICB9XG5cbiAgLy8gQSBsYXllcidzIG9uZSB2YWx1ZXMgam9iLCBvciBub25lIHdoZW4gaXRzIHRleHQgc2hvd3Mgbm8gdmFsdWUuXG4gIHByaXZhdGUgX3ZhbHVlc0pvYnMobGF5ZXI6IFJlcG9ydFBhZ2UgfCBSZXBvcnRNYXN0ZXIsIHBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbCk6IENvbGxlY3RKb2JbXSB7XG4gICAgY29uc3QgdGV4dHMgPSBsYXllci5jb21wb25lbnRzLmZpbHRlcigoY29tcG9uZW50KSA9PiBjb21wb25lbnQudHlwZSA9PT0gJ3RleHQnKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBsYXllci52YWx1ZXMgPz8gW107XG4gICAgY29uc3Qgc2hvd24gPSBzaG93blZhbHVlcyh2YWx1ZXMsIHRleHRzKTtcblxuICAgIHJldHVybiBzaG93bi5sZW5ndGhcbiAgICAgID8gW3sga2luZDogJ3ZhbHVlcycsIHBhZ2VJbmRleCwgcGFnZUlkOiBsYXllci5pZCwgdmFsdWVzLCBjb21wb25lbnRzOiBzaG93biB9XVxuICAgICAgOiBbXTtcbiAgfVxuXG4gIC8vIE9uZSBxdWV1ZWQgam9iLCBpdHMgcmVzdWx0IHRhZ2dlZCB3aXRoIHRoZSBwYWdlIGl0IGlzIGZpbGVkIHVuZGVyLlxuICBwcml2YXRlIF9ydW5Kb2IoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgam9iOiBDb2xsZWN0Sm9iLFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPENvbGxlY3RSZXN1bHQ+IHtcbiAgICBpZiAoam9iLmtpbmQgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGF0YShyZXBvcnQsIGpvYi5jb21wb25lbnQsIGxpc3RSb3dzLCBzbmFwc2hvdClcbiAgICAgICAgLnBpcGUobWFwKChpdGVtKTogQ29sbGVjdFJlc3VsdCA9PiAoeyBraW5kOiAnY29tcG9uZW50JywgcGFnZUluZGV4OiBqb2IucGFnZUluZGV4LCBpdGVtIH0pKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VWYWx1ZXMocmVwb3J0LCBqb2IucGFnZUlkLCBqb2IudmFsdWVzLCBqb2IuY29tcG9uZW50cywgc25hcHNob3QpXG4gICAgICAucGlwZShtYXAoKGNvbGxlY3RlZCk6IENvbGxlY3RSZXN1bHQgPT4gKHsga2luZDogJ3ZhbHVlcycsIHBhZ2VJbmRleDogam9iLnBhZ2VJbmRleCwgY29sbGVjdGVkIH0pKSk7XG4gIH1cblxuICBwcml2YXRlIF9jb21wb25lbnREYXRhKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPENvbGxlY3RlZENvbXBvbmVudD4ge1xuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gb2YoeyBjb21wb25lbnQsIGRhdGE6IG51bGwsIGhpZGRlbkNvbHVtbnM6IFtdIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcnMgPSBzbmFwc2hvdC5maWx0ZXJzW2NvbXBvbmVudC5pZF0gPz8gW107XG5cbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdncmlkJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2dyaWRUYWJsZShyZXBvcnQsIGNvbXBvbmVudCwgZmlsdGVycywgc25hcHNob3Quc3RhdGVzW2NvbXBvbmVudC5pZF0gPz8ge30sIGxpc3RSb3dzLCBzbmFwc2hvdCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHRpbGUncyBvd24gc3RhdGUsIHRoZSBvbmUgaXRzIHNjcmVlbiBhbmQgaXRzIENTViBjYXJyeVxuICAgIC8vICh0aWxlRGF0YVN0YXRlKTogYSB0aWxlIHRoYXQgZm9sbG93cyB0aGUgZ3JvdXAtYnkgcmUtYnVja2V0cyBhdCB0aGVcbiAgICAvLyB2aWV3ZXIncyBncmFpbiwgYSB0aW1lLXNlcmllcyBjaGFydCBrZWVwcyBpdHMgZHJpbGwgcGF0aCwgYSBsaXN0IHJlYWRzXG4gICAgLy8gaW4gdGhlIHNjcmVlbidzIG9yZGVyIGFuZCBob2xkcyB0aGUgc2NyZWVuJ3Mgcm93cy4gQSBsaXN0IGFkZHMgaXRzXG4gICAgLy8gZXhwb3J0IHBhZ2luZy5cbiAgICBjb25zdCB0aWxlU3RhdGUgPSBzbmFwc2hvdC5zdGF0ZXNbY29tcG9uZW50LmlkXSA/PyB7fTtcbiAgICBjb25zdCBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0gY29tcG9uZW50LnR5cGUgPT09ICdsaXN0J1xuICAgICAgPyB7IC4uLnRpbGVTdGF0ZSwgcGFnZTogMSwgcGFnZVNpemU6IGxpc3RSb3dzIH1cbiAgICAgIDogeyAuLi50aWxlU3RhdGUgfTtcbiAgICAvLyBUaGUgdGFibGUgbGVhdmVzIG91dCB0aGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZC4gVGhlIHJvd3MgYXJlIGZldGNoZWRcbiAgICAvLyB3aG9sZSwgYXMgdGhlIHNjcmVlbiBmZXRjaGVzIHRoZW0gKHRoZSBzZXJ2ZXIgcmVhZHMgaGlkZGVuQ29sdW1ucyBmb3IgYVxuICAgIC8vIENTViBvbmx5KSwgYW5kIHRoZSByZW5kZXJlcnMgZHJvcCB0aGUgY2VsbHMuXG4gICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IFsuLi4oc3RhdGUuaGlkZGVuQ29sdW1ucyA/PyBbXSldO1xuXG4gICAgLy8gaGFuZGxlcnM6IGZhbHNlIGtlZXBzIHRoZSBhcHAncyBnbG9iYWwgZXJyb3IgZGlhbG9nIG91dCBvZiB0aGlzLiBBIGZhaWxlZFxuICAgIC8vIHRpbGUgaXMgcmVwb3J0ZWQgb25jZSwgYnkgdGhlIGZhaWx1cmUgZ2F0ZSwgbmFtaW5nIHRoZSBwYWdlcyBpdCBjb3N0IOKAlFxuICAgIC8vIG5ldmVyIGFzIHRlbiBzdGFja2VkIG1vZGFscyBjYXJyeWluZyB0aGUgZGF0YWJhc2UncyBvd24gd29yZGluZy5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5jb21wb25lbnREYXRhKHJlcG9ydC5pZCwgY29tcG9uZW50LmlkLCBmaWx0ZXJzLCBzdGF0ZSwgdHJ1ZSwgeyBoYW5kbGVyczogZmFsc2UgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IENvbXBvbmVudERhdGEpID0+IHRoaXMuX2NvbGxlY3RlZChjb21wb25lbnQsIGRhdGEsIHN0YXRlLnNlYXJjaCwgaGlkZGVuQ29sdW1ucywgc25hcHNob3QpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGNvbXBvbmVudCwgZGF0YTogbnVsbCwgaGlkZGVuQ29sdW1ucyB9KSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gQSB0aWxlJ3Mgc3RhdGUgYXMgYW4gZXhwb3J0IHJlYWRzIGl0OiB0aWxlRGF0YVN0YXRlLCBhbmQgZm9yIGEgdGFibGUgdGhlXG4gIC8vIGxheW91dCB0aGUgdmlld2VyIHB1dCBpdCBpbiwgYWJzZW50IHdoaWxlIGl0IHNob3dzIGl0cyBzdG9yZWQgb25lLlxuICBwcml2YXRlIF90aWxlU3RhdGUocmVwb3J0OiBSZXBvcnQsIHRpbGU6IFJlcG9ydENvbXBvbmVudCwgc3RhdGU6IFJlcG9ydFN0YXRlU25hcHNob3QpOiBDb21wb25lbnREYXRhU3RhdGUge1xuICAgIGNvbnN0IGxheW91dCA9IHRpbGUudHlwZSA9PT0gJ2dyaWQnID8gdGhpcy5fZmlsdGVyU3RhdGUuZ3JpZFNlc3Npb25MYXlvdXQodGlsZSkgOiBudWxsO1xuXG4gICAgcmV0dXJuIHsgLi4udGlsZURhdGFTdGF0ZShyZXBvcnQsIHRpbGUsIHN0YXRlKSwgLi4uKGxheW91dCA/IHsgbGF5b3V0IH0gOiB7fSkgfTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgdGlsZSBhcyB0aGUgc2NyZWVuIGRyYXdzIGl0LCByZWFkIGFwYXJ0IGZyb20gdGhlIHNjcmVlbiB0aHJvdWdoXG4gIC8vIGFuIGV4cG9ydCBzb3VyY2UgKHJlYWRHcmlkVGFibGUoKSk6IGluIHRoZSB2aWV3ZXIncyBsYXlvdXQgd2l0aCB0aGVcbiAgLy8gZ3JvdXBzIHRoZXkgbGVmdCBvcGVuLCBhdCBtb3N0IGByb3dzYCBsaW5lcyBhbmQgR1JJRF9FWFBPUlRfQ09MVU1OU1xuICAvLyBwaXZvdCBjb2x1bW5zLCBlYWNoIHZhbHVlIHdyaXR0ZW4gYnkgdGhlIHNjcmVlbidzIGZvcm1hdHRlciBvbmNlIHRoZVxuICAvLyByZWFkJ3MgcmVwb3J0IGxpbmUgaXMgaW4uIFRoYXQgbGluZSBzdGFuZHMgaW4gYXMgaXRzIGRhdGEsIHNvIHRoZSB0aXRsZSxcbiAgLy8gdGhlIHN1YnRpdGxlIGFuZCB0aGUgbm90ZXMgcmVhZCBpdCBhcyBhIGxpc3Qncy4gQSBmYWlsZWQgcmVhZCBpcyBhXG4gIC8vIGZhaWxlZCB0aWxlLlxuICBwcml2YXRlIF9ncmlkVGFibGUoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUsXG4gICAgcm93czogbnVtYmVyLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRDb21wb25lbnQ+IHtcbiAgICBjb25zdCBsb2NhbGUgPSBzbmFwc2hvdC5mb3JtYXRDb250ZXh0LmxvY2FsZTtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgUmVwb3J0R3JpZFNvdXJjZSh0aGlzLl9yZXBvcnREYXRhLCByZXBvcnQuaWQsIGNvbXBvbmVudC5pZCwgeyBpc0V4cG9ydDogdHJ1ZSwgbG9jYWxlOiAoKSA9PiBsb2NhbGUgfSk7XG4gICAgY29uc3Qgc2NyZWVuID0gKCkgPT4gcmVwb3J0R3JpZEZvcm1hdHRlcih7XG4gICAgICBmb3JtYXQ6IHNuYXBzaG90LmZvcm1hdENvbnRleHQsXG4gICAgICB0aW1lem9uZTogdGhpcy5fZmlsdGVyU3RhdGUudGltZXpvbmUoKSxcbiAgICAgIHJlcG9ydDogc291cmNlLnJlcG9ydCgpLFxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1hdHRlcjogR3JpZEZvcm1hdHRlciA9IHtcbiAgICAgIGZvcm1hdDogKHZhbHVlLCBmaWVsZCwgcGxhY2VtZW50KSA9PiBzY3JlZW4oKS5mb3JtYXQodmFsdWUsIGZpZWxkLCBwbGFjZW1lbnQpLFxuICAgICAgdG9OdW1iZXI6ICh0ZXh0LCBmaWVsZCwgcGxhY2VtZW50KSA9PiBzY3JlZW4oKS50b051bWJlcih0ZXh0LCBmaWVsZCwgcGxhY2VtZW50KSxcbiAgICB9O1xuICAgIGNvbnN0IGxheW91dCA9IHN0YXRlLmxheW91dCA/PyBhdXRob3JlZEdyaWRMYXlvdXQoY29tcG9uZW50KTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJzLFxuICAgICAgLi4uKHN0YXRlLm1hdGNoQW55R3JvdXBJZHM/Lmxlbmd0aCA/IHsgbWF0Y2hBbnlHcm91cElkczogc3RhdGUubWF0Y2hBbnlHcm91cElkcyB9IDoge30pLFxuICAgICAgLi4uKHN0YXRlLmZyZXF1ZW5jeSA/IHsgZnJlcXVlbmN5OiBzdGF0ZS5mcmVxdWVuY3kgfSA6IHt9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlYWRHcmlkVGFibGUoc291cmNlLCBsYXlvdXQsIHBhcmFtcywgc25hcHNob3QuZ3JpZEV4cGFuc2lvbnM/Lltjb21wb25lbnQuaWRdLCB7IHJvd3MsIGNvbHVtbnM6IEdSSURfRVhQT1JUX0NPTFVNTlMgfSwgZm9ybWF0dGVyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodGFibGUpOiBDb2xsZWN0ZWRDb21wb25lbnQgPT4gKHtcbiAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgZGF0YTogeyAuLi4oc291cmNlLnJlcG9ydCgpID8/IHt9KSwgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgQ29tcG9uZW50RGF0YSxcbiAgICAgICAgICBoaWRkZW5Db2x1bW5zOiBbXSxcbiAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICB0YWJsZU5vdGVzOiBncmlkRXhwb3J0Tm90ZXModGFibGUsIGxheW91dCwgbG9jYWxlKSxcbiAgICAgICAgICAuLi4oKGxheW91dC5maWx0ZXJzID8/IFtdKS5sZW5ndGggPyB7IGZpbHRlcmVkOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIH0pKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGNvbXBvbmVudCwgZGF0YTogbnVsbCwgaGlkZGVuQ29sdW1uczogW10gfSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIE9uZSB0aWxlJ3MgYW5zd2VyIGFzIHRoZSByZW5kZXJlcnMgdGFrZSBpdC4gQSBzZWFyY2ggdGhlIHNlcnZlciBjb3VsZFxuICAvLyBub3QgYXBwbHkgKHNlYXJjaE5vdGU6IHRoZSBsaXN0IGhhcyBubyB0ZXh0IGNvbHVtbikgbmFycm93ZWQgbm90aGluZywgc29cbiAgLy8gdGhlIGl0ZW0gZG9lcyBub3QgY2FycnkgaXQuIEEgZHJpbGxlZCBjaGFydCBjYXJyaWVzIHRoZSBicmVhZGNydW1iIG9mIHRoZVxuICAvLyBwYXRoIGl0cyBhbnN3ZXIgYXBwbGllZCwgd2hpY2ggaXMgd2hhdCBpdHMgbnVtYmVycyB3ZXJlIHJlYWQgYXQuXG4gIHByaXZhdGUgX2NvbGxlY3RlZChcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIHNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogQ29sbGVjdGVkQ29tcG9uZW50IHtcbiAgICBjb25zdCBwYXRoID0gZGF0YT8uZHJpbGw/LnBhdGggPz8gW107XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tcG9uZW50LFxuICAgICAgZGF0YSxcbiAgICAgIC4uLihzZWFyY2ggJiYgIWRhdGE/LnNlYXJjaE5vdGUgPyB7IHNlYXJjaCB9IDoge30pLFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIC4uLihwYXRoLmxlbmd0aCA/IHsgY3J1bWJzOiBkcmlsbENydW1iTGFiZWxzKHBhdGgsIHNuYXBzaG90LmZvcm1hdENvbnRleHQpIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEVhY2ggZ3JvdXAncyB2YWx1ZSBhcyB0aGUgYmFyIGhvbGRzIGl0IG5vdywgd2l0aCB0aGUgcmVsYXRpdmUgcmFuZ2UgYVxuICAvLyBkYXRlIHZhbHVlIHN0aWxsIGlzLiBUaGUgcGlja3MgYXJlIGNvcGllZCwgc28gdGhlIHNuYXBzaG90IGtlZXBzIHRoZW1cbiAgLy8gd2hhdGV2ZXIgdGhlIGJhciBkb2VzIG5leHQuXG4gIHByaXZhdGUgX2dyb3VwVmFsdWVzKHJlcG9ydDogUmVwb3J0KTogUGljazxSZXBvcnRFeHBvcnRTbmFwc2hvdCwgJ3ZhbHVlcycgfCAncHJlc2V0cyc+IHtcbiAgICBjb25zdCB2YWx1ZXM6IFJlY29yZDxudW1iZXIsIEZpbHRlckdyb3VwVmFsdWU+ID0ge307XG4gICAgY29uc3QgcHJlc2V0czogUmVjb3JkPG51bWJlciwgUmVwb3J0UmVsYXRpdmVSYW5nZT4gPSB7fTtcblxuICAgIChyZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9maWx0ZXJTdGF0ZS52YWx1ZShncm91cC5pZCk7XG4gICAgICBjb25zdCBwcmVzZXQgPSB0aGlzLl9maWx0ZXJTdGF0ZS5saXZlUHJlc2V0KGdyb3VwLmlkKTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlc1tncm91cC5pZF0gPSB7XG4gICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgLi4uKHZhbHVlLnZhbHVlcyA/IHsgdmFsdWVzOiBbLi4udmFsdWUudmFsdWVzXSB9IDoge30pLFxuICAgICAgICAgIC4uLih2YWx1ZS5leGNsdWRlVmFsdWVzID8geyBleGNsdWRlVmFsdWVzOiBbLi4udmFsdWUuZXhjbHVkZVZhbHVlc10gfSA6IHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVzZXQpIHtcbiAgICAgICAgcHJlc2V0c1tncm91cC5pZF0gPSBwcmVzZXQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyB2YWx1ZXMsIHByZXNldHMgfTtcbiAgfVxuXG4gIC8vIE9uZSBsYXllcidzIHZhbHVlcywgcmVhZCBpbiBvbmUgcmVxdWVzdCwgYXMgaXRzIHRleHQncyB0b2tlbnMgcHJpbnQgdGhlbS5cbiAgLy8gVGhlIHJlcXVlc3QgY2FycmllcyB0aGUgZmlsdGVyIHZhbHVlcyBvZiBldmVyeSB2YWx1ZSBvbiB0aGUgbGF5ZXIsIGFzIHRoZVxuICAvLyBjYW52YXMncyBkb2VzLCByZWFkIGZyb20gdGhlIGV4cG9ydCdzIHNuYXBzaG90IGxpa2UgZXZlcnkgdGlsZSdzLCBhbmRcbiAgLy8gd2hpbGUgdGhlIGdyb3VwcyBtYXRjaCAnYW55JyB0aGUgZ3JvdXBzIHRoYXQgY29tYmluZVxuICAvLyAodmFsdWVzTWF0Y2hBbnlHcm91cElkcyk6IHRoZSBzZXJ2ZXIgZGVjaWRlcyB3aGljaCB2YWx1ZXMgaXQgcmVhZHMgKHRoZVxuICAvLyBzaG93biBvbmVzIGFuZCB0aGUgb3BlcmFuZHMgb2YgdGhlIGZvcm11bGFzIGFtb25nIHRoZW0pIGFuZCBhcHBsaWVzIHRvXG4gIC8vIGVhY2ggb25seSB0aGUgZW50cmllcyBuYW1pbmcgaXRzIG93biBmaWx0ZXJzLiBoYW5kbGVyczogZmFsc2Uga2VlcHMgdGhlXG4gIC8vIGVycm9yIGRpYWxvZyBvdXQgb2YgaXQsIGFzIGZvciBhIHRpbGUuIEEgZmFpbGVkIHJlcXVlc3QgcmVhZHMgYXMgbm8gcm93cyxcbiAgLy8gc28gZXZlcnkgdmFsdWUgdGhlIHRleHQgc2hvd3MgZmFpbGVkIGFuZCB0aGUgZmFpbHVyZSBnYXRlIG5hbWVzIGl0cyBwYWdlO1xuICAvLyBvbmUgdmFsdWUncyBvd24gZXJyb3IgZmFpbHMgb25seSB0aGF0IHZhbHVlLCBhbmQgYSBmYWlsZWQgb3BlcmFuZCBmYWlsc1xuICAvLyB0aGUgZm9ybXVsYSB0aGF0IHJlYWRzIGl0LlxuICBwcml2YXRlIF9wYWdlVmFsdWVzKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHBhZ2VJZDogbnVtYmVyLFxuICAgIHZhbHVlczogUmVwb3J0Q29tcG9uZW50W10sXG4gICAgc2hvd246IFJlcG9ydENvbXBvbmVudFtdLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRWYWx1ZXM+IHtcbiAgICBjb25zdCBmb3JtYXRDb250ZXh0ID0gc25hcHNob3QuZm9ybWF0Q29udGV4dDtcbiAgICBjb25zdCBmaWx0ZXJzID0gdmFsdWVzLmZsYXRNYXAoKGNvbXBvbmVudCkgPT4gc25hcHNob3QudmFsdWVGaWx0ZXJzW2NvbXBvbmVudC5pZF0gPz8gW10pO1xuICAgIGNvbnN0IG1hdGNoQW55R3JvdXBJZHMgPSB2YWx1ZXNNYXRjaEFueUdyb3VwSWRzKHJlcG9ydCwgcGFnZUlkLCBzbmFwc2hvdC5zdGF0ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5wYWdlVmFsdWVzKHJlcG9ydC5pZCwgcGFnZUlkLCBmaWx0ZXJzLCB0cnVlLCB7IGhhbmRsZXJzOiBmYWxzZSB9LCBtYXRjaEFueUdyb3VwSWRzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocm93cykgPT4gbmV3IE1hcCgocm93cyA/PyBbXSkubWFwKChyb3cpID0+IFtyb3cuaWQsIHJvd10pKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YobmV3IE1hcDxudW1iZXIsIFJlcG9ydFBhZ2VWYWx1ZT4oKSkpLFxuICAgICAgICBtYXAoKHJvd3MpID0+ICh7XG4gICAgICAgICAgdmFsdWVzOiB0ZXh0VmFsdWVzKHZhbHVlcywgeyByb3dzIH0sIGZvcm1hdENvbnRleHQpLFxuICAgICAgICAgIGZhaWxlZFZhbHVlczogZmFpbGVkVmFsdWVLZXlzKHNob3duLCByb3dzKSxcbiAgICAgICAgfSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXN1bHRzIGZpbGVkIGJ5IHBhZ2UgaW4gam9iIG9yZGVyLiBBIGxheWVyIHdpdGggbm8gdmFsdWVzIGpvYiAoaXRzXG4gIC8vIHRleHQgc2hvd3Mgbm8gdmFsdWUpIGhhcyBubyBudW1iZXJzIHRvIHdhaXQgZm9yOiBpdHMgdmFsdWVzIHJlYWQgYXMgdGhlXG4gIC8vIGVtIGRhc2gsIGFuZCBub25lIG9mIHRoZW0gZmFpbGVkLlxuICBwcml2YXRlIF9maWxlKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHJlc3VsdHM6IHsgcmVzdWx0OiBDb2xsZWN0UmVzdWx0OyBpbmRleDogbnVtYmVyIH1bXSxcbiAgICBmb3JtYXRDb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICApOiBQaWNrPENvbGxlY3RlZFJlcG9ydCwgJ3BhZ2VzJyB8ICdtYXN0ZXJWYWx1ZXMnIHwgJ21hc3RlckZhaWxlZFZhbHVlcyc+IHtcbiAgICBjb25zdCB1bnJlYWQgPSAodmFsdWVzOiBSZXBvcnRDb21wb25lbnRbXSB8IHVuZGVmaW5lZCk6IENvbGxlY3RlZFZhbHVlcyA9PiAoe1xuICAgICAgdmFsdWVzOiB0ZXh0VmFsdWVzKHZhbHVlcyA/PyBbXSwgeyByb3dzOiBuZXcgTWFwKCkgfSwgZm9ybWF0Q29udGV4dCksXG4gICAgICBmYWlsZWRWYWx1ZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhZ2VzOiBDb2xsZWN0ZWRQYWdlW10gPSByZXBvcnQucGFnZXMubWFwKChwYWdlKSA9PiAoeyBwYWdlLCBjb21wb25lbnRzOiBbXSwgLi4udW5yZWFkKHBhZ2UudmFsdWVzKSB9KSk7XG4gICAgbGV0IG1hc3RlciA9IHVucmVhZChyZXBvcnQubWFzdGVyPy52YWx1ZXMpO1xuXG4gICAgWy4uLnJlc3VsdHNdXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG4gICAgICAuZm9yRWFjaCgoeyByZXN1bHQgfSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmtpbmQgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgcGFnZXNbcmVzdWx0LnBhZ2VJbmRleF0uY29tcG9uZW50cy5wdXNoKHJlc3VsdC5pdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQucGFnZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgbWFzdGVyID0gcmVzdWx0LmNvbGxlY3RlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHBhZ2VzW3Jlc3VsdC5wYWdlSW5kZXhdLCByZXN1bHQuY29sbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBwYWdlcywgbWFzdGVyVmFsdWVzOiBtYXN0ZXIudmFsdWVzLCBtYXN0ZXJGYWlsZWRWYWx1ZXM6IG1hc3Rlci5mYWlsZWRWYWx1ZXMgfTtcbiAgfVxuXG4gIC8vIFRoZSB6b25lIHRoZSBzZXJ2ZXIgcmVzb2x2ZWQsIGFzIGl0cyBJQU5BIGlkLCBhbmQgdGhlIGN1cnJlbmN5IGl0IHNheXNcbiAgLy8gdGhlIHJlcG9ydCdzIG1vbmV5IGlzIGluIChhIGxhYmVsOiBub3RoaW5nIGlzIGNvbnZlcnRlZCkuIE9ubHkgdGhlXG4gIC8vIHNlcnZlcidzIHZhbHVlcyBhcmUgcHJpbnRlZDogdGhlIGJyb3dzZXIncyB6b25lIChyZXNvbHZlUmVwb3J0VGltZXpvbmUnc1xuICAvLyBmYWxsYmFjayBmb3IgYW4gb2xkZXIgc2VydmVyKSBpcyBub3Qgd2hhdCB0aGUgbnVtYmVycyB3ZXJlIG1lYXN1cmVkIGluLFxuICAvLyBhbmQgYW4gb2xkZXIgc2VydmVyIG5hbWVzIG5vIGN1cnJlbmN5IGF0IGFsbC5cbiAgcHJpdmF0ZSBfY29udGV4dExpbmVzKHJlcG9ydDogUmVwb3J0KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4ocmVwb3J0LmVmZmVjdGl2ZVRpbWV6b25lID8gW2BUaW1lem9uZTogJHtyZXBvcnQuZWZmZWN0aXZlVGltZXpvbmV9YF0gOiBbXSksXG4gICAgICAuLi4ocmVwb3J0LmVmZmVjdGl2ZUN1cnJlbmN5ID8gW2BDdXJyZW5jeTogJHtyZXBvcnQuZWZmZWN0aXZlQ3VycmVuY3l9YF0gOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIC8vIEV2ZXJ5IGZpbHRlciBncm91cCBvZiB0aGUgcmVwb3J0IGFzIGl0cyB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzIGl0XG4gIC8vIGluIHRoZSBmaWxlLCBhdCB0aGUgc25hcHNob3QncyB2YWx1ZXMgYW5kIGluIGl0cyBmb3JtYXQsIGFzIHRoZSBjYW52YXNcbiAgLy8gd29yZHMgaXQuIEEgc2VsZWN0J3MgcGlja3MgYXJlIG5hbWVkIGZpcnN0LCBzbyBubyB0b2tlbiBpbiB0aGUgZmlsZVxuICAvLyByZWFkcyBhcyBsb2FkaW5nLiBFYWNoIHBhZ2UgYW5kIHRoZSBoZWFkZXIgYW5kIGZvb3RlciByZWFkIHRoZWlyIG93blxuICAvLyBncm91cHMgb2YgdGhlc2UgKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgICBuYW1lczogUmVwb3J0RXhwb3J0TGluZXNJbnB1dFsnbmFtZXMnXSxcbiAgKTogT2JzZXJ2YWJsZTxSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+PiB7XG4gICAgY29uc3QgZ3JvdXBzID0gcmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXTtcbiAgICBjb25zdCBwaWNrZWQgPSBncm91cHNcbiAgICAgIC5tYXAoKGdyb3VwKSA9PiAoeyBncm91cCwgdmFsdWVzOiB2YWx1ZVBpY2tzKHNuYXBzaG90LnZhbHVlc1tncm91cC5pZF0pIH0pKVxuICAgICAgLmZpbHRlcigoeyBncm91cCwgdmFsdWVzIH0pID0+IGdyb3VwLnR5cGUgPT09ICdzZWxlY3QnICYmIHZhbHVlcy5sZW5ndGgpO1xuICAgIGNvbnN0IG5hbWVzJCA9IHBpY2tlZC5sZW5ndGhcbiAgICAgID8gZm9ya0pvaW4ocGlja2VkLm1hcCgoeyBncm91cCwgdmFsdWVzIH0pID0+IG5hbWVzKGdyb3VwLCB2YWx1ZXMpKSlcbiAgICAgIDogb2YoW10gYXMgc3RyaW5nW11bXSk7XG5cbiAgICByZXR1cm4gbmFtZXMkLnBpcGUoXG4gICAgICBtYXAoKG5hbWVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5R3JvdXAgPSBuZXcgTWFwKHBpY2tlZC5tYXAoKHsgZ3JvdXAgfSwgaW5kZXgpID0+IFtncm91cC5pZCwgbmFtZWRbaW5kZXhdXSkpO1xuXG4gICAgICAgIHJldHVybiB0ZXh0RmlsdGVyRmllbGRzKFxuICAgICAgICAgIGdyb3VwcyxcbiAgICAgICAgICAoZ3JvdXBJZCkgPT4gc25hcHNob3QudmFsdWVzW2dyb3VwSWRdLFxuICAgICAgICAgIHNuYXBzaG90LmZvcm1hdENvbnRleHQubG9jYWxlLFxuICAgICAgICAgIChncm91cCkgPT4gYnlHcm91cC5nZXQoZ3JvdXAuaWQpLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIE5hbWVzIGEgc2VsZWN0IGdyb3VwJ3MgcGlja3MgKGtlcHQgb3IgbGVmdCBvdXQpIGZvciBvbmUgZXhwb3J0LCB0aGVpclxuICAvLyBzdG9yZWQgaWRzIHJlc29sdmVkIHRvIHRoZSBzYW1lIG5hbWVzIHRoZSBvbi1zY3JlZW4gY2hpcHMgc2hvdyDigJQgYSBjb3ZlclxuICAvLyByZWFkaW5nIFwiT3JnYW5pemF0aW9uOiA4Nzc0LCA4Nzc3XCIgdGVsbHMgdGhlIHJlYWRlciBub3RoaW5nIGFib3V0IHdoYXRcbiAgLy8gdGhlIHJlcG9ydCBjb3ZlcnMuIEVhY2ggZ3JvdXAncyBmdWxsIGxpc3QgaXMgcmVhZCBvbmNlIGZvciB0aGUgZXhwb3J0LFxuICAvLyB3aGF0ZXZlciBuYW1lcyBpdHMgcGlja3M6IGl0cyBmaWx0ZXIgbGluZSwgaXRzIHRva2VuLCBhIHRpdGxlLlxuICAvL1xuICAvLyBVc2VzIHRoZSByZXBvcnQgYmFyJ3Mgb3duIG5hbWVzIGFuZCByZXNvbHZlciBzbyB0aGUgdHdvIGNhbid0IGRyaWZ0OiBhXG4gIC8vIG5hbWUgdGhlIGJhcidzIGxpc3RzIHRhdWdodCAoUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UubGFiZWwpIGNvbWVzIGZpcnN0LFxuICAvLyBzbyBhIHBpY2sgYSBjdXQgb3IgbmFycm93ZWQgbGlzdCBsZWF2ZXMgb3V0IHJlYWRzIGFzIGl0cyBjaGlwIGRvZXMsIGFuZFxuICAvLyB0aGUgZnVsbCBsaXN0IG5hbWVzIHRoZSByZXN0LiBBIHZhbHVlIHdob3NlIGVudGl0eSB3YXMgZGVsZXRlZCBrZWVwc1xuICAvLyBzaG93aW5nIGl0cyByYXcgaWQgcmF0aGVyIHRoYW4gZHJvcHBpbmcgb2ZmIHRoZSBjb3ZlciBhbmQgc2lsZW50bHlcbiAgLy8gdW5kZXJzdGF0aW5nIHRoZSBmaWx0ZXIuIEEgZmFpbGVkIG9wdGlvbiBmZXRjaCBkZWdyYWRlcyB0aGUgd2hvbGUgbGluZSB0b1xuICAvLyBpZHMgZm9yIHRoZSBzYW1lIHJlYXNvbjogYW4gZXhwb3J0IG11c3QgbmV2ZXIgZmFpbCBvbiBhIGNvc21ldGljIGxvb2t1cC5cbiAgcHJpdmF0ZSBfcGlja05hbWVyKHJlcG9ydDogUmVwb3J0KTogUmVwb3J0RXhwb3J0TGluZXNJbnB1dFsnbmFtZXMnXSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdyb3VwT3B0aW9uc1JlYWRlcih0aGlzLl9yZXBvcnREYXRhKTtcblxuICAgIHJldHVybiAoZ3JvdXAsIHZhbHVlcykgPT4gcmVzb2x2ZU9wdGlvblZhbHVlcyhcbiAgICAgIG9wdGlvbnMoZ3JvdXAsIHJlcG9ydC5pZCksXG4gICAgICB2YWx1ZXMsXG4gICAgICAodmFsdWUpID0+IHRoaXMuX2ZpbHRlck9wdGlvbnMubGFiZWwoZ3JvdXAuaWQsIHZhbHVlKSxcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNvbHZlZCkgPT4gcmVzb2x2ZWQubWFwKChpdGVtKSA9PiBpdGVtLm5hbWUpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih2YWx1ZXMubWFwKChpdGVtKSA9PiBTdHJpbmcoaXRlbSkpKSksXG4gICAgICApO1xuICB9XG59XG4iXX0=
|
|
690
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTRCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNFLE9BQU8sRUFBYyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUNMLFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQXNCbkIsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLGdCQUFn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QUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDTixDQUFDO3dHQTdjVSw0QkFBNEI7NEdBQTVCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkRm9ybWF0dGVyLCBHcmlkVGFibGUsIHJlYWRHcmlkVGFibGUgfSBmcm9tICdAZmlyZXN0aXRjaC9ncmlkJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIGZyb20sIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHJlcG9ydEdyaWRGb3JtYXR0ZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1ncmlkL3JlcG9ydC1ncmlkLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBSZXBvcnRHcmlkU291cmNlIH0gZnJvbSAnLi4vZGF0YS9yZXBvcnQtZ3JpZC1zb3VyY2UnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHsgY3J1bWJlZFRpdGxlLCBkcmlsbENydW1iTGFiZWxzIH0gZnJvbSAnLi4vZHJpbGwtY3J1bWJzJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgbGF5ZXJGaWx0ZXJGaWVsZHMsIHRleHRGaWx0ZXJGaWVsZHMgfSBmcm9tICcuLi9maWx0ZXItdGV4dCc7XG5pbXBvcnQge1xuICBEQVlfTE9ORyxcbiAgZm9ybWF0TG9jYWxEYXRlLFxuICBmb3JtYXROdW1iZXIsXG4gIGZvcm1hdE91dHB1dFZhbHVlLFxuICBmb3JtYXRSZXBvcnREYXRlLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIHJlc29sdmVSZXBvcnRUaW1lem9uZSxcbn0gZnJvbSAnLi4vZm9ybWF0JztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtbGluZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZXNJbnB1dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lcy1pbnB1dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0U25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtc25hcHNob3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFN0YXRlU25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1zdGF0ZS1zbmFwc2hvdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YSxcbiAgQ29tcG9uZW50RGF0YVN0YXRlLFxuICBGaWx0ZXJHcm91cFZhbHVlLFxuICBMaXN0Q29sdW1uLFxuICBMaXN0Q29uZmlnLFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0TG9jYWxlVGFnLFxuICBSZXBvcnRNYXN0ZXIsXG4gIFJlcG9ydFBhZ2UsXG4gIFJlcG9ydFBhZ2VWYWx1ZSxcbiAgUmVwb3J0UmVsYXRpdmVSYW5nZSxcbiAgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEtwaUNhcmRWaWV3IH0gZnJvbSAnLi4va3BpLWNhcmQnO1xuaW1wb3J0IHtcbiAgTElTVF9UT1RBTF9MQUJFTCxcbiAgTGlzdE91dHB1dENvbHVtbixcbiAgbGlzdEhpZGRlbkNvbHVtbnMsXG4gIGxpc3RPdXRwdXRDb2x1bW5zLFxuICBsaXN0VG90YWxzTGFiZWxDb2x1bW4sXG59IGZyb20gJy4uL2xpc3QtY29uZmlnJztcbmltcG9ydCB7IHBpdm90Q29sdW1uU3BlY3MgfSBmcm9tICcuLi9vcHRpb24tYnVpbGRlcic7XG5pbXBvcnQgeyBjb21wb25lbnROb3RlTGluZXMsIGNvbXBvbmVudFdpbmRvd3NMaW5lIH0gZnJvbSAnLi4vb3V0cHV0LW5vdGVzJztcbmltcG9ydCB7IGdyb3VwT3B0aW9uc1JlYWRlciwgcmVzb2x2ZU9wdGlvblZhbHVlcyB9IGZyb20gJy4uL3JlcG9ydC1maWx0ZXItaXRlbXMnO1xuaW1wb3J0IHsgYXV0aG9yZWRHcmlkTGF5b3V0IH0gZnJvbSAnLi4vcmVwb3J0LWdyaWQtbGF5b3V0JztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4uL3JlcG9ydC10aWxlJztcbmltcG9ydCB7IG9mZmVyZWRWaWV3ZXJGZWF0dXJlcyB9IGZyb20gJy4uL3JlcG9ydC12aWV3ZXItZmVhdHVyZXMnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dEZpbHRlckZpZWxkLCBUZXh0VG9rZW5Db250ZXh0LCBUZXh0VmFsdWUsIGZpbGxUaXRsZVRva2VucywgdGV4dFBsYWluIH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyB0aWxlRGF0YVN0YXRlLCB2YWx1ZXNNYXRjaEFueUdyb3VwSWRzIH0gZnJvbSAnLi4vdGlsZS1kYXRhLXN0YXRlJztcbmltcG9ydCB7XG4gIGZhaWxlZFZhbHVlS2V5cywgcmVwb3J0Q29tcG9uZW50cywgc2hvd25WYWx1ZXMsIHRleHRWYWx1ZXMsIHZhbHVlS2V5cyxcbn0gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHsgZXhwb3J0TGluZXMsIG1hdGNoTGluZVRleHQsIHZhbHVlUGlja3MgfSBmcm9tICcuL3JlcG9ydC1maWx0ZXItbGluZXMnO1xuaW1wb3J0IHsgR1JJRF9FWFBPUlRfQ09MVU1OUywgZ3JpZEV4cG9ydE5vdGVzIH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1leHBvcnQnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGVkQ29tcG9uZW50IHtcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQ7XG4gIC8vIG51bGwgPSBpdHMgcXVlcnkgZmFpbGVkOyBleHBvcnRzIHNob3cgYSBub3RlLiBBbHdheXMgbnVsbCBmb3IgYSB0ZXh0XG4gIC8vIGJsb2NrLCB3aGljaCBoYXMgbm8gcXVlcnkg4oCUIHNlZSBpc0ZhaWxlZCgpLlxuICBkYXRhOiBDb21wb25lbnREYXRhIHwgbnVsbDtcbiAgLy8gVGhlIHRleHQgYSBsaXN0IHdhcyBzZWFyY2hlZCBieSB3aGVuIGl0IHdhcyBmZXRjaGVkOyBhYnNlbnQgd2hlbiBpdHNcbiAgLy8gc2VhcmNoIGJveCB3YXMgZW1wdHksIGFuZCBmb3IgZXZlcnkgb3RoZXIgY29tcG9uZW50LlxuICBzZWFyY2g/OiBzdHJpbmc7XG4gIC8vIFRoZSBjb25maWcgY29sdW1ucyBhIHZpZXdlciBoaWQgb24gYSBwbGFpbiBsaXN0LCB3aGljaCBpdHMgdGFibGUgbGVhdmVzXG4gIC8vIG91dCAobGlzdENvbHVtbnMpOyBlbXB0eSBmb3IgZXZlcnkgb3RoZXIgY29tcG9uZW50LlxuICBoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXTtcbiAgLy8gVGhlIGJyZWFkY3J1bWIgb2YgdGhlIGRyaWxsIHBhdGggYSBjaGFydCB3YXMgcmVhZCBhdCAodGhlIHBhdGggaXRzXG4gIC8vIGFuc3dlciBhcHBsaWVkKSwgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZTsgYWJzZW50IGF0IHRoZSBjaGFydCdzIHRvcC5cbiAgY3J1bWJzPzogc3RyaW5nW107XG4gIC8vIEEgdGFibGUgdGlsZSBhcyB0aGUgc2NyZWVuIGRyYXdzIGl0IChyZWFkR3JpZFRhYmxlKCkpLCB1cCB0byB0aGVcbiAgLy8gcmVuZGVyZXIncyByb3cgY2FwIGFuZCBHUklEX0VYUE9SVF9DT0xVTU5TIGNvbHVtbnM7IGl0cyBkYXRhIGlzIHRoZW5cbiAgLy8gdGhlIHJlYWQncyByZXBvcnQgbGluZSwgd2l0aCBubyByb3dzLiBBYnNlbnQgZm9yIGV2ZXJ5IG90aGVyIGNvbXBvbmVudC5cbiAgdGFibGU/OiBHcmlkVGFibGU7XG4gIC8vIFRoZSBsaW5lcyBhIHRhYmxlIGFkZHMgdW5kZXIgaXRzIGJveCAoZ3JpZEV4cG9ydE5vdGVzKCkpLlxuICB0YWJsZU5vdGVzPzogc3RyaW5nW107XG4gIC8vIEEgdGFibGUgd2hvc2UgY29sdW1uIGZpbHRlcnMgbmFycm93ZWQgaXRzIHJvd3MsIHdoaWNoIGl0cyB0aXRsZSBzYXlzLlxuICBmaWx0ZXJlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGVkUGFnZSB7XG4gIHBhZ2U6IFJlcG9ydFBhZ2U7XG4gIGNvbXBvbmVudHM6IENvbGxlY3RlZENvbXBvbmVudFtdO1xuICAvLyBXaGF0IHRoZSBwYWdlJ3MgdGV4dCBibG9ja3MgZmlsbCB0aGVpciB7e3ZhbHVlLjxrZXk+fX0gdG9rZW5zIHdpdGgsIGJ5IGtleVxuICAvLyAodGV4dFZhbHVlcyksIGFuZCB0aGUga2V5cyBvZiB0aGUgdmFsdWVzIGl0cyB0ZXh0IHNob3dzIHdob3NlIG51bWJlcnMgZGlkXG4gIC8vIG5vdCBjb21lIGJhY2s6IHRoZSByZXF1ZXN0IGZhaWxlZCwgb3IgdGhlIHZhbHVlJ3Mgb3duIHF1ZXJ5IGRpZC5cbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBUZXh0VmFsdWU+O1xuICBmYWlsZWRWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RlZFJlcG9ydCB7XG4gIHJlcG9ydDogUmVwb3J0O1xuICBwYWdlczogQ29sbGVjdGVkUGFnZVtdO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIncyB2YWx1ZXMsIGFzIGEgcGFnZSdzOiByZWFkIG9uY2UgZm9yIHRoZSB3aG9sZVxuICAvLyBmaWxlLCBzaW5jZSBldmVyeSBwYWdlIHRoYXQgc2hvd3MgdGhlIG1hc3RlciBzaG93cyB0aGUgc2FtZSBudW1iZXJzLlxuICBtYXN0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT47XG4gIG1hc3RlckZhaWxlZFZhbHVlczogc3RyaW5nW107XG4gIC8vIFRoZSBmaWx0ZXIgbGluZXMgb2YgdGhlIHRpdGxlIHNsaWRlL3BhZ2UsIGluIG9yZGVyOiB0aGVcbiAgLy8gZXhwb3J0J3MgZmlsdGVyIGxpbmVzIChjb3ZlckZpbHRlckxpbmVzKSwgdGhlbiB0aGUgbWF0Y2ggd2hpbGUgaXQgaXNcbiAgLy8gJ2FueScuXG4gIGZpbHRlclN1bW1hcnk6IHN0cmluZ1tdO1xuICAvLyBXaGF0IGVhY2gge3tmaWx0ZXIuPGlkPn19IHRva2VuIHByaW50cywgYnkgZmlsdGVyIGdyb3VwIGlkOiB0aGUgZmlsdGVyXG4gIC8vIGJhcidzIHZhbHVlcyBhcyB0aGUgc2NyZWVuIHdvcmRzIHRoZW0sIHJlYWQgb25jZSBzbyBldmVyeSBwYWdlIG9mIHRoZVxuICAvLyBmaWxlIGFncmVlcy4gRXZlcnkgZ3JvdXAnczogYSBwYWdlIHJlYWRzIGl0cyBvd24gKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgZmlsdGVyRmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+O1xuICAvLyBXaGF0IHRoZSBudW1iZXJzIGFyZSBtZWFzdXJlZCBpbiwgZm9yIHRoZSB0aXRsZSBzbGlkZS9wYWdlOiB0aGUgem9uZSBhbmRcbiAgLy8gdGhlIGN1cnJlbmN5IHRoZSBzZXJ2ZXIgcmVzb2x2ZWQgZm9yIHRoZSByZXBvcnQuIEVhY2ggaXMgbGVmdCBvdXQgd2hlbiB0aGVcbiAgLy8gc2VydmVyIGRvZXMgbm90IHNlbmQgaXQsIHJhdGhlciB0aGFuIGEgZ3Vlc3MgdGhhdCB3b3VsZCBiZSB3cm9uZyB3aGVuZXZlclxuICAvLyB0aGUgZGVmYXVsdCBhcHBsaWVzLlxuICBjb250ZXh0TGluZXM6IHN0cmluZ1tdO1xuICAvLyBIb3cgdGhlIG9wZW4gcmVwb3J0IHdyaXRlcyBpdHMgbnVtYmVycyBhbmQgZGF0ZXMgKGl0cyBsb2NhbGUsIGN1cnJlbmN5XG4gIC8vIGFuZCBwZXJjZW50IGZvcm0pLCByZWFkIG9uY2Ugc28gZXZlcnkgcGFnZSBvZiB0aGUgZmlsZSBhZ3JlZXMuXG4gIGZvcm1hdENvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQ7XG59XG5cbi8vIEhvdyBhbiBleHBvcnQgd29yZHMgdGhlIHNjcmVlbiAoZXhwb3J0V29yZGluZyk6IHRoZSBmaWx0ZXIgbGluZXMgKHRoZVxuLy8gY292ZXIncywgYW5kIHRoZSB6aXAncyBub3RlcyksIHdoYXQgZWFjaCB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzLCBieVxuLy8gZmlsdGVyIGdyb3VwIGlkLCBhbmQgZWFjaCB0aWxlJ3MgdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQsIGJ5XG4vLyBjb21wb25lbnQgaWQsIHdoaWNoIHRoZSB6aXAgbmFtZXMgdGhlIHRpbGUncyBmaWxlIGFmdGVyLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRFeHBvcnRXb3JkaW5nIHtcbiAgbGluZXM6IFJlcG9ydEV4cG9ydExpbmVbXTtcbiAgZmlsdGVyRmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+O1xuICB0aXRsZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz47XG59XG5cbi8vIEEgdGV4dCBibG9jayB3aG9zZSB3b3JkcyBkbyBub3QgZml0IGl0cyBib3ggaW4gYSBidWlsdCBmaWxlOiB0aGUgYmxvY2ssIHRoZVxuLy8gcGFnZSB0aGUgb3ZlcmZsb3cgZ2F0ZSBuYW1lcyBpdCB1bmRlciAoSEVBREVSX0ZPT1RFUl9OQU1FIGZvciBhIGhlYWRlciBvclxuLy8gZm9vdGVyIGJsb2NrKSBhbmQgdGhlIHN0YXJ0IG9mIGl0cyB0ZXh0LCBzbyB0aGUgcmVhZGVyIGNhbiBmaW5kIGl0LlxuZXhwb3J0IGludGVyZmFjZSBUZXh0T3ZlcmZsb3cge1xuICBjb21wb25lbnRJZDogbnVtYmVyO1xuICBwYWdlOiBzdHJpbmc7XG4gIHNuaXBwZXQ6IHN0cmluZztcbn1cblxuLy8gQSBjb21wb25lbnQgYSBidWlsZCBjb3VsZCBub3QgZHJhdzogdGhlIHBhZ2UgdGhlIGV4cG9ydCdzIGdhdGUgbmFtZXMgaXRcbi8vIHVuZGVyIGFuZCBob3cgaXQgcmVhZHMgdGhlcmUsIGl0cyB0aXRsZSBvciB0aGUgc3RhcnQgb2YgYSB0ZXh0IGJsb2NrJ3Ncbi8vIHdvcmRzLlxuZXhwb3J0IGludGVyZmFjZSBVbmRyYXduQ29tcG9uZW50IHtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgcGFnZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgZmlsZSBidWlsdCBhbmQgbm90IHlldCBzYXZlZC4gV2hldGhlciB0ZXh0IGZpdHMgaXRzIGJveCwgYW5kIHdoZXRoZXIgZXZlcnlcbi8vIGNvbXBvbmVudCBjb3VsZCBiZSBkcmF3biwgaXMga25vd24gb25seSBvbmNlIHRoZSBmaWxlIGlzIGJ1aWx0LCBzbyB0aGVcbi8vIGV4cG9ydCBhc2tzIGFib3V0IGJvdGggYmV0d2VlbiB0aGUgYnVpbGQgYW5kIHRoZSBzYXZlOiBgb3ZlcmZsb3dOb3RlYCBzYXlzXG4vLyB3aGF0IHRoaXMgZm9ybWF0IGRvZXMgd2l0aCBzdWNoIHRleHQsIGB1bmRyYXduYCBsaXN0cyB0aGUgY29tcG9uZW50cyB0aGVcbi8vIGZpbGUgbWFya3MgYXMgbm90IGRyYXduIGluIHRoZWlyIHBsYWNlLCBhbmQgYHNhdmVgIHdyaXRlcyB0aGUgZmlsZS5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbHRFeHBvcnQge1xuICBvdmVyZmxvd3M6IFRleHRPdmVyZmxvd1tdO1xuICBvdmVyZmxvd05vdGU6IHN0cmluZztcbiAgdW5kcmF3bjogVW5kcmF3bkNvbXBvbmVudFtdO1xuICBzYXZlOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn1cblxuLy8gT25lIGV4cG9ydGVkIGxpc3QgY29sdW1uOiB0aGUgY2VsbCBrZXksIGl0cyBoZWFkaW5nIGFuZCBpdHMgZm9ybWF0LCBhbmRcbi8vIHdoZXRoZXIgaXRzIGNlbGxzIGFyZSBmb3JtYXR0ZWQgbnVtYmVycywgd2hpY2ggZXZlcnkgZXhwb3J0IHJpZ2h0LWFsaWduc1xuLy8gKGhlYWRlciBpbmNsdWRlZCkgYXMgdGhlIHNjcmVlbiBkb2VzLiBBIGNvbHVtbiB0aGF0IGhvbGRzIGEgY29tcGFyZWQsXG4vLyB3aW5kb3dlZCwgcmFua2VkIG9yIHNoYXJlZCBvdXRwdXQgY2FycmllcyBob3cgaXQgaXMgd3JpdHRlbiAob3V0cHV0KSwgYW5kXG4vLyBob2xkcyBudW1iZXJzIHdoZXRoZXIgb3Igbm90IGl0IG5hbWVzIGEgZm9ybWF0LlxuZXhwb3J0IHR5cGUgRXhwb3J0TGlzdENvbHVtbiA9IExpc3RDb2x1bW4gJiB7IG51bWVyaWM6IGJvb2xlYW47IG91dHB1dD86IExpc3RPdXRwdXRDb2x1bW4gfTtcblxuLy8gSG93IHRhbGwgZWFjaCBwYXJ0IG9mIGFuIGV4cG9ydGVkIEtQSSBjYXJkIGlzLCBpbiB0aGUgcmVuZGVyZXIncyB1bml0XG4vLyAocG9pbnRzIGluIHRoZSBQREYsIGluY2hlcyBpbiB0aGUgZGVjaykuIEEgbm90ZSBpcyBvbmUgbGluZS5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpRXhwb3J0SGVpZ2h0cyB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsOiBudW1iZXI7XG4gIGRlbHRhOiBudW1iZXI7XG4gIHdpbmRvdzogbnVtYmVyO1xuICB0YXJnZXQ6IG51bWJlcjtcbiAgc3BhcmtsaW5lOiBudW1iZXI7XG4gIG5vdGU6IG51bWJlcjtcbn1cblxuLy8gVGhlIHBhcnRzIG9mIGEgS1BJIGNhcmQgYW4gZXhwb3J0IGRyYXdzOiB0aGUgdmFsdWUgYW5kIGl0cyBsYWJlbCBhbHdheXMsXG4vLyB0aGUgcmVzdCB3aGVuIHRoZSBjYXJkIGhhcyB0aGVtIGFuZCB0aGUgdGlsZSBoYXMgcm9vbSAoa3BpRXhwb3J0UGFydHMpLlxuLy8gc2NhbGUgc2hyaW5rcyB0aGUgcm93cyBhbmQgdGhlaXIgdGV4dCB3aGVuIHRoZSBwYXJ0cyB0aGF0IGFsd2F5cyBzdGF5IHN0aWxsXG4vLyBzdGFuZCB0YWxsZXIgdGhhbiB0aGUgdGlsZSAoc2NhbGVkS3BpSGVpZ2h0cyk6IDEgd2hlbiB0aGV5IGZpdC5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpRXhwb3J0UGFydHMge1xuICBkZWx0YTogYm9vbGVhbjtcbiAgd2luZG93OiBib29sZWFuO1xuICB0YXJnZXQ6IGJvb2xlYW47XG4gIHNwYXJrbGluZTogYm9vbGVhbjtcbiAgbm90ZXM6IHN0cmluZ1tdO1xuICBzY2FsZTogbnVtYmVyO1xufVxuXG4vLyBIb3cgZmFyIGEgS1BJIGNhcmQncyByb3dzIHNocmluayB0byBmaXQgYSBzaG9ydCB0aWxlLiBBIHRpbGUgc2hvcnRlciBzdGlsbFxuLy8gbGV0cyB0aGUgY2FyZCBydW4gcGFzdCBpdHMgZm9vdCByYXRoZXIgdGhhbiBwcmludCBpdCB1bnJlYWRhYmx5IHNtYWxsLlxuY29uc3QgS1BJX0VYUE9SVF9NSU5fU0NBTEUgPSAwLjU7XG5cbi8vIEhvdyBtYW55IHRpbGUgcXVlcmllcyBhbiBleHBvcnQgcnVucyBhdCBvbmNlLlxuLy9cbi8vIE5vdCBhIHBvbGl0ZW5lc3Mgc2V0dGluZyDigJQgaXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGRlY2sgYW5kIGEgYnJva2VuXG4vLyBvbmUuIFRoZXNlIHF1ZXJpZXMgYXJlIGhlYXZ5IGFuZCByZWFkIHRoZSBzYW1lIHRhYmxlcywgc28gZmlyaW5nIGFsbCBvZiB0aGVtXG4vLyB0b2dldGhlciBwdXRzIGV2ZXJ5IG9uZSBpbiBjb250ZW50aW9uIGZvciB0aGUgc2FtZSBkYXRhYmFzZSBhdCB0aGUgc2FtZVxuLy8gbW9tZW50IGFuZCB0aGV5IGNyb3NzIHRoZSBzdGF0ZW1lbnQgY2VpbGluZyBhcyBhIGdyb3VwOiBtZWFzdXJlZCBvbiByZXBvcnRcbi8vIDI4LCB0ZW4gdGlsZXMgdGhhdCBlYWNoIGFuc3dlciBpbiA5LTI0cyBydW4gb25lIGFmdGVyIGFub3RoZXIgYWxsIGZhaWxlZCBhdFxuLy8gfjMwcyB3aGVuIHJlbGVhc2VkIHRvZ2V0aGVyLiBDb25jdXJyZW5jeSBidXlzIHdhbGwtY2xvY2sgb25seSB1cCB0byB0aGUgcG9pbnRcbi8vIHdoZXJlIHRoZSBxdWVyaWVzIHN0YXJ0IHRha2luZyBpdCBiYWNrIG9mZiBlYWNoIG90aGVyLCBhbmQgcGFzdCB0aGF0IGl0IGJ1eXNcbi8vIGZhaWx1cmVzLlxuY29uc3QgRVhQT1JUX0NPTkNVUlJFTkNZID0gMztcblxuLy8gV2hhdCB0aGUgZXhwb3J0IGdhdGVzIGNhbGwgdGhlIGhlYWRlciBhbmQgZm9vdGVyOiB3aGVuIGEgdmFsdWUgdGhleSBzaG93XG4vLyBjYW1lIGJhY2sgd2l0aG91dCBpdHMgbnVtYmVyLCBhbmQgd2hlbiBvbmUgb2YgdGhlaXIgdGV4dCBibG9ja3MgZG9lcyBub3Rcbi8vIGZpdCBpdHMgYm94LlxuZXhwb3J0IGNvbnN0IEhFQURFUl9GT09URVJfTkFNRSA9ICdIZWFkZXIgJiBmb290ZXInO1xuXG4vLyBIb3cgbXVjaCBvZiBhIHRleHQgYmxvY2sncyB3b3JkcyB0aGUgZXhwb3J0IGdhdGVzIHF1b3RlIHRvIG5hbWUgYSBibG9jayB0aGF0XG4vLyBkb2VzIG5vdCBmaXQgaXRzIGJveC5cbmNvbnN0IE9WRVJGTE9XX1NOSVBQRVRfTEVOR1RIID0gNDA7XG5cbi8vIE9uZSByZXF1ZXN0IGluIGFuIGV4cG9ydCdzIHF1ZXVlOiBhIHRpbGUncyBkYXRhLCBvciB0aGUgbnVtYmVycyBvZiB0aGVcbi8vIHZhbHVlcyBvbmUgbGF5ZXIncyB0ZXh0IHJlYWRzLCByZWFkIHRvZ2V0aGVyLiBBIHZhbHVlcyBqb2IncyBwYWdlSW5kZXggaXNcbi8vIG51bGwgZm9yIHRoZSBoZWFkZXIgYW5kIGZvb3RlciAodGhlIG1hc3Rlcik7IGB2YWx1ZXNgIGlzIGV2ZXJ5IHZhbHVlIG9mIHRoZVxuLy8gbGF5ZXIsIHdoaWNoIG5hbWVzIGl0cyB0b2tlbnMgYW5kIHdob3NlIGZpbHRlciB2YWx1ZXMgdGhlIHJlcXVlc3QgY2Fycmllcyxcbi8vIGFuZCBgY29tcG9uZW50c2AgdGhlIG9uZXMgaXRzIHRleHQgc2hvd3MsIHdob3NlIG51bWJlcnMgdGhlIGZhaWx1cmUgZ2F0ZVxuLy8gcmVxdWlyZXMuXG50eXBlIENvbGxlY3RKb2IgPVxuICB8IHsga2luZDogJ2NvbXBvbmVudCc7IHBhZ2VJbmRleDogbnVtYmVyOyBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCB9XG4gIHwge1xuICAgIGtpbmQ6ICd2YWx1ZXMnO1xuICAgIHBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgICBwYWdlSWQ6IG51bWJlcjtcbiAgICB2YWx1ZXM6IFJlcG9ydENvbXBvbmVudFtdO1xuICAgIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xuICB9O1xuXG4vLyBPbmUgbGF5ZXIncyB2YWx1ZXMgYXMgdGhlIGZpbGUgcHJpbnRzIHRoZW0uXG50eXBlIENvbGxlY3RlZFZhbHVlcyA9IFBpY2s8Q29sbGVjdGVkUGFnZSwgJ3ZhbHVlcycgfCAnZmFpbGVkVmFsdWVzJz47XG5cbi8vIFdoYXQgYSBqb2IgY2FtZSBiYWNrIHdpdGgsIGFuZCB0aGUgcGFnZSBpdCBpcyBmaWxlZCB1bmRlci5cbnR5cGUgQ29sbGVjdFJlc3VsdCA9XG4gIHwgeyBraW5kOiAnY29tcG9uZW50JzsgcGFnZUluZGV4OiBudW1iZXI7IGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCB9XG4gIHwgeyBraW5kOiAndmFsdWVzJzsgcGFnZUluZGV4OiBudW1iZXIgfCBudWxsOyBjb2xsZWN0ZWQ6IENvbGxlY3RlZFZhbHVlcyB9O1xuXG4vLyBXaGF0IGEgY29tcG9uZW50IHdpdGggbm90aGluZyB0byBkcmF3IHByaW50cyBpbiB0aGUgZXhwb3J0ZWQgZmlsZS5cbi8vXG4vLyBUaGUgdHdvIGNhc2VzIG11c3Qgbm90IHJlYWQgYWxpa2UuIEEgdGlsZSB0aGF0IHJldHVybmVkIG5vIHJvd3MgaXMgYSBmaW5kaW5nXG4vLyBhYm91dCB0aGUgcGVyaW9kIOKAlCB0aGUgcmVwb3J0IHdvcmtlZCBhbmQgdGhlIGFuc3dlciBpcyBcIm5vbmVcIi4gQSB0aWxlIHdob3NlXG4vLyBxdWVyeSBmYWlsZWQgaXMgYSBob2xlIGluIHRoZSBmaWxlLCBhbmQgY2FsbGluZyB0aGF0IFwiRGF0YSB1bmF2YWlsYWJsZVwiIHRlbGxzXG4vLyB0aGUgcmVhZGVyIHRoZSBkYXRhIGRvZXMgbm90IGV4aXN0IHdoZW4gd2hhdCBoYXBwZW5lZCBpcyB0aGF0IG5vYm9keSBtYW5hZ2VkXG4vLyB0byBhc2sgZm9yIGl0LiBTaGFyZWQgYnkgYm90aCByZW5kZXJlcnMgc28gdGhlIFBERiBhbmQgdGhlIGRlY2sgY2Fubm90IGVuZCB1cFxuLy8gZGVzY3JpYmluZyB0aGUgc2FtZSBob2xlIHR3byBkaWZmZXJlbnQgd2F5cy5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUxhYmVsKGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCk6IHN0cmluZyB7XG4gIHJldHVybiBpdGVtLmRhdGEgPyAnTm8gZGF0YScgOiAnQ291bGQgbm90IGJlIGdlbmVyYXRlZCc7XG59XG5cbi8vIEEgY29tcG9uZW50J3MgdGl0bGUgYXMgYW4gZXhwb3J0ZWQgZmlsZSBwcmludHMgaXQ6IGl0cyB0b2tlbnMgZmlsbGVkIHdpdGhcbi8vIHRoZSBwYWdlIGl0IGlzIGRyYXduIG9uICh0aGUgcGh5c2ljYWwgcGFnZSB3aGVyZSB0aGUgUERGIG51bWJlcnMgYVxuLy8gY29udGludWF0aW9uIHBhZ2UpLCBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdC4gQSBkcmlsbGVkIGNoYXJ0J3MgdGl0bGVcbi8vIGlzIGZvbGxvd2VkIGJ5IGl0cyBicmVhZGNydW1iLCBgY3J1bWJzYCAoZHJpbGxDcnVtYkxhYmVscyk6ICdPcmRlcnMgYnlcbi8vIFBlcmlvZCDigLogMjAyNiDigLogUTMnLiBBIHNlYXJjaGVkIGxpc3Qgc2F5cyBzbywgc2luY2UgaXRzIHRhYmxlIGhvbGRzIG9ubHlcbi8vIHRoZSBtYXRjaGluZyByb3dzOiAnT3JkZXJzIChtYXRjaGluZyBcIm5vcnRoXCIpJy4gQW4gdW50aXRsZWQgb25lIHJlYWRzXG4vLyAnTWF0Y2hpbmcgXCJub3J0aFwiJy4gJycgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHByaW50LiBTaGFyZWQgYnkgdGhlIFBERlxuLy8gYW5kIHRoZSBkZWNrLCBjb250aW51YXRpb24gcGFnZXMgaW5jbHVkZWQuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0VGl0bGUoXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gIHNlYXJjaD86IHN0cmluZyB8IG51bGwsXG4gIGNydW1icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCxcbiAgZmlsdGVyZWQgPSBmYWxzZSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRpdGxlID0gY3J1bWJlZFRpdGxlKGZpbGxUaXRsZVRva2Vucyhjb21wb25lbnQudGl0bGUsIHRva2VucyksIGNydW1icyA/PyBbXSk7XG5cbiAgaWYgKGZpbHRlcmVkKSB7XG4gICAgcmV0dXJuIHRpdGxlID8gYCR7dGl0bGV9IChmaWx0ZXJlZClgIDogJ0ZpbHRlcmVkJztcbiAgfVxuXG4gIGlmICghc2VhcmNoKSB7XG4gICAgcmV0dXJuIHRpdGxlO1xuICB9XG5cbiAgcmV0dXJuIHRpdGxlID8gYCR7dGl0bGV9IChtYXRjaGluZyBcIiR7c2VhcmNofVwiKWAgOiBgTWF0Y2hpbmcgXCIke3NlYXJjaH1cImA7XG59XG5cbi8vIFdoZXRoZXIgYSB0aWxlJ3MgcXVlcnkgZmFpbGVkLiBBIHRleHQgYmxvY2sgaGFzIG5vIHF1ZXJ5LCBzbyBpdCBuZXZlciBkaWQuXG5leHBvcnQgZnVuY3Rpb24gaXNGYWlsZWQoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAhaXRlbS5kYXRhICYmIGl0ZW0uY29tcG9uZW50LnR5cGUgIT09ICd0ZXh0Jztcbn1cblxuLy8gQSB0ZXh0IGJsb2NrIHRoYXQgZG9lcyBub3QgZml0IGl0cyBib3ggaW4gYSBidWlsdCBmaWxlLCBhcyB0aGUgb3ZlcmZsb3cgZ2F0ZVxuLy8gbmFtZXMgaXQ6IHVuZGVyIGl0cyBwYWdlIChIRUFERVJfRk9PVEVSX05BTUUgZm9yIGEgaGVhZGVyIG9yIGZvb3RlciBibG9jaylcbi8vIGFuZCBieSB0aGUgc3RhcnQgb2YgaXRzIHdvcmRzLCBvbiBvbmUgbGluZS4gU2hhcmVkIGJ5IHRoZSBQREYgYW5kIHRoZSBkZWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHRleHRPdmVyZmxvdyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgcGFnZTogc3RyaW5nLCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBUZXh0T3ZlcmZsb3cge1xuICBjb25zdCB0ZXh0ID0gdGV4dFBsYWluKGNvbXBvbmVudC5jb25maWc/Lmh0bWwgPz8gJycsIHRva2VucykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblxuICByZXR1cm4ge1xuICAgIGNvbXBvbmVudElkOiBjb21wb25lbnQuaWQsXG4gICAgcGFnZSxcbiAgICBzbmlwcGV0OiB0ZXh0Lmxlbmd0aCA+IE9WRVJGTE9XX1NOSVBQRVRfTEVOR1RIID8gYCR7dGV4dC5zbGljZSgwLCBPVkVSRkxPV19TTklQUEVUX0xFTkdUSCkudHJpbUVuZCgpfeKApmAgOiB0ZXh0LFxuICB9O1xufVxuXG4vLyBUaGUgbGluZXMgdW5kZXIgdGhlIHJlcG9ydCdzIG5hbWUgb24gdGhlIFBERiB0aXRsZSBwYWdlIGFuZCB0aGUgdGl0bGUgc2xpZGU6XG4vLyB0aGUgZXhwb3J0IGRhdGUsIHRoZSBhY3RpdmUgZmlsdGVycywgdGhlbiB3aGF0IHRoZSBudW1iZXJzIGFyZSBtZWFzdXJlZCBpbi5cbi8vIFRoZSBkYXRlIGFsd2F5cyBsZWFkcyAodGhlIFBvd2VyUG9pbnQgbWFya3MgdGhhdCBsaW5lIGFzIHdyaXR0ZW4gaW4gdGhlXG4vLyByZXBvcnQncyBsb2NhbGUpLiBJdCBpcyB0b2RheSBpbiB0aGUgcmVwb3J0J3Mgem9uZSwgdGhlIHNhbWUgZGF5IGl0cyBmaWx0ZXJzXG4vLyByZXNvbHZlIFwidG9kYXlcIiB0bywgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlLlxuZXhwb3J0IGZ1bmN0aW9uIGNvdmVyTGluZXMoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbXG4gICAgZm9ybWF0TG9jYWxEYXRlKFxuICAgICAgbmV3IERhdGUoKSxcbiAgICAgIGNvbGxlY3RlZC5mb3JtYXRDb250ZXh0LmxvY2FsZSxcbiAgICAgIERBWV9MT05HLFxuICAgICAgcmVzb2x2ZVJlcG9ydFRpbWV6b25lKGNvbGxlY3RlZC5yZXBvcnQpLFxuICAgICksXG4gICAgLi4uY29sbGVjdGVkLmZpbHRlclN1bW1hcnksXG4gICAgLi4uY29sbGVjdGVkLmNvbnRleHRMaW5lcyxcbiAgXTtcbn1cblxuLy8gQW4gZXhwb3J0ZWQgbGlzdCBjZWxsLCByZWFkaW5nIGxpa2UgdGhlIG9uLXNjcmVlbiBjZWxsLCB0aHJvdWdoIHRoZSBzYW1lXG4vLyBmdW5jdGlvbnMgYXMgdGhlIHNjcmVlbjogYSBkYXRlIGNvbHVtbiByZW5kZXJzIGluIHRoZSByZXBvcnQncyB6b25lIGFuZFxuLy8gbG9jYWxlLCBhbmQgYSBjb2x1bW4gd2l0aCBudW1iZXItZm9ybWF0IGtleXMgKGEgY3Jvc3MtdGFiJ3MgY2VsbHMgdGhyb3VnaFxuLy8gaXRzIGNlbGxGb3JtYXQpIGluIHRoZSByZXBvcnQncyBsb2NhbGUgYW5kIGN1cnJlbmN5LiBBbnkgb3RoZXIgdmFsdWUgZ29lc1xuLy8gb3V0IHZlcmJhdGltLCBhbmQgYW4gZW1wdHkgb25lIGFzICcnLiBDU1YgbmV2ZXIgY29tZXMgdGhyb3VnaCBoZXJlOiBpdHNcbi8vIHZhbHVlcyBzdGF5IHJhdy5cbi8vXG4vLyBBbiBvdXRwdXQgY29sdW1uIGlzIHdyaXR0ZW4gYnkgd2hhdCBpdCBob2xkcywgYXMgdGhlIHNjcmVlbidzIGNlbGwgaXNcbi8vIChmb3JtYXRPdXRwdXRWYWx1ZSk6IGEgc2lnbmVkIGNoYW5nZSwgYSBwZXJjZW50IGNoYW5nZSwgYSBjaGFuZ2Ugb2YgYSByYXRlXG4vLyBpbiBwb2ludHMsIGEgcmFuaywgYSBzaGFyZS4gSXRzIHJvdyBnaXZlcyBhIGNoYW5nZSB0aGUgcHJpb3IgYmVzaWRlIGl0LCBzb1xuLy8gYSBtaXNzaW5nIGJhc2VsaW5lICgn4oCUJykgcmVhZHMgYXBhcnQgZnJvbSBhIHplcm8gb25lICgnbi9hJykuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2VsbChcbiAgdmFsdWU6IHVua25vd24sXG4gIGNvbHVtbjogTGlzdENvbHVtbiAmIHsgb3V0cHV0PzogTGlzdE91dHB1dENvbHVtbiB9LFxuICB0aW1lem9uZTogc3RyaW5nLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICByb3c/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwsXG4pOiBzdHJpbmcge1xuICBjb25zdCBvdXRwdXQgPSBjb2x1bW4ub3V0cHV0O1xuXG4gIGlmIChvdXRwdXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T3V0cHV0VmFsdWUodmFsdWUsIG91dHB1dC5vdXRwdXQsIGNvbHVtbiwgY29udGV4dCwge1xuICAgICAgbWVhc3VyZVNwZWM6IG91dHB1dC5tZWFzdXJlU3BlYyxcbiAgICAgIHByaW9yOiBvdXRwdXQucHJpb3JBbGlhcyAmJiByb3cgPyByb3dbb3V0cHV0LnByaW9yQWxpYXNdIDogdW5kZWZpbmVkLFxuICAgICAgZmxvb3I6IG91dHB1dC5mbG9vcixcbiAgICAgIGVtcHR5OiAnJyxcbiAgICB9KS50ZXh0O1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoY29sdW1uLmZvcm1hdCA9PT0gUmVwb3J0TGlzdENvbHVtbkZvcm1hdC5EYXRlKSB7XG4gICAgcmV0dXJuIGZvcm1hdFJlcG9ydERhdGUodmFsdWUsIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG4gIH1cblxuICByZXR1cm4gaGFzTnVtYmVyRm9ybWF0KGNvbHVtbikgPyBmb3JtYXROdW1iZXIodmFsdWUsIGNvbHVtbiwgY29udGV4dCwgeyBlbXB0eTogJycgfSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG4vLyBUaGUgY29sdW1ucyBhbiBleHBvcnRlZCBsaXN0IHRhYmxlIGRyYXdzLiBBIGNyb3NzLXRhYidzIGFycml2ZSB3aXRoIGl0c1xuLy8gcm93cyAodGhlIHJvdyBrZXkgZmlyc3QsIHRoZW4gb25lIHBlciBwaXZvdCB2YWx1ZSksIHNpbmNlIG9ubHkgdGhlIHJlc3VsdFxuLy8ga25vd3MgdGhlIHBpdm90IHZhbHVlcywgYW5kIGFyZSBidWlsdCBieSBwaXZvdENvbHVtblNwZWNzKCkgYXMgb24gc2NyZWVuOlxuLy8gaGVhZGVkIGJ5IGl0cyBwZXJpb2RzIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIGVhY2ggcGl2b3QgdmFsdWUgZm9ybWF0dGVkIGJ5XG4vLyBjZWxsRm9ybWF0LiBBIHBsYWluIGxpc3QgZHJhd3MgaXRzIGNvbmZpZ3VyZWQgY29sdW1ucyBidXQgdGhlIG9uZXMgdGhlXG4vLyB2aWV3ZXIgaGlkIChgaGlkZGVuYCwga2VwdCB0byBsaXN0SGlkZGVuQ29sdW1ucywgc28gbmV2ZXIgYWxsIG9mIHRoZW0pLFxuLy8gZWxzZSBldmVyeSBjb2x1bW4gdGhlIHF1ZXJ5IHJldHVybmVkLCBhcyBpdCBjYW1lLiBPdXRwdXQgY29sdW1ucyAodGhlXG4vLyBkYXRhJ3Mgb3V0cHV0cywgYSBjcm9zcy10YWIgY2VsbCB0aHJvdWdoIGNlbGxNZWFzdXJlcykgY2FycnkgaG93IHRoZXkgYXJlXG4vLyB3cml0dGVuOyB3aXRob3V0IHRob3NlIGtleXMgdGhlIGNvbHVtbnMgYXJlIGV4YWN0bHkgYXMgYmVmb3JlLlxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RDb2x1bW5zKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGhpZGRlbjogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IEV4cG9ydExpc3RDb2x1bW5bXSB7XG4gIGNvbnN0IGNvbmZpZyA9IChjb21wb25lbnQuY29uZmlnID8/IHt9KSBhcyBMaXN0Q29uZmlnO1xuXG4gIGlmIChjb25maWcucGl2b3RCeT8uY29sdW1uKSB7XG4gICAgcmV0dXJuIHdpdGhPdXRwdXRDb2x1bW5zKHBpdm90Q29sdW1uU3BlY3MoY29uZmlnLCBkYXRhLCBsb2NhbGUpLCBkYXRhLCBbXSk7XG4gIH1cblxuICBpZiAoY29uZmlnLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGhpZGRlbk5hbWVzID0gbGlzdEhpZGRlbkNvbHVtbnMoY29uZmlnLCBoaWRkZW4pO1xuXG4gICAgcmV0dXJuIHdpdGhPdXRwdXRDb2x1bW5zKFxuICAgICAgY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiAhaGlkZGVuTmFtZXMuaW5jbHVkZXMoY29sdW1uLmNvbHVtbikpXG4gICAgICAgIC5tYXAoKGNvbHVtbikgPT4gKHsgLi4uY29sdW1uLCBudW1lcmljOiBoYXNOdW1iZXJGb3JtYXQoY29sdW1uKSB9KSksXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLmNvbHVtbnMsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoT3V0cHV0Q29sdW1ucyhkYXRhLmNvbHVtbnMubWFwKChjb2x1bW4pID0+ICh7IGNvbHVtbiwgbnVtZXJpYzogZmFsc2UgfSkpLCBkYXRhLCBbXSk7XG59XG5cbi8vIFRoZSBjb2x1bW5zIHdpdGggdGhlaXIgb3V0cHV0IG1ldGFkYXRhIGF0dGFjaGVkIChsaXN0T3V0cHV0Q29sdW1ucywgYXMgdGhlXG4vLyBzY3JlZW4ncyBsaXN0IHJlc29sdmVzIGl0KTogYW4gb3V0cHV0IGNvbHVtbiBob2xkcyBudW1iZXJzIGFuZCBpcyB3cml0dGVuXG4vLyBieSB3aGF0IGl0IGhvbGRzLiBVbmNoYW5nZWQgd2hlbiB0aGUgZGF0YSBoYXMgbm8gb3V0cHV0cy5cbmZ1bmN0aW9uIHdpdGhPdXRwdXRDb2x1bW5zKFxuICBjb2x1bW5zOiBFeHBvcnRMaXN0Q29sdW1uW10sXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGF1dGhvcmVkOiByZWFkb25seSBMaXN0Q29sdW1uW10sXG4pOiBFeHBvcnRMaXN0Q29sdW1uW10ge1xuICBpZiAoIWRhdGEub3V0cHV0cykge1xuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0cyA9IGxpc3RPdXRwdXRDb2x1bW5zKGNvbHVtbnMsIGRhdGEsIGF1dGhvcmVkKTtcblxuICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gKG91dHB1dHNbY29sdW1uLmNvbHVtbl1cbiAgICA/IHsgLi4uY29sdW1uLCBudW1lcmljOiB0cnVlLCBvdXRwdXQ6IG91dHB1dHNbY29sdW1uLmNvbHVtbl0gfVxuICAgIDogY29sdW1uKSk7XG59XG5cbi8vIFRoZSBoZWFkaW5nIG92ZXIgZWFjaCBjb2x1bW4gb2YgbGlzdENvbHVtbnMoKTogYSBwbGFpbiBsaXN0J3MgY29uZmlndXJlZFxuLy8gbGFiZWwsIGVsc2UgaXRzIGNvbHVtbjsgYSBjcm9zcy10YWIncyBoZWFkaW5nIGZyb20gcGl2b3RDb2x1bW5TcGVjcygpLlxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RIZWFkaW5ncyhcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBoaWRkZW46IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsaXN0Q29sdW1ucyhjb21wb25lbnQsIGRhdGEsIGxvY2FsZSwgaGlkZGVuKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmxhYmVsIHx8IGNvbHVtbi5jb2x1bW4pO1xufVxuXG4vLyBBbiBleHBvcnRlZCBsaXN0J3MgdG90YWxzIHJvdywgb25lIGNlbGwgcGVyIGNvbHVtbiBvZiBsaXN0Q29sdW1ucygpOiBlYWNoXG4vLyB0b3RhbCB3cml0dGVuIGxpa2UgaXRzIGNvbHVtbidzIGNlbGxzLCBhbmQgTElTVF9UT1RBTF9MQUJFTCBpbiB0aGUgZmlyc3Rcbi8vIGNvbHVtbiB3aGVuIHRoYXQgY29sdW1uIGhvbGRzIG5vIHRvdGFsIChhIGNyb3NzLXRhYidzIHJvdyBrZXkpLiBudWxsIHdoZW5cbi8vIHRoZSBsaXN0IGhhcyBubyB0b3RhbHMuIFRoZSBDU1YgbmV2ZXIgY2FycmllcyBvbmU6IGl0cyByb3dzIHN0YXkgcmF3LlxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUb3RhbHNSb3coXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbHVtbnM6IHJlYWRvbmx5IEV4cG9ydExpc3RDb2x1bW5bXSxcbiAgdGltZXpvbmU6IHN0cmluZyxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IHN0cmluZ1tdIHwgbnVsbCB7XG4gIGNvbnN0IHRvdGFscyA9IGRhdGEudG90YWxzO1xuXG4gIGlmICghdG90YWxzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsYWJlbCA9IGxpc3RUb3RhbHNMYWJlbENvbHVtbihjb2x1bW5zLCB0b3RhbHMpO1xuXG4gIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAoY29sdW1uLmNvbHVtbiA9PT0gbGFiZWxcbiAgICA/IExJU1RfVE9UQUxfTEFCRUxcbiAgICA6IGV4cG9ydENlbGwodG90YWxzW2NvbHVtbi5jb2x1bW5dLCBjb2x1bW4sIHRpbWV6b25lLCBjb250ZXh0LCB0b3RhbHMpKSk7XG59XG5cbi8vIFRoZSBzdWJ0aXRsZSB1bmRlciBhIGNoYXJ0J3Mgb3IgYSBsaXN0J3MgdGl0bGU6IHRoZSBkYXlzIGl0IHJlYWRzLCBhbmQgdGhlXG4vLyBkYXlzIGVhY2ggY29tcGFyaXNvbiBsYW5lIHJlYWRzICgnU2VwIDEg4oCTIDE1LCAyMDI2IMK3IHZzIHByZXZpb3VzIG1vbnRoOlxuLy8gQXVnIDEg4oCTIDE1LCAyMDI2JyksIGFzIHRoZSBzY3JlZW4ncyBub3RlIG9wZW5zIHdpdGguICcnIHdpdGhvdXQgYVxuLy8gY29tcGFyaXNvbiBvciBhIHRpbWVmcmFtZSwgYW5kIGZvciBhIEtQSSwgd2hvc2UgY2FyZCBwcmludHMgaXRzIG93biB3aW5kb3dcbi8vIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0V2luZG93c0xpbmUoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LCB0aW1lem9uZTogc3RyaW5nLCBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyk6IHN0cmluZyB7XG4gIGlmICghaXRlbS5kYXRhIHx8IGl0ZW0uY29tcG9uZW50LnR5cGUgPT09ICdrcGknKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFdpbmRvd3NMaW5lKGl0ZW0uZGF0YSwgeyBsb2NhbGUsIHRpbWV6b25lIH0pO1xufVxuXG4vLyBUaGUgbm90ZSBsaW5lcyB1bmRlciBhIGNvbXBvbmVudCdzIGJveDogd2h5IGEgY29tcGFyaXNvbiByZWFkcyBhcyBpdCBkb2VzLFxuLy8gYSBLUEkncyBkZWx0YSBub3RlLCBhbmQgd2hhdCBlYWNoIHdpbmRvd2VkIHZhbHVlIGlzIGFuZCB3aHkuIFRoZSBkYXlzIGFyZVxuLy8gbGVmdCBvdXQgKHRoZSBzdWJ0aXRsZSBvciB0aGUgS1BJIGNhcmQgcHJpbnRzIHRoZW0pLCBhbmQgdGhlIHdpbmRvd1xuLy8gZGVzY3JpcHRpb25zIGFyZSBpbiwgc2luY2UgYSBmaWxlIGhhcyBubyB0b29sdGlwIG9yIGhlYWRlciB0byBjYXJyeSB0aGVtLlxuLy8gRW1wdHkgd2hlbiB0aGUgZGF0YSBoYXMgbm9uZSBvZiB0aGUga2V5cy5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnROb3RlTGluZXMoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LCB0aW1lem9uZTogc3RyaW5nLCBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5jb21wb25lbnROb3RlTGluZXMoaXRlbS5kYXRhLCB7IGxvY2FsZSwgdGltZXpvbmUgfSwgeyB3aW5kb3dzOiBmYWxzZSwgd2luZG93RGVzY3JpcHRpb25zOiB0cnVlIH0pLFxuICAgIC4uLihpdGVtLnRhYmxlTm90ZXMgPz8gW10pLFxuICBdO1xufVxuXG4vLyBXaGV0aGVyIGEgdGlsZSBoYXMgbm90aGluZyB0byBkcmF3OiBubyByb3dzLCBvciBhIHRhYmxlIHdpdGggbm8gbGluZS5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5VGlsZShpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGl0ZW0udGFibGVcbiAgICA/ICFpdGVtLnRhYmxlLnJvd3MubGVuZ3RoICYmICFpdGVtLnRhYmxlLnRvdGFsUm93XG4gICAgOiAhaXRlbS5kYXRhPy5yb3dzPy5sZW5ndGg7XG59XG5cbi8vIFdoZXRoZXIgYSBLUEkgY2FyZCBoYXMgbW9yZSB0byBkcmF3IHRoYW4gaXRzIHZhbHVlIGFuZCBsYWJlbC4gV2l0aG91dCwgYm90aFxuLy8gZXhwb3J0cyBkcmF3IHRoZSB0aWxlIGV4YWN0bHkgYXMgdGhleSBhbHdheXMgaGF2ZS5cbmV4cG9ydCBmdW5jdGlvbiBrcGlDYXJkSGFzRXh0cmFzKHZpZXc6IEtwaUNhcmRWaWV3LCBub3RlczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhKHZpZXcuZGVsdGEgfHwgdmlldy53aW5kb3cgfHwgdmlldy50YXJnZXQgfHwgdmlldy5zcGFya2xpbmUgfHwgbm90ZXMubGVuZ3RoKTtcbn1cblxuLy8gV2hpY2ggcGFydHMgb2YgYSBLUEkgY2FyZCBmaXQgYSB0aWxlIGBhdmFpbGFibGVgIHRhbGwuIEEgc2hvcnQgdGlsZSBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSBmaXJzdCwgdGhlbiB0aGUgdGFyZ2V0IGxpbmUsIHRoZW4gdGhlIG5vdGVzOyB0aGUgdmFsdWUsIGl0cyBsYWJlbFxuLy8gYW5kIHRoZSBkZWx0YSByb3cgYWx3YXlzIHN0YXksIGFuZCB0aGUgd2luZG93IGxpbmUgc3RheXMgd2hlbmV2ZXIgdGhlIGNhcmRcbi8vIHNob3dzIGEgY29tcGFyaXNvbiAoaXRzIGRheXMgYXJlIHdoYXQgdGhlIGRlbHRhIGlzIG1lYXN1cmVkIG92ZXIpLiBUaGVcbi8vIHNwYXJrbGluZSBuZWVkcyB2YWx1ZXMgdG8gZHJhdy4gV2hlbiB3aGF0IHN0YXlzIGlzIHN0aWxsIHRvbyB0YWxsLCBldmVyeVxuLy8gcm93IHNocmlua3MgYnkgdGhlIHNhbWUgc2NhbGUsIGRvd24gdG8gS1BJX0VYUE9SVF9NSU5fU0NBTEU7IGJ5IHRoZW4gdGhlXG4vLyBzcGFya2xpbmUsIHRoZSB0YXJnZXQgYW5kIHRoZSBub3RlcyBhcmUgZ29uZS5cbmV4cG9ydCBmdW5jdGlvbiBrcGlFeHBvcnRQYXJ0cyhcbiAgdmlldzogS3BpQ2FyZFZpZXcsXG4gIG5vdGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgYXZhaWxhYmxlOiBudW1iZXIsXG4gIGhlaWdodHM6IEtwaUV4cG9ydEhlaWdodHMsXG4pOiBLcGlFeHBvcnRQYXJ0cyB7XG4gIGNvbnN0IHBhcnRzOiBLcGlFeHBvcnRQYXJ0cyA9IHtcbiAgICBkZWx0YTogISF2aWV3LmRlbHRhLFxuICAgIHdpbmRvdzogISF2aWV3LndpbmRvdyxcbiAgICB0YXJnZXQ6ICEhdmlldy50YXJnZXQsXG4gICAgc3BhcmtsaW5lOiAhIXZpZXcuc3BhcmtsaW5lPy52YWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSxcbiAgICBub3RlczogWy4uLm5vdGVzXSxcbiAgICBzY2FsZTogMSxcbiAgfTtcbiAgY29uc3QgaGVpZ2h0ID0gKCkgPT4ga3BpRXhwb3J0SGVpZ2h0KHZpZXcsIHBhcnRzLCBoZWlnaHRzKTtcblxuICBpZiAoaGVpZ2h0KCkgPiBhdmFpbGFibGUpIHtcbiAgICBwYXJ0cy5zcGFya2xpbmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChoZWlnaHQoKSA+IGF2YWlsYWJsZSkge1xuICAgIHBhcnRzLnRhcmdldCA9IGZhbHNlO1xuICB9XG5cbiAgd2hpbGUgKGhlaWdodCgpID4gYXZhaWxhYmxlICYmIHBhcnRzLm5vdGVzLmxlbmd0aCkge1xuICAgIHBhcnRzLm5vdGVzLnBvcCgpO1xuICB9XG5cbiAgaWYgKGhlaWdodCgpID4gYXZhaWxhYmxlICYmICFwYXJ0cy5kZWx0YSkge1xuICAgIHBhcnRzLndpbmRvdyA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGhlaWdodCgpID4gYXZhaWxhYmxlKSB7XG4gICAgcGFydHMuc2NhbGUgPSBNYXRoLm1heChLUElfRVhQT1JUX01JTl9TQ0FMRSwgTWF0aC5tYXgoMCwgYXZhaWxhYmxlKSAvIGhlaWdodCgpKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gVGhlIGhlaWdodHMgc2NhbGVkIGJ5IHRoZSBwYXJ0cycgc2NhbGU6IHdoYXQgdGhlIHJlbmRlcmVyIGxheXMgdGhlIGNhcmRcbi8vIG91dCB3aXRoLCBpdHMgdGV4dCBzaXplZCBieSB0aGUgc2FtZSBzY2FsZS5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZWRLcGlIZWlnaHRzKGhlaWdodHM6IEtwaUV4cG9ydEhlaWdodHMsIHNjYWxlOiBudW1iZXIpOiBLcGlFeHBvcnRIZWlnaHRzIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogaGVpZ2h0cy52YWx1ZSAqIHNjYWxlLFxuICAgIGxhYmVsOiBoZWlnaHRzLmxhYmVsICogc2NhbGUsXG4gICAgZGVsdGE6IGhlaWdodHMuZGVsdGEgKiBzY2FsZSxcbiAgICB3aW5kb3c6IGhlaWdodHMud2luZG93ICogc2NhbGUsXG4gICAgdGFyZ2V0OiBoZWlnaHRzLnRhcmdldCAqIHNjYWxlLFxuICAgIHNwYXJrbGluZTogaGVpZ2h0cy5zcGFya2xpbmUgKiBzY2FsZSxcbiAgICBub3RlOiBoZWlnaHRzLm5vdGUgKiBzY2FsZSxcbiAgfTtcbn1cblxuLy8gSG93IHRhbGwgdGhlIGNhcmQncyBkcmF3biBwYXJ0cyBzdGFuZCB0b2dldGhlciwgaW4gdGhlIGhlaWdodHMnIHVuaXQuXG5leHBvcnQgZnVuY3Rpb24ga3BpRXhwb3J0SGVpZ2h0KHZpZXc6IEtwaUNhcmRWaWV3LCBwYXJ0czogS3BpRXhwb3J0UGFydHMsIGhlaWdodHM6IEtwaUV4cG9ydEhlaWdodHMpOiBudW1iZXIge1xuICByZXR1cm4gaGVpZ2h0cy52YWx1ZVxuICAgICsgKHZpZXcubGFiZWwgPyBoZWlnaHRzLmxhYmVsIDogMClcbiAgICArIChwYXJ0cy5kZWx0YSA/IGhlaWdodHMuZGVsdGEgOiAwKVxuICAgICsgKHBhcnRzLndpbmRvdyA/IGhlaWdodHMud2luZG93IDogMClcbiAgICArIChwYXJ0cy50YXJnZXQgPyBoZWlnaHRzLnRhcmdldCA6IDApXG4gICAgKyAocGFydHMuc3BhcmtsaW5lID8gaGVpZ2h0cy5zcGFya2xpbmUgOiAwKVxuICAgICsgcGFydHMubm90ZXMubGVuZ3RoICogaGVpZ2h0cy5ub3RlO1xufVxuXG4vLyBUaGUgbGFzdCByb3cgb2YgYW4gZXhwb3J0ZWQgbGlzdCB0YWJsZSB0aGF0IHN0b3BzIHNob3J0IG9mIGl0cyByZXN1bHQ6IGhvd1xuLy8gbWFueSByb3dzIHRoZSBmaWxlIGxlYXZlcyBvdXQgYW5kIHdoZXJlIHRoZSB3aG9sZSBzZXQgY2FuIGJlIGhhZC4gRWFjaFxuLy8gZm9ybWF0IGZldGNoZXMgaXRzIG93biBudW1iZXIgb2Ygcm93cyAoUERGX0xJU1RfUk9XUywgUFBUWF9MSVNUX1JPV1MpLCBhbmRcbi8vIGJvdGggbmFtZSB3aGF0IGlzIGxlZnQgd2l0aCB0aGlzIG9uZSBzZW50ZW5jZS5cbmV4cG9ydCBmdW5jdGlvbiBtb3JlUm93c05vdGljZShyZW1haW5pbmc6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBg4oCmICR7cmVtYWluaW5nfSBtb3JlIHJvdyhzKSDigJQgdXNlIHRoZSBjb21wb25lbnQncyBDU1YgZXhwb3J0IGZvciB0aGUgZnVsbCBkYXRhc2V0YDtcbn1cblxuLy8gVGhlIHBhZ2VzIG9mIGEgY29sbGVjdGVkIHJlcG9ydCB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIHRpbGUgd2hvc2UgcXVlcnlcbi8vIGZhaWxlZCwgb3Igd2hvc2UgdGV4dCBzaG93cyBhIHZhbHVlIHRoYXQgY2FtZSBiYWNrIHdpdGhvdXQgaXRzIG51bWJlciwgdGhlblxuLy8gSEVBREVSX0ZPT1RFUl9OQU1FIHdoZW4gdGhlIGhlYWRlciBvciBmb290ZXIgc2hvd3Mgb25lIG9uIGEgcGFnZSB0aGF0IHNob3dzXG4vLyB0aGUgbWFzdGVyIOKAlCB3aGF0IHRoZSBmYWlsdXJlIGdhdGUgbmFtZXMgdG8gdGhlIHVzZXIsIGFuZCB3aGF0IG1ha2VzIFwic29tZVxuLy8gb2YgdGhpcyBmaWxlIGlzIG1pc3NpbmdcIiBhIGZhY3QgdGhlIGNhbGxlciBjYW4gYWN0IG9uIHJhdGhlciB0aGFuIGEgdGhpbmdcbi8vIHRoZXkgbm90aWNlIGluIHRoZSBQREYgYWZ0ZXJ3YXJkcy5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRQYWdlTmFtZXMoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBzdHJpbmdbXSB7XG4gIC8vIE51bWJlcmVkIGJlZm9yZSB0aGUgZmlsdGVyIOKAlCBhbiB1bm5hbWVkIHBhZ2UgNCB0aGF0IGZhaWxlZCBoYXMgdG8gcmVhZFxuICAvLyBcIlBhZ2UgNFwiLCBub3QgXCJQYWdlIDFcIiBiZWNhdXNlIGl0IGhhcHBlbmVkIHRvIGJlIHRoZSBmaXJzdCBmYWlsdXJlLlxuICBjb25zdCBuYW1lcyA9IGNvbGxlY3RlZC5wYWdlc1xuICAgIC5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoeyBwYWdlLCBudW1iZXI6IGluZGV4ICsgMSB9KSlcbiAgICAuZmlsdGVyKCh7IHBhZ2UgfSkgPT4gcGFnZS5jb21wb25lbnRzLnNvbWUoaXNGYWlsZWQpXG4gICAgICB8fCBzaG93c0ZhaWxlZFZhbHVlKHBhZ2UuY29tcG9uZW50cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29tcG9uZW50KSwgcGFnZS5mYWlsZWRWYWx1ZXMpKVxuICAgIC5tYXAoKHsgcGFnZSwgbnVtYmVyIH0pID0+IHBhZ2UucGFnZS5uYW1lIHx8IGBQYWdlICR7bnVtYmVyfWApO1xuICBjb25zdCBtYXN0ZXIgPSBjb2xsZWN0ZWQucmVwb3J0Lm1hc3RlcjtcbiAgY29uc3Qgc2hvd3NNYXN0ZXIgPSBjb2xsZWN0ZWQucGFnZXMuc29tZSgoeyBwYWdlIH0pID0+ICFwYWdlLm1hc3RlckhpZGRlbik7XG5cbiAgaWYgKG1hc3RlciAmJiBzaG93c01hc3RlciAmJiBzaG93c0ZhaWxlZFZhbHVlKG1hc3Rlci5jb21wb25lbnRzLCBjb2xsZWN0ZWQubWFzdGVyRmFpbGVkVmFsdWVzKSkge1xuICAgIG5hbWVzLnB1c2goSEVBREVSX0ZPT1RFUl9OQU1FKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn1cblxuLy8gV2hldGhlciBhbnkgb2YgdGhlIHRleHQgYmxvY2tzIHNob3dzIG9uZSBvZiB0aGUgZmFpbGVkIHZhbHVlIGtleXMuXG5mdW5jdGlvbiBzaG93c0ZhaWxlZFZhbHVlKGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdLCBmYWlsZWQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNob3duID0gbmV3IFNldChjb21wb25lbnRzXG4gICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBjb21wb25lbnQudHlwZSA9PT0gJ3RleHQnKVxuICAgIC5mbGF0TWFwKChjb21wb25lbnQpID0+IHZhbHVlS2V5cyhjb21wb25lbnQuY29uZmlnPy5odG1sKSkpO1xuXG4gIHJldHVybiBmYWlsZWQuc29tZSgoa2V5KSA9PiBzaG93bi5oYXMoa2V5KSk7XG59XG5cbi8vIFRoZSBjb3ZlcidzIGZpbHRlciBsaW5lczogdGhlIGV4cG9ydCdzIGZpbHRlciBsaW5lcywgdGhlbiB0aGUgbWF0Y2ggd2hpbGUgdGhlIHJlcG9ydCBiYXIncyBmaWx0ZXJzIG1hdGNoIGFueS4gQSBkcmlsbGVkIGNoYXJ0J3MgbGluZVxuLy8gaXMgaXRzIHRpdGxlIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0IChgdGl0bGVzYCwgYnkgY29tcG9uZW50IGlkKSBhbmRcbi8vIHRoZSBjcnVtYnMgb2YgdGhlIHBhdGggaXRzIGFuc3dlciBhcHBsaWVkICh0aGUgb25lcyBpdHMgdGl0bGUgcHJpbnRzKSwgbm90XG4vLyB0aGUgcGF0aCB0aGUgc2NyZWVuIGFza2VkIGZvcjogdGhlIHNlcnZlciBtYXkgaGF2ZSBjdXQgdGhhdCBwYXRoIHNob3J0IG9yXG4vLyByZWZ1c2VkIGl0LlxuZXhwb3J0IGZ1bmN0aW9uIGNvdmVyRmlsdGVyTGluZXMoXG4gIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgbGluZXM6IHJlYWRvbmx5IFJlcG9ydEV4cG9ydExpbmVbXSxcbiAgcGFnZXM6IHJlYWRvbmx5IFBpY2s8Q29sbGVjdGVkUGFnZSwgJ2NvbXBvbmVudHMnPltdLFxuICB0aXRsZXM6IFJlYWRvbmx5PFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0ge30sXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG1hdGNoID0gc25hcHNob3QuZmVhdHVyZXMuaW5jbHVkZXMoJ21hdGNoQW55JykgPyBtYXRjaExpbmVUZXh0KHNuYXBzaG90LnN0YXRlLm1hdGNoLCAnbGluZScpIDogbnVsbDtcbiAgY29uc3QgZHJpbGxlZCA9IHBhZ2VzXG4gICAgLmZsYXRNYXAoKHBhZ2UpID0+IHBhZ2UuY29tcG9uZW50cylcbiAgICAuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0uY3J1bWJzPy5sZW5ndGgpXG4gICAgLm1hcCgoaXRlbSkgPT4gY3J1bWJlZFRpdGxlKHRpdGxlc1tpdGVtLmNvbXBvbmVudC5pZF0gPz8gaXRlbS5jb21wb25lbnQudGl0bGUsIGl0ZW0uY3J1bWJzKSk7XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5saW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUua2luZCAhPT0gJ2RyaWxsJykubWFwKChsaW5lKSA9PiBsaW5lLnRleHQpLFxuICAgIC4uLmRyaWxsZWQsXG4gICAgbWF0Y2gsXG4gIF1cbiAgICAuZmlsdGVyKChsaW5lKTogbGluZSBpcyBzdHJpbmcgPT4gISFsaW5lKTtcbn1cblxuLy8gV2hldGhlciBhIFBERiBvciBQb3dlclBvaW50IGV4cG9ydCBsYXlzIGEgY29tcG9uZW50IG91dDogZXZlcnkgdGlsZSwgYW5kXG4vLyBldmVyeSB0ZXh0IGJsb2NrLCB3aGljaCBoYXMgbm90aGluZyB0byBmZXRjaCBhbmQgcmlkZXMgdGhyb3VnaCB3aXRoIG5vXG4vLyBkYXRhLiBBbnkgb3RoZXIgdHlwZSAoYW4gaW5saW5lIHZhbHVlLCBvciBhIHR5cGUgdGhpcyB2aWV3ZXIgZG9lcyBub3Rcbi8vIGtub3cpIG5ldmVyIGlzOiBhIHZhbHVlIGlzIHJlYWQgb25seSB0aHJvdWdoIGl0cyBsYXllcidzIHZhbHVlcyBqb2IuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBvcnRTbG90KGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1RpbGUoY29tcG9uZW50KSB8fCBjb21wb25lbnQudHlwZSA9PT0gJ3RleHQnO1xufVxuXG4vLyBHYXRoZXJzIGV2ZXJ5dGhpbmcgYW4gZXhwb3J0IG5lZWRzOiBldmVyeSBjb21wb25lbnQncyBkYXRhIGFjcm9zcyBBTEwgcGFnZXNcbi8vICh0aGUgY2FudmFzIG9ubHkgcmVuZGVycyB0aGUgYWN0aXZlIHBhZ2UsIHNvIGV4cG9ydHMgY2FuJ3Qgc2NyYXBlIHRoZVxuLy8gc2NyZWVuKSwgYW5kIHRoZSBudW1iZXJzIG9mIHRoZSB2YWx1ZXMgdGhlaXIgdGV4dCByZWFkcywgZmV0Y2hlZCBmcmVzaCB3aXRoXG4vLyB0aGUgdmlld2VyJ3MgY3VycmVudCBmaWx0ZXIgc3RhdGUuXG4vL1xuLy8gQSBmYWlsZWQgY29tcG9uZW50IHJlc29sdmVzIHRvIGEgbnVsbCBgZGF0YWAsIGFuZCBhIGZhaWxlZCB2YWx1ZSB0byBhIGtleSBpblxuLy8gaXRzIHBhZ2UncyBmYWlsZWRWYWx1ZXMsIHJhdGhlciB0aGFuIGZhaWxpbmcgdGhlIHdob2xlIGNvbGxlY3Rpb24g4oCUIGJ1dCB0aGF0XG4vLyBpcyBzbyB0aGUgY2FsbGVyIGNhbiBSRVBPUlQgd2hhdCBmYWlsZWQsIG5vdCBzbyBpdCBjYW4gYmUgaWdub3JlZDogc2VlXG4vLyBmYWlsZWRQYWdlTmFtZXMoKSBhbmQgdGhlIGZhaWx1cmUgZ2F0ZSB0aGF0IHVzZXMgaXQuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZmlsdGVyT3B0aW9ucyA9IGluamVjdChSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSk7XG5cbiAgLy8gbGlzdFJvd3MgaXMgaG93IG1hbnkgcm93cyBlYWNoIGxpc3QgZmV0Y2hlczogdGhlIHJlbmRlcmVyJ3Mgb3duIGNhcCwgc2luY2VcbiAgLy8gYSBQREYgdGFibGUgY29udGludWVzIG9udG8gZXh0cmEgcGFnZXMgYW5kIGEgc2xpZGUgdGFibGUgY2Fubm90LlxuICAvL1xuICAvLyBUaGUgc2NyZWVuIGlzIHJlYWQgb25jZSwgd2hlbiB0aGUgZXhwb3J0IHN0YXJ0cyAoc25hcHNob3QpOiBldmVyeSB0aWxlLFxuICAvLyBldmVyeSB2YWx1ZXMgam9iLCB0aGUgZmlsdGVyIGxpbmVzIGFuZCB0aGUgY292ZXIgcmVhZCB0aGF0IGNvcHksIHNvIGFcbiAgLy8gZmlsdGVyIGNoYW5nZWQgd2hpbGUgdGhlIHRpbGVzIGFyZSBmZXRjaGVkIHJlYWNoZXMgbm9uZSBvZiB0aGVtLiBBIHJldHJ5XG4gIC8vIGNvbGxlY3RzIGFnYWluLCBhbmQgc28gcmVhZHMgdGhlIHNjcmVlbiBhcyBpdCBpcyB0aGVuLlxuICBwdWJsaWMgY29sbGVjdChyZXBvcnQ6IFJlcG9ydCwgbGlzdFJvd3M6IG51bWJlcik6IE9ic2VydmFibGU8Q29sbGVjdGVkUmVwb3J0PiB7XG4gICAgY29uc3Qgam9icyA9IHRoaXMuX2pvYnMocmVwb3J0KTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuc25hcHNob3QocmVwb3J0KTtcbiAgICBjb25zdCBmb3JtYXRDb250ZXh0ID0gc25hcHNob3QuZm9ybWF0Q29udGV4dDtcblxuICAgIC8vIFJlbGVhc2VkIGEgZmV3IGF0IGEgdGltZSByYXRoZXIgdGhhbiBhbGwgYXQgb25jZSwgYSBwYWdlJ3MgdmFsdWVzIGluIHRoZVxuICAgIC8vIHNhbWUgcXVldWUgYXMgdGhlIHRpbGVzLCBzbyB0aGV5IG5ldmVyIGFkZCB0byB0aGUgcXVlcmllcyBhbHJlYWR5XG4gICAgLy8gcnVubmluZy4gbWVyZ2VNYXAgY29tcGxldGVzIG91dCBvZiBvcmRlciwgc28gZWFjaCByZXN1bHQgY2FycmllcyB0aGUgam9iXG4gICAgLy8gaXQgY2FtZSBmcm9tIGFuZCB0aGUgcm93cyBhcmUgZmlsZWQgYnkgaW5kZXgg4oCUIHRoZSBkZWNrJ3MgcGFnZSBvcmRlclxuICAgIC8vIGNhbid0IGRlcGVuZCBvbiB3aGljaCBxdWVyeSBoYXBwZW5lZCB0byBmaW5pc2ggZmlyc3QuXG4gICAgY29uc3QgYWxsJCA9IGpvYnMubGVuZ3RoXG4gICAgICA/IGZyb20oam9icy5tYXAoKGpvYiwgaW5kZXgpID0+ICh7IGpvYiwgaW5kZXggfSkpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtZXJnZU1hcChcbiAgICAgICAgICAgICh7IGpvYiwgaW5kZXggfSkgPT4gdGhpcy5fcnVuSm9iKHJlcG9ydCwgam9iLCBsaXN0Um93cywgc25hcHNob3QpXG4gICAgICAgICAgICAgIC5waXBlKG1hcCgocmVzdWx0KSA9PiAoeyByZXN1bHQsIGluZGV4IH0pKSksXG4gICAgICAgICAgICBFWFBPUlRfQ09OQ1VSUkVOQ1ksXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0b0FycmF5KCksXG4gICAgICAgIClcbiAgICAgIDogb2YoW10gYXMgeyByZXN1bHQ6IENvbGxlY3RSZXN1bHQ7IGluZGV4OiBudW1iZXIgfVtdKTtcblxuICAgIC8vIFRoZSBsaW5lcyBhbmQgdGhlIGZpbHRlciB0b2tlbnMgcmlkZSBhbG9uZ3NpZGUgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAgLy8gcmF0aGVyIHRoYW4gYmVpbmcgYnVpbHQgYXQgdGhlIGVuZCwgYmVjYXVzZSBuYW1pbmcgYSBzZWxlY3QgZmlsdGVyJ3NcbiAgICAvLyB2YWx1ZXMgaXMgaXRzZWxmIGEgcmVxdWVzdC5cbiAgICByZXR1cm4gZm9ya0pvaW4oeyBjb2xsZWN0ZWQ6IGFsbCQsIHdvcmRpbmc6IHRoaXMuZXhwb3J0V29yZGluZyhyZXBvcnQsIHNuYXBzaG90KSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoeyBjb2xsZWN0ZWQsIHdvcmRpbmcgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLl9maWxlKHJlcG9ydCwgY29sbGVjdGVkLCBmb3JtYXRDb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXBvcnQsXG4gICAgICAgICAgICAuLi5maWxlLFxuICAgICAgICAgICAgZmlsdGVyU3VtbWFyeTogY292ZXJGaWx0ZXJMaW5lcyhzbmFwc2hvdCwgd29yZGluZy5saW5lcywgZmlsZS5wYWdlcywgd29yZGluZy50aXRsZXMpLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzOiB3b3JkaW5nLmZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIGNvbnRleHRMaW5lczogdGhpcy5fY29udGV4dExpbmVzKHJlcG9ydCksXG4gICAgICAgICAgICBmb3JtYXRDb250ZXh0LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBzY3JlZW4gYXMgb25lIGV4cG9ydCByZWFkcyBpdDogdGhlIHN0YXRlIHNuYXBzaG90LCBlYWNoIGdyb3VwJ3MgdmFsdWVcbiAgLy8gYW5kIGxpdmUgcHJlc2V0LCBlYWNoIHRpbGUncyBmaWx0ZXIgZW50cmllcyBhbmQgc3RhdGUgKHRpbGVEYXRhU3RhdGUpLFxuICAvLyBlYWNoIHZhbHVlJ3MgZmlsdGVyIGVudHJpZXMsIHRoZSBncmFpbiwgdGhlIGZlYXR1cmVzIHNlcnZlZCBhbmQgdGhlXG4gIC8vIGZvcm1hdC4gQSB2YWx1ZSdzIGVudHJpZXMgYXJlIHJlYWQgaGVyZSB0b28sIHNvIHRoZVxuICAvLyBudW1iZXJzIGluIGEgZmlsZSdzIHRleHQgYXJlIGZpbHRlcmVkIGFzIGl0cyB0aWxlcyBhcmUsIHdoYXRldmVyIHRoZSBiYXJcbiAgLy8gZG9lcyB3aGlsZSB0aGUgZXhwb3J0IHJ1bnMuXG4gIHB1YmxpYyBzbmFwc2hvdChyZXBvcnQ6IFJlcG9ydCk6IFJlcG9ydEV4cG9ydFNuYXBzaG90IHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2ZpbHRlclN0YXRlLnNuYXBzaG90KCk7XG4gICAgY29uc3QgdGlsZXMgPSAocmVwb3J0LnBhZ2VzID8/IFtdKVxuICAgICAgLmZsYXRNYXAoKHBhZ2UpID0+IHBhZ2UuY29tcG9uZW50cyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gaXNUaWxlKGNvbXBvbmVudCkpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHJlcG9ydENvbXBvbmVudHMocmVwb3J0KVxuICAgICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBjb21wb25lbnQudHlwZSA9PT0gJ3ZhbHVlJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGUsXG4gICAgICAuLi50aGlzLl9ncm91cFZhbHVlcyhyZXBvcnQpLFxuICAgICAgZmlsdGVyczogT2JqZWN0LmZyb21FbnRyaWVzKHRpbGVzLm1hcCgodGlsZSkgPT4gW3RpbGUuaWQsIHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JDb21wb25lbnQodGlsZSldKSksXG4gICAgICB2YWx1ZUZpbHRlcnM6IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZXNcbiAgICAgICAgLm1hcCgodmFsdWUpID0+IFt2YWx1ZS5pZCwgdGhpcy5fZmlsdGVyU3RhdGUucmVzb2x2ZUZvckNvbXBvbmVudCh2YWx1ZSldKSksXG4gICAgICBzdGF0ZXM6IE9iamVjdC5mcm9tRW50cmllcyh0aWxlcy5tYXAoKHRpbGUpID0+IFt0aWxlLmlkLCB0aGlzLl90aWxlU3RhdGUocmVwb3J0LCB0aWxlLCBzdGF0ZSldKSksXG4gICAgICBncmlkRXhwYW5zaW9uczogT2JqZWN0LmZyb21FbnRyaWVzKHRpbGVzXG4gICAgICAgIC5tYXAoKHRpbGUpID0+IFt0aWxlLmlkLCB0aGlzLl9maWx0ZXJTdGF0ZS5ncmlkRXhwYW5zaW9uKHRpbGUpXSBhcyBjb25zdClcbiAgICAgICAgLmZpbHRlcigoWywgZXhwYW5zaW9uXSkgPT4gISFleHBhbnNpb24pKSxcbiAgICAgIGZyZXF1ZW5jeTogdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCksXG4gICAgICBmZWF0dXJlczogb2ZmZXJlZFZpZXdlckZlYXR1cmVzKHJlcG9ydC52aWV3ZXJGZWF0dXJlcyksXG4gICAgICBmb3JtYXRDb250ZXh0OiB0aGlzLl9maWx0ZXJTdGF0ZS5mb3JtYXRDb250ZXh0KCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEhvdyBhbiBleHBvcnQgd29yZHMgdGhlIHNjcmVlbiwgb3ZlciBhIHNuYXBzaG90IChgcGFnZUlkYCBmb3IgYSBUaGlzXG4gIC8vIFBhZ2UgemlwKTogaXRzIGZpbHRlciBsaW5lcyAoZXhwb3J0TGluZXM6IHRoZSBjb3ZlcidzLCBhbmQgdGhlIHppcCdzXG4gIC8vIGZpbHRlckxpbmVzKSwgd2hhdCBlYWNoIHt7ZmlsdGVyLjxpZD59fSB0b2tlbiBwcmludHMsIGFuZCBlYWNoIHRpbGUnc1xuICAvLyB0aXRsZSBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdCAodGhlIHppcCBuYW1lcyBpdHMgZmlsZXMgYWZ0ZXJcbiAgLy8gdGhlbSkuIEEgc2VsZWN0J3MgcGlja3MgYXJlIG5hbWVkIG9uY2UgZm9yIGFsbCB0aHJlZSwgYXMgdGhlIHJlcG9ydCBiYXJcbiAgLy8gbmFtZXMgdGhlbSwgc28gbm8gdG9rZW4gaW4gYSBmaWxlIHJlYWRzIGFzIGxvYWRpbmcuXG4gIHB1YmxpYyBleHBvcnRXb3JkaW5nKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgICBwYWdlSWQ6IG51bWJlciB8IG51bGwgPSBudWxsLFxuICApOiBPYnNlcnZhYmxlPFJlcG9ydEV4cG9ydFdvcmRpbmc+IHtcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMuX3BpY2tOYW1lcihyZXBvcnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckZpZWxkcyhyZXBvcnQsIHNuYXBzaG90LCBuYW1lcylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGZpbHRlckZpZWxkcykgPT4ge1xuICAgICAgICAgIGNvbnN0IHRpdGxlcyA9IHRoaXMuX2V4cG9ydFRpdGxlcyhyZXBvcnQsIHBhZ2VJZCwgZmlsdGVyRmllbGRzKTtcblxuICAgICAgICAgIHJldHVybiBleHBvcnRMaW5lcyh7IHJlcG9ydCwgc25hcHNob3QsIHBhZ2VJZCwgbmFtZXMsIHRpdGxlcyB9KVxuICAgICAgICAgICAgLnBpcGUobWFwKChsaW5lcykgPT4gKHsgbGluZXMsIGZpbHRlckZpZWxkcywgdGl0bGVzIH0pKSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFRoZSB0aXRsZSBvZiBlYWNoIHRpbGUsIGJ5IGNvbXBvbmVudCBpZCwgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQ6XG4gIC8vIGl0cyB0b2tlbnMgZmlsbGVkIHdpdGggaXRzIHBhZ2UncyBmaWVsZHMgYW5kIHRoZSBmaWx0ZXJzIHRoZSBwYWdlIHJlYWRzXG4gIC8vIChsYXllckZpbHRlckZpZWxkcykuIFRoZSB3aG9sZSByZXBvcnQncyBvciBvbmUgcGFnZSdzIChwYWdlSWQpLiBBblxuICAvLyB1bnRpdGxlZCB0aWxlIGlzIGxlZnQgb3V0OiB0aGUgc2VydmVyIG5hbWVzIGl0cyBmaWxlIGJ5IGl0cyB0eXBlLlxuICBwcml2YXRlIF9leHBvcnRUaXRsZXMoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgcGFnZUlkOiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkczogUmVjb3JkPG51bWJlciwgVGV4dEZpbHRlckZpZWxkPixcbiAgKTogUmVjb3JkPG51bWJlciwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcygocmVwb3J0LnBhZ2VzID8/IFtdKVxuICAgICAgLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7IHBhZ2UsIGluZGV4IH0pKVxuICAgICAgLmZpbHRlcigoeyBwYWdlIH0pID0+ICFwYWdlSWQgfHwgcGFnZS5pZCA9PT0gcGFnZUlkKVxuICAgICAgLmZsYXRNYXAoKHsgcGFnZSwgaW5kZXggfSkgPT4ge1xuICAgICAgICBjb25zdCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQgPSB7XG4gICAgICAgICAgcGFnZU51bWJlcjogaW5kZXggKyAxLFxuICAgICAgICAgIHBhZ2VOYW1lOiBwYWdlLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YCxcbiAgICAgICAgICByZXBvcnROYW1lOiByZXBvcnQubmFtZSxcbiAgICAgICAgICBmaWx0ZXJzOiBsYXllckZpbHRlckZpZWxkcyhmaWVsZHMsIHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIHBhZ2UuaWQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAocGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gaXNUaWxlKGNvbXBvbmVudCkgJiYgISFjb21wb25lbnQudGl0bGUpXG4gICAgICAgICAgLm1hcCgoY29tcG9uZW50KTogW251bWJlciwgc3RyaW5nXSA9PiBbY29tcG9uZW50LmlkLCBmaWxsVGl0bGVUb2tlbnMoY29tcG9uZW50LnRpdGxlLCB0b2tlbnMpXSk7XG4gICAgICB9KSk7XG4gIH1cblxuICAvLyBFdmVyeSByZXF1ZXN0IHRoZSBleHBvcnQgbWFrZXMsIGluIHBhZ2Ugb3JkZXI6IGVhY2ggcGFnZSdzIHRpbGVzLCB0aGVuIHRoZVxuICAvLyB2YWx1ZXMgaXRzIHRleHQgc2hvd3M7IHRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlcyBsYXN0LCB3aGVuIHNvbWUgcGFnZVxuICAvLyBzaG93cyB0aGUgbWFzdGVyLiBUZXh0IGJsb2NrcyBoYXZlIG5vdGhpbmcgdG8gZmV0Y2ggb2YgdGhlaXIgb3duIOKAlCB0aGV5XG4gIC8vIHJpZGUgdGhyb3VnaCB3aXRoIG5vIGRhdGEsIGFuZCB0aGVpciB0b2tlbnMgYXJlIGZpbGxlZCBmcm9tIHRoZWlyIGxheWVyJ3NcbiAgLy8gdmFsdWVzLiBBIHZhbHVlIGlzIHJlYWQgb25seSB0aHJvdWdoIGl0cyBsYXllcidzIHJlcXVlc3QsIG5ldmVyIGFzIGEgdGlsZVxuICAvLyAoaXNFeHBvcnRTbG90KS4gVGhlIGhlYWRlci9mb290ZXIgYmxvY2tzIChyZXBvcnQubWFzdGVyKSBhcmUgcmVhZCBieSB0aGVcbiAgLy8gcmVuZGVyZXJzIHN0cmFpZ2h0IG9mZiB0aGUgcmVwb3J0LlxuICBwcml2YXRlIF9qb2JzKHJlcG9ydDogUmVwb3J0KTogQ29sbGVjdEpvYltdIHtcbiAgICBjb25zdCBqb2JzOiBDb2xsZWN0Sm9iW10gPSBbXTtcblxuICAgIHJlcG9ydC5wYWdlcy5mb3JFYWNoKChwYWdlLCBwYWdlSW5kZXgpID0+IHtcbiAgICAgIHBhZ2UuY29tcG9uZW50c1xuICAgICAgICAuZmlsdGVyKGlzRXhwb3J0U2xvdClcbiAgICAgICAgLmZvckVhY2goKGNvbXBvbmVudCkgPT4gam9icy5wdXNoKHsga2luZDogJ2NvbXBvbmVudCcsIHBhZ2VJbmRleCwgY29tcG9uZW50IH0pKTtcbiAgICAgIGpvYnMucHVzaCguLi50aGlzLl92YWx1ZXNKb2JzKHBhZ2UsIHBhZ2VJbmRleCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlcG9ydC5tYXN0ZXIgJiYgcmVwb3J0LnBhZ2VzLnNvbWUoKHBhZ2UpID0+ICFwYWdlLm1hc3RlckhpZGRlbikpIHtcbiAgICAgIGpvYnMucHVzaCguLi50aGlzLl92YWx1ZXNKb2JzKHJlcG9ydC5tYXN0ZXIsIG51bGwpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9icztcbiAgfVxuXG4gIC8vIEEgbGF5ZXIncyBvbmUgdmFsdWVzIGpvYiwgb3Igbm9uZSB3aGVuIGl0cyB0ZXh0IHNob3dzIG5vIHZhbHVlLlxuICBwcml2YXRlIF92YWx1ZXNKb2JzKGxheWVyOiBSZXBvcnRQYWdlIHwgUmVwb3J0TWFzdGVyLCBwYWdlSW5kZXg6IG51bWJlciB8IG51bGwpOiBDb2xsZWN0Sm9iW10ge1xuICAgIGNvbnN0IHRleHRzID0gbGF5ZXIuY29tcG9uZW50cy5maWx0ZXIoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0Jyk7XG4gICAgY29uc3QgdmFsdWVzID0gbGF5ZXIudmFsdWVzID8/IFtdO1xuICAgIGNvbnN0IHNob3duID0gc2hvd25WYWx1ZXModmFsdWVzLCB0ZXh0cyk7XG5cbiAgICByZXR1cm4gc2hvd24ubGVuZ3RoXG4gICAgICA/IFt7IGtpbmQ6ICd2YWx1ZXMnLCBwYWdlSW5kZXgsIHBhZ2VJZDogbGF5ZXIuaWQsIHZhbHVlcywgY29tcG9uZW50czogc2hvd24gfV1cbiAgICAgIDogW107XG4gIH1cblxuICAvLyBPbmUgcXVldWVkIGpvYiwgaXRzIHJlc3VsdCB0YWdnZWQgd2l0aCB0aGUgcGFnZSBpdCBpcyBmaWxlZCB1bmRlci5cbiAgcHJpdmF0ZSBfcnVuSm9iKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGpvYjogQ29sbGVjdEpvYixcbiAgICBsaXN0Um93czogbnVtYmVyLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxDb2xsZWN0UmVzdWx0PiB7XG4gICAgaWYgKGpvYi5raW5kID09PSAnY29tcG9uZW50Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudERhdGEocmVwb3J0LCBqb2IuY29tcG9uZW50LCBsaXN0Um93cywgc25hcHNob3QpXG4gICAgICAgIC5waXBlKG1hcCgoaXRlbSk6IENvbGxlY3RSZXN1bHQgPT4gKHsga2luZDogJ2NvbXBvbmVudCcsIHBhZ2VJbmRleDogam9iLnBhZ2VJbmRleCwgaXRlbSB9KSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wYWdlVmFsdWVzKHJlcG9ydCwgam9iLnBhZ2VJZCwgam9iLnZhbHVlcywgam9iLmNvbXBvbmVudHMsIHNuYXBzaG90KVxuICAgICAgLnBpcGUobWFwKChjb2xsZWN0ZWQpOiBDb2xsZWN0UmVzdWx0ID0+ICh7IGtpbmQ6ICd2YWx1ZXMnLCBwYWdlSW5kZXg6IGpvYi5wYWdlSW5kZXgsIGNvbGxlY3RlZCB9KSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcG9uZW50RGF0YShcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBsaXN0Um93czogbnVtYmVyLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRDb21wb25lbnQ+IHtcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmV0dXJuIG9mKHsgY29tcG9uZW50LCBkYXRhOiBudWxsLCBoaWRkZW5Db2x1bW5zOiBbXSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gc25hcHNob3QuZmlsdGVyc1tjb21wb25lbnQuaWRdID8/IFtdO1xuXG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZ3JpZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9ncmlkVGFibGUocmVwb3J0LCBjb21wb25lbnQsIGZpbHRlcnMsIHNuYXBzaG90LnN0YXRlc1tjb21wb25lbnQuaWRdID8/IHt9LCBsaXN0Um93cywgc25hcHNob3QpO1xuICAgIH1cblxuICAgIC8vIFRoZSB0aWxlJ3Mgb3duIHN0YXRlLCB0aGUgb25lIGl0cyBzY3JlZW4gYW5kIGl0cyBDU1YgY2FycnlcbiAgICAvLyAodGlsZURhdGFTdGF0ZSk6IGEgdGlsZSB0aGF0IGZvbGxvd3MgdGhlIGdyb3VwLWJ5IHJlLWJ1Y2tldHMgYXQgdGhlXG4gICAgLy8gdmlld2VyJ3MgZ3JhaW4sIGEgdGltZS1zZXJpZXMgY2hhcnQga2VlcHMgaXRzIGRyaWxsIHBhdGgsIGEgbGlzdCByZWFkc1xuICAgIC8vIGluIHRoZSBzY3JlZW4ncyBvcmRlciBhbmQgaG9sZHMgdGhlIHNjcmVlbidzIHJvd3MuIEEgbGlzdCBhZGRzIGl0c1xuICAgIC8vIGV4cG9ydCBwYWdpbmcuXG4gICAgY29uc3QgdGlsZVN0YXRlID0gc25hcHNob3Quc3RhdGVzW2NvbXBvbmVudC5pZF0gPz8ge307XG4gICAgY29uc3Qgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSA9IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgID8geyAuLi50aWxlU3RhdGUsIHBhZ2U6IDEsIHBhZ2VTaXplOiBsaXN0Um93cyB9XG4gICAgICA6IHsgLi4udGlsZVN0YXRlIH07XG4gICAgLy8gVGhlIHRhYmxlIGxlYXZlcyBvdXQgdGhlIGNvbHVtbnMgdGhlIHZpZXdlciBoaWQuIFRoZSByb3dzIGFyZSBmZXRjaGVkXG4gICAgLy8gd2hvbGUsIGFzIHRoZSBzY3JlZW4gZmV0Y2hlcyB0aGVtICh0aGUgc2VydmVyIHJlYWRzIGhpZGRlbkNvbHVtbnMgZm9yIGFcbiAgICAvLyBDU1Ygb25seSksIGFuZCB0aGUgcmVuZGVyZXJzIGRyb3AgdGhlIGNlbGxzLlxuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBbLi4uKHN0YXRlLmhpZGRlbkNvbHVtbnMgPz8gW10pXTtcblxuICAgIC8vIGhhbmRsZXJzOiBmYWxzZSBrZWVwcyB0aGUgYXBwJ3MgZ2xvYmFsIGVycm9yIGRpYWxvZyBvdXQgb2YgdGhpcy4gQSBmYWlsZWRcbiAgICAvLyB0aWxlIGlzIHJlcG9ydGVkIG9uY2UsIGJ5IHRoZSBmYWlsdXJlIGdhdGUsIG5hbWluZyB0aGUgcGFnZXMgaXQgY29zdCDigJRcbiAgICAvLyBuZXZlciBhcyB0ZW4gc3RhY2tlZCBtb2RhbHMgY2FycnlpbmcgdGhlIGRhdGFiYXNlJ3Mgb3duIHdvcmRpbmcuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGEuY29tcG9uZW50RGF0YShyZXBvcnQuaWQsIGNvbXBvbmVudC5pZCwgZmlsdGVycywgc3RhdGUsIHRydWUsIHsgaGFuZGxlcnM6IGZhbHNlIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBDb21wb25lbnREYXRhKSA9PiB0aGlzLl9jb2xsZWN0ZWQoY29tcG9uZW50LCBkYXRhLCBzdGF0ZS5zZWFyY2gsIGhpZGRlbkNvbHVtbnMsIHNuYXBzaG90KSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoeyBjb21wb25lbnQsIGRhdGE6IG51bGwsIGhpZGRlbkNvbHVtbnMgfSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIEEgdGlsZSdzIHN0YXRlIGFzIGFuIGV4cG9ydCByZWFkcyBpdDogdGlsZURhdGFTdGF0ZSwgYW5kIGZvciBhIHRhYmxlIHRoZVxuICAvLyBsYXlvdXQgdGhlIHZpZXdlciBwdXQgaXQgaW4sIGFic2VudCB3aGlsZSBpdCBzaG93cyBpdHMgc3RvcmVkIG9uZS5cbiAgcHJpdmF0ZSBfdGlsZVN0YXRlKHJlcG9ydDogUmVwb3J0LCB0aWxlOiBSZXBvcnRDb21wb25lbnQsIHN0YXRlOiBSZXBvcnRTdGF0ZVNuYXBzaG90KTogQ29tcG9uZW50RGF0YVN0YXRlIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aWxlLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuX2ZpbHRlclN0YXRlLmdyaWRTZXNzaW9uTGF5b3V0KHRpbGUpIDogbnVsbDtcblxuICAgIHJldHVybiB7IC4uLnRpbGVEYXRhU3RhdGUocmVwb3J0LCB0aWxlLCBzdGF0ZSksIC4uLihsYXlvdXQgPyB7IGxheW91dCB9IDoge30pIH07XG4gIH1cblxuICAvLyBBIHRhYmxlIHRpbGUgYXMgdGhlIHNjcmVlbiBkcmF3cyBpdCwgcmVhZCBhcGFydCBmcm9tIHRoZSBzY3JlZW4gdGhyb3VnaFxuICAvLyBhbiBleHBvcnQgc291cmNlIChyZWFkR3JpZFRhYmxlKCkpOiBpbiB0aGUgdmlld2VyJ3MgbGF5b3V0IHdpdGggdGhlXG4gIC8vIGdyb3VwcyB0aGV5IGxlZnQgb3BlbiwgYXQgbW9zdCBgcm93c2AgbGluZXMgYW5kIEdSSURfRVhQT1JUX0NPTFVNTlNcbiAgLy8gcGl2b3QgY29sdW1ucywgZWFjaCB2YWx1ZSB3cml0dGVuIGJ5IHRoZSBzY3JlZW4ncyBmb3JtYXR0ZXIgb25jZSB0aGVcbiAgLy8gcmVhZCdzIHJlcG9ydCBsaW5lIGlzIGluLiBUaGF0IGxpbmUgc3RhbmRzIGluIGFzIGl0cyBkYXRhLCBzbyB0aGUgdGl0bGUsXG4gIC8vIHRoZSBzdWJ0aXRsZSBhbmQgdGhlIG5vdGVzIHJlYWQgaXQgYXMgYSBsaXN0J3MuIEEgZmFpbGVkIHJlYWQgaXMgYVxuICAvLyBmYWlsZWQgdGlsZS5cbiAgcHJpdmF0ZSBfZ3JpZFRhYmxlKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSxcbiAgICBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlLFxuICAgIHJvd3M6IG51bWJlcixcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICk6IE9ic2VydmFibGU8Q29sbGVjdGVkQ29tcG9uZW50PiB7XG4gICAgY29uc3QgbG9jYWxlID0gc25hcHNob3QuZm9ybWF0Q29udGV4dC5sb2NhbGU7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFJlcG9ydEdyaWRTb3VyY2UodGhpcy5fcmVwb3J0RGF0YSwgcmVwb3J0LmlkLCBjb21wb25lbnQuaWQsIHsgaXNFeHBvcnQ6IHRydWUsIGxvY2FsZTogKCkgPT4gbG9jYWxlIH0pO1xuICAgIGNvbnN0IHNjcmVlbiA9ICgpID0+IHJlcG9ydEdyaWRGb3JtYXR0ZXIoe1xuICAgICAgZm9ybWF0OiBzbmFwc2hvdC5mb3JtYXRDb250ZXh0LFxuICAgICAgdGltZXpvbmU6IHRoaXMuX2ZpbHRlclN0YXRlLnRpbWV6b25lKCksXG4gICAgICByZXBvcnQ6IHNvdXJjZS5yZXBvcnQoKSxcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtYXR0ZXI6IEdyaWRGb3JtYXR0ZXIgPSB7XG4gICAgICBmb3JtYXQ6ICh2YWx1ZSwgZmllbGQsIHBsYWNlbWVudCkgPT4gc2NyZWVuKCkuZm9ybWF0KHZhbHVlLCBmaWVsZCwgcGxhY2VtZW50KSxcbiAgICAgIHRvTnVtYmVyOiAodGV4dCwgZmllbGQsIHBsYWNlbWVudCkgPT4gc2NyZWVuKCkudG9OdW1iZXIodGV4dCwgZmllbGQsIHBsYWNlbWVudCksXG4gICAgfTtcbiAgICBjb25zdCBsYXlvdXQgPSBzdGF0ZS5sYXlvdXQgPz8gYXV0aG9yZWRHcmlkTGF5b3V0KGNvbXBvbmVudCk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZmlsdGVycyxcbiAgICAgIC4uLihzdGF0ZS5tYXRjaEFueUdyb3VwSWRzPy5sZW5ndGggPyB7IG1hdGNoQW55R3JvdXBJZHM6IHN0YXRlLm1hdGNoQW55R3JvdXBJZHMgfSA6IHt9KSxcbiAgICAgIC4uLihzdGF0ZS5mcmVxdWVuY3kgPyB7IGZyZXF1ZW5jeTogc3RhdGUuZnJlcXVlbmN5IH0gOiB7fSksXG4gICAgfTtcblxuICAgIHJldHVybiByZWFkR3JpZFRhYmxlKHNvdXJjZSwgbGF5b3V0LCBwYXJhbXMsIHNuYXBzaG90LmdyaWRFeHBhbnNpb25zPy5bY29tcG9uZW50LmlkXSwgeyByb3dzLCBjb2x1bW5zOiBHUklEX0VYUE9SVF9DT0xVTU5TIH0sIGZvcm1hdHRlcilcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHRhYmxlKTogQ29sbGVjdGVkQ29tcG9uZW50ID0+ICh7XG4gICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgIGRhdGE6IHsgLi4uKHNvdXJjZS5yZXBvcnQoKSA/PyB7fSksIGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIENvbXBvbmVudERhdGEsXG4gICAgICAgICAgaGlkZGVuQ29sdW1uczogW10sXG4gICAgICAgICAgdGFibGUsXG4gICAgICAgICAgdGFibGVOb3RlczogZ3JpZEV4cG9ydE5vdGVzKHRhYmxlLCBsYXlvdXQsIGxvY2FsZSksXG4gICAgICAgICAgLi4uKChsYXlvdXQuZmlsdGVycyA/PyBbXSkubGVuZ3RoID8geyBmaWx0ZXJlZDogdHJ1ZSB9IDoge30pLFxuICAgICAgICB9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoeyBjb21wb25lbnQsIGRhdGE6IG51bGwsIGhpZGRlbkNvbHVtbnM6IFtdIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBPbmUgdGlsZSdzIGFuc3dlciBhcyB0aGUgcmVuZGVyZXJzIHRha2UgaXQuIEEgc2VhcmNoIHRoZSBzZXJ2ZXIgY291bGRcbiAgLy8gbm90IGFwcGx5IChzZWFyY2hOb3RlOiB0aGUgbGlzdCBoYXMgbm8gdGV4dCBjb2x1bW4pIG5hcnJvd2VkIG5vdGhpbmcsIHNvXG4gIC8vIHRoZSBpdGVtIGRvZXMgbm90IGNhcnJ5IGl0LiBBIGRyaWxsZWQgY2hhcnQgY2FycmllcyB0aGUgYnJlYWRjcnVtYiBvZiB0aGVcbiAgLy8gcGF0aCBpdHMgYW5zd2VyIGFwcGxpZWQsIHdoaWNoIGlzIHdoYXQgaXRzIG51bWJlcnMgd2VyZSByZWFkIGF0LlxuICBwcml2YXRlIF9jb2xsZWN0ZWQoXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBzZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSxcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICk6IENvbGxlY3RlZENvbXBvbmVudCB7XG4gICAgY29uc3QgcGF0aCA9IGRhdGE/LmRyaWxsPy5wYXRoID8/IFtdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGRhdGEsXG4gICAgICAuLi4oc2VhcmNoICYmICFkYXRhPy5zZWFyY2hOb3RlID8geyBzZWFyY2ggfSA6IHt9KSxcbiAgICAgIGhpZGRlbkNvbHVtbnMsXG4gICAgICAuLi4ocGF0aC5sZW5ndGggPyB7IGNydW1iczogZHJpbGxDcnVtYkxhYmVscyhwYXRoLCBzbmFwc2hvdC5mb3JtYXRDb250ZXh0KSB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICAvLyBFYWNoIGdyb3VwJ3MgdmFsdWUgYXMgdGhlIGJhciBob2xkcyBpdCBub3csIHdpdGggdGhlIHJlbGF0aXZlIHJhbmdlIGFcbiAgLy8gZGF0ZSB2YWx1ZSBzdGlsbCBpcy4gVGhlIHBpY2tzIGFyZSBjb3BpZWQsIHNvIHRoZSBzbmFwc2hvdCBrZWVwcyB0aGVtXG4gIC8vIHdoYXRldmVyIHRoZSBiYXIgZG9lcyBuZXh0LlxuICBwcml2YXRlIF9ncm91cFZhbHVlcyhyZXBvcnQ6IFJlcG9ydCk6IFBpY2s8UmVwb3J0RXhwb3J0U25hcHNob3QsICd2YWx1ZXMnIHwgJ3ByZXNldHMnPiB7XG4gICAgY29uc3QgdmFsdWVzOiBSZWNvcmQ8bnVtYmVyLCBGaWx0ZXJHcm91cFZhbHVlPiA9IHt9O1xuICAgIGNvbnN0IHByZXNldHM6IFJlY29yZDxudW1iZXIsIFJlcG9ydFJlbGF0aXZlUmFuZ2U+ID0ge307XG5cbiAgICAocmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSkuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZmlsdGVyU3RhdGUudmFsdWUoZ3JvdXAuaWQpO1xuICAgICAgY29uc3QgcHJlc2V0ID0gdGhpcy5fZmlsdGVyU3RhdGUubGl2ZVByZXNldChncm91cC5pZCk7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZXNbZ3JvdXAuaWRdID0ge1xuICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgIC4uLih2YWx1ZS52YWx1ZXMgPyB7IHZhbHVlczogWy4uLnZhbHVlLnZhbHVlc10gfSA6IHt9KSxcbiAgICAgICAgICAuLi4odmFsdWUuZXhjbHVkZVZhbHVlcyA/IHsgZXhjbHVkZVZhbHVlczogWy4uLnZhbHVlLmV4Y2x1ZGVWYWx1ZXNdIH0gOiB7fSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAocHJlc2V0KSB7XG4gICAgICAgIHByZXNldHNbZ3JvdXAuaWRdID0gcHJlc2V0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgdmFsdWVzLCBwcmVzZXRzIH07XG4gIH1cblxuICAvLyBPbmUgbGF5ZXIncyB2YWx1ZXMsIHJlYWQgaW4gb25lIHJlcXVlc3QsIGFzIGl0cyB0ZXh0J3MgdG9rZW5zIHByaW50IHRoZW0uXG4gIC8vIFRoZSByZXF1ZXN0IGNhcnJpZXMgdGhlIGZpbHRlciB2YWx1ZXMgb2YgZXZlcnkgdmFsdWUgb24gdGhlIGxheWVyLCBhcyB0aGVcbiAgLy8gY2FudmFzJ3MgZG9lcywgcmVhZCBmcm9tIHRoZSBleHBvcnQncyBzbmFwc2hvdCBsaWtlIGV2ZXJ5IHRpbGUncywgYW5kXG4gIC8vIHdoaWxlIHRoZSBncm91cHMgbWF0Y2ggJ2FueScgdGhlIGdyb3VwcyB0aGF0IGNvbWJpbmVcbiAgLy8gKHZhbHVlc01hdGNoQW55R3JvdXBJZHMpOiB0aGUgc2VydmVyIGRlY2lkZXMgd2hpY2ggdmFsdWVzIGl0IHJlYWRzICh0aGVcbiAgLy8gc2hvd24gb25lcyBhbmQgdGhlIG9wZXJhbmRzIG9mIHRoZSBmb3JtdWxhcyBhbW9uZyB0aGVtKSBhbmQgYXBwbGllcyB0b1xuICAvLyBlYWNoIG9ubHkgdGhlIGVudHJpZXMgbmFtaW5nIGl0cyBvd24gZmlsdGVycy4gaGFuZGxlcnM6IGZhbHNlIGtlZXBzIHRoZVxuICAvLyBlcnJvciBkaWFsb2cgb3V0IG9mIGl0LCBhcyBmb3IgYSB0aWxlLiBBIGZhaWxlZCByZXF1ZXN0IHJlYWRzIGFzIG5vIHJvd3MsXG4gIC8vIHNvIGV2ZXJ5IHZhbHVlIHRoZSB0ZXh0IHNob3dzIGZhaWxlZCBhbmQgdGhlIGZhaWx1cmUgZ2F0ZSBuYW1lcyBpdHMgcGFnZTtcbiAgLy8gb25lIHZhbHVlJ3Mgb3duIGVycm9yIGZhaWxzIG9ubHkgdGhhdCB2YWx1ZSwgYW5kIGEgZmFpbGVkIG9wZXJhbmQgZmFpbHNcbiAgLy8gdGhlIGZvcm11bGEgdGhhdCByZWFkcyBpdC5cbiAgcHJpdmF0ZSBfcGFnZVZhbHVlcyhcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBwYWdlSWQ6IG51bWJlcixcbiAgICB2YWx1ZXM6IFJlcG9ydENvbXBvbmVudFtdLFxuICAgIHNob3duOiBSZXBvcnRDb21wb25lbnRbXSxcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICk6IE9ic2VydmFibGU8Q29sbGVjdGVkVmFsdWVzPiB7XG4gICAgY29uc3QgZm9ybWF0Q29udGV4dCA9IHNuYXBzaG90LmZvcm1hdENvbnRleHQ7XG4gICAgY29uc3QgZmlsdGVycyA9IHZhbHVlcy5mbGF0TWFwKChjb21wb25lbnQpID0+IHNuYXBzaG90LnZhbHVlRmlsdGVyc1tjb21wb25lbnQuaWRdID8/IFtdKTtcbiAgICBjb25zdCBtYXRjaEFueUdyb3VwSWRzID0gdmFsdWVzTWF0Y2hBbnlHcm91cElkcyhyZXBvcnQsIHBhZ2VJZCwgc25hcHNob3Quc3RhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGEucGFnZVZhbHVlcyhyZXBvcnQuaWQsIHBhZ2VJZCwgZmlsdGVycywgdHJ1ZSwgeyBoYW5kbGVyczogZmFsc2UgfSwgbWF0Y2hBbnlHcm91cElkcylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJvd3MpID0+IG5ldyBNYXAoKHJvd3MgPz8gW10pLm1hcCgocm93KSA9PiBbcm93LmlkLCByb3ddKSkpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG5ldyBNYXA8bnVtYmVyLCBSZXBvcnRQYWdlVmFsdWU+KCkpKSxcbiAgICAgICAgbWFwKChyb3dzKSA9PiAoe1xuICAgICAgICAgIHZhbHVlczogdGV4dFZhbHVlcyh2YWx1ZXMsIHsgcm93cyB9LCBmb3JtYXRDb250ZXh0KSxcbiAgICAgICAgICBmYWlsZWRWYWx1ZXM6IGZhaWxlZFZhbHVlS2V5cyhzaG93biwgcm93cyksXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBUaGUgcmVzdWx0cyBmaWxlZCBieSBwYWdlIGluIGpvYiBvcmRlci4gQSBsYXllciB3aXRoIG5vIHZhbHVlcyBqb2IgKGl0c1xuICAvLyB0ZXh0IHNob3dzIG5vIHZhbHVlKSBoYXMgbm8gbnVtYmVycyB0byB3YWl0IGZvcjogaXRzIHZhbHVlcyByZWFkIGFzIHRoZVxuICAvLyBlbSBkYXNoLCBhbmQgbm9uZSBvZiB0aGVtIGZhaWxlZC5cbiAgcHJpdmF0ZSBfZmlsZShcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICByZXN1bHRzOiB7IHJlc3VsdDogQ29sbGVjdFJlc3VsdDsgaW5kZXg6IG51bWJlciB9W10sXG4gICAgZm9ybWF0Q29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgKTogUGljazxDb2xsZWN0ZWRSZXBvcnQsICdwYWdlcycgfCAnbWFzdGVyVmFsdWVzJyB8ICdtYXN0ZXJGYWlsZWRWYWx1ZXMnPiB7XG4gICAgY29uc3QgdW5yZWFkID0gKHZhbHVlczogUmVwb3J0Q29tcG9uZW50W10gfCB1bmRlZmluZWQpOiBDb2xsZWN0ZWRWYWx1ZXMgPT4gKHtcbiAgICAgIHZhbHVlczogdGV4dFZhbHVlcyh2YWx1ZXMgPz8gW10sIHsgcm93czogbmV3IE1hcCgpIH0sIGZvcm1hdENvbnRleHQpLFxuICAgICAgZmFpbGVkVmFsdWVzOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBwYWdlczogQ29sbGVjdGVkUGFnZVtdID0gcmVwb3J0LnBhZ2VzLm1hcCgocGFnZSkgPT4gKHsgcGFnZSwgY29tcG9uZW50czogW10sIC4uLnVucmVhZChwYWdlLnZhbHVlcykgfSkpO1xuICAgIGxldCBtYXN0ZXIgPSB1bnJlYWQocmVwb3J0Lm1hc3Rlcj8udmFsdWVzKTtcblxuICAgIFsuLi5yZXN1bHRzXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KVxuICAgICAgLmZvckVhY2goKHsgcmVzdWx0IH0pID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5raW5kID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHBhZ2VzW3Jlc3VsdC5wYWdlSW5kZXhdLmNvbXBvbmVudHMucHVzaChyZXN1bHQuaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnBhZ2VJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgIG1hc3RlciA9IHJlc3VsdC5jb2xsZWN0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYWdlc1tyZXN1bHQucGFnZUluZGV4XSwgcmVzdWx0LmNvbGxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgcGFnZXMsIG1hc3RlclZhbHVlczogbWFzdGVyLnZhbHVlcywgbWFzdGVyRmFpbGVkVmFsdWVzOiBtYXN0ZXIuZmFpbGVkVmFsdWVzIH07XG4gIH1cblxuICAvLyBUaGUgem9uZSB0aGUgc2VydmVyIHJlc29sdmVkLCBhcyBpdHMgSUFOQSBpZCwgYW5kIHRoZSBjdXJyZW5jeSBpdCBzYXlzXG4gIC8vIHRoZSByZXBvcnQncyBtb25leSBpcyBpbiAoYSBsYWJlbDogbm90aGluZyBpcyBjb252ZXJ0ZWQpLiBPbmx5IHRoZVxuICAvLyBzZXJ2ZXIncyB2YWx1ZXMgYXJlIHByaW50ZWQ6IHRoZSBicm93c2VyJ3Mgem9uZSAocmVzb2x2ZVJlcG9ydFRpbWV6b25lJ3NcbiAgLy8gZmFsbGJhY2sgZm9yIGFuIG9sZGVyIHNlcnZlcikgaXMgbm90IHdoYXQgdGhlIG51bWJlcnMgd2VyZSBtZWFzdXJlZCBpbixcbiAgLy8gYW5kIGFuIG9sZGVyIHNlcnZlciBuYW1lcyBubyBjdXJyZW5jeSBhdCBhbGwuXG4gIHByaXZhdGUgX2NvbnRleHRMaW5lcyhyZXBvcnQ6IFJlcG9ydCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHJlcG9ydC5lZmZlY3RpdmVUaW1lem9uZSA/IFtgVGltZXpvbmU6ICR7cmVwb3J0LmVmZmVjdGl2ZVRpbWV6b25lfWBdIDogW10pLFxuICAgICAgLi4uKHJlcG9ydC5lZmZlY3RpdmVDdXJyZW5jeSA/IFtgQ3VycmVuY3k6ICR7cmVwb3J0LmVmZmVjdGl2ZUN1cnJlbmN5fWBdIDogW10pLFxuICAgIF07XG4gIH1cblxuICAvLyBFdmVyeSBmaWx0ZXIgZ3JvdXAgb2YgdGhlIHJlcG9ydCBhcyBpdHMge3tmaWx0ZXIuPGlkPn19IHRva2VuIHByaW50cyBpdFxuICAvLyBpbiB0aGUgZmlsZSwgYXQgdGhlIHNuYXBzaG90J3MgdmFsdWVzIGFuZCBpbiBpdHMgZm9ybWF0LCBhcyB0aGUgY2FudmFzXG4gIC8vIHdvcmRzIGl0LiBBIHNlbGVjdCdzIHBpY2tzIGFyZSBuYW1lZCBmaXJzdCwgc28gbm8gdG9rZW4gaW4gdGhlIGZpbGVcbiAgLy8gcmVhZHMgYXMgbG9hZGluZy4gRWFjaCBwYWdlIGFuZCB0aGUgaGVhZGVyIGFuZCBmb290ZXIgcmVhZCB0aGVpciBvd25cbiAgLy8gZ3JvdXBzIG9mIHRoZXNlIChsYXllckZpbHRlckZpZWxkcykuXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkcyhcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICAgbmFtZXM6IFJlcG9ydEV4cG9ydExpbmVzSW5wdXRbJ25hbWVzJ10sXG4gICk6IE9ic2VydmFibGU8UmVjb3JkPG51bWJlciwgVGV4dEZpbHRlckZpZWxkPj4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW107XG4gICAgY29uc3QgcGlja2VkID0gZ3JvdXBzXG4gICAgICAubWFwKChncm91cCkgPT4gKHsgZ3JvdXAsIHZhbHVlczogdmFsdWVQaWNrcyhzbmFwc2hvdC52YWx1ZXNbZ3JvdXAuaWRdKSB9KSlcbiAgICAgIC5maWx0ZXIoKHsgZ3JvdXAsIHZhbHVlcyB9KSA9PiBncm91cC50eXBlID09PSAnc2VsZWN0JyAmJiB2YWx1ZXMubGVuZ3RoKTtcbiAgICBjb25zdCBuYW1lcyQgPSBwaWNrZWQubGVuZ3RoXG4gICAgICA/IGZvcmtKb2luKHBpY2tlZC5tYXAoKHsgZ3JvdXAsIHZhbHVlcyB9KSA9PiBuYW1lcyhncm91cCwgdmFsdWVzKSkpXG4gICAgICA6IG9mKFtdIGFzIHN0cmluZ1tdW10pO1xuXG4gICAgcmV0dXJuIG5hbWVzJC5waXBlKFxuICAgICAgbWFwKChuYW1lZCkgPT4ge1xuICAgICAgICBjb25zdCBieUdyb3VwID0gbmV3IE1hcChwaWNrZWQubWFwKCh7IGdyb3VwIH0sIGluZGV4KSA9PiBbZ3JvdXAuaWQsIG5hbWVkW2luZGV4XV0pKTtcblxuICAgICAgICByZXR1cm4gdGV4dEZpbHRlckZpZWxkcyhcbiAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgKGdyb3VwSWQpID0+IHNuYXBzaG90LnZhbHVlc1tncm91cElkXSxcbiAgICAgICAgICBzbmFwc2hvdC5mb3JtYXRDb250ZXh0LmxvY2FsZSxcbiAgICAgICAgICAoZ3JvdXApID0+IGJ5R3JvdXAuZ2V0KGdyb3VwLmlkKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvLyBOYW1lcyBhIHNlbGVjdCBncm91cCdzIHBpY2tzIChrZXB0IG9yIGxlZnQgb3V0KSBmb3Igb25lIGV4cG9ydCwgdGhlaXJcbiAgLy8gc3RvcmVkIGlkcyByZXNvbHZlZCB0byB0aGUgc2FtZSBuYW1lcyB0aGUgb24tc2NyZWVuIGNoaXBzIHNob3cg4oCUIGEgY292ZXJcbiAgLy8gcmVhZGluZyBcIk9yZ2FuaXphdGlvbjogODc3NCwgODc3N1wiIHRlbGxzIHRoZSByZWFkZXIgbm90aGluZyBhYm91dCB3aGF0XG4gIC8vIHRoZSByZXBvcnQgY292ZXJzLiBFYWNoIGdyb3VwJ3MgZnVsbCBsaXN0IGlzIHJlYWQgb25jZSBmb3IgdGhlIGV4cG9ydCxcbiAgLy8gd2hhdGV2ZXIgbmFtZXMgaXRzIHBpY2tzOiBpdHMgZmlsdGVyIGxpbmUsIGl0cyB0b2tlbiwgYSB0aXRsZS5cbiAgLy9cbiAgLy8gVXNlcyB0aGUgcmVwb3J0IGJhcidzIG93biBuYW1lcyBhbmQgcmVzb2x2ZXIgc28gdGhlIHR3byBjYW4ndCBkcmlmdDogYVxuICAvLyBuYW1lIHRoZSBiYXIncyBsaXN0cyB0YXVnaHQgKFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlLmxhYmVsKSBjb21lcyBmaXJzdCxcbiAgLy8gc28gYSBwaWNrIGEgY3V0IG9yIG5hcnJvd2VkIGxpc3QgbGVhdmVzIG91dCByZWFkcyBhcyBpdHMgY2hpcCBkb2VzLCBhbmRcbiAgLy8gdGhlIGZ1bGwgbGlzdCBuYW1lcyB0aGUgcmVzdC4gQSB2YWx1ZSB3aG9zZSBlbnRpdHkgd2FzIGRlbGV0ZWQga2VlcHNcbiAgLy8gc2hvd2luZyBpdHMgcmF3IGlkIHJhdGhlciB0aGFuIGRyb3BwaW5nIG9mZiB0aGUgY292ZXIgYW5kIHNpbGVudGx5XG4gIC8vIHVuZGVyc3RhdGluZyB0aGUgZmlsdGVyLiBBIGZhaWxlZCBvcHRpb24gZmV0Y2ggZGVncmFkZXMgdGhlIHdob2xlIGxpbmUgdG9cbiAgLy8gaWRzIGZvciB0aGUgc2FtZSByZWFzb246IGFuIGV4cG9ydCBtdXN0IG5ldmVyIGZhaWwgb24gYSBjb3NtZXRpYyBsb29rdXAuXG4gIHByaXZhdGUgX3BpY2tOYW1lcihyZXBvcnQ6IFJlcG9ydCk6IFJlcG9ydEV4cG9ydExpbmVzSW5wdXRbJ25hbWVzJ10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBncm91cE9wdGlvbnNSZWFkZXIodGhpcy5fcmVwb3J0RGF0YSk7XG5cbiAgICByZXR1cm4gKGdyb3VwLCB2YWx1ZXMpID0+IHJlc29sdmVPcHRpb25WYWx1ZXMoXG4gICAgICBvcHRpb25zKGdyb3VwLCByZXBvcnQuaWQpLFxuICAgICAgdmFsdWVzLFxuICAgICAgKHZhbHVlKSA9PiB0aGlzLl9maWx0ZXJPcHRpb25zLmxhYmVsKGdyb3VwLmlkLCB2YWx1ZSksXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzb2x2ZWQpID0+IHJlc29sdmVkLm1hcCgoaXRlbSkgPT4gaXRlbS5uYW1lKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodmFsdWVzLm1hcCgoaXRlbSkgPT4gU3RyaW5nKGl0ZW0pKSkpLFxuICAgICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -15,7 +15,8 @@ const RETRY = 'retry';
|
|
|
15
15
|
const DOWNLOAD = 'download';
|
|
16
16
|
// Runs a report export end to end: collect every tile and value, refuse to
|
|
17
17
|
// write a file that is missing any of them without saying so, build it, refuse
|
|
18
|
-
// to save one whose text does not fit its
|
|
18
|
+
// to save one that could not draw a component, or whose text does not fit its
|
|
19
|
+
// boxes, without saying so, then save.
|
|
19
20
|
//
|
|
20
21
|
// The gates are the reason this sits between the collector and the renderers
|
|
21
22
|
// rather than in either of them. A deck with five blank pages is worse than no
|
|
@@ -54,11 +55,12 @@ export class ReportExportService {
|
|
|
54
55
|
? this._run(report, listRows, build)
|
|
55
56
|
: this._buildAndSave(collected, build)))));
|
|
56
57
|
}
|
|
57
|
-
// Builds the file, then saves it once the overflow
|
|
58
|
+
// Builds the file, then saves it once the undrawn and overflow gates let it
|
|
59
|
+
// through.
|
|
58
60
|
_buildAndSave(collected, build) {
|
|
59
61
|
return from(build(collected))
|
|
60
|
-
.pipe(switchMap((built) => this.
|
|
61
|
-
.pipe(switchMap(() => from(Promise.resolve(built.save()))))));
|
|
62
|
+
.pipe(switchMap((built) => this._undrawnGate(built)
|
|
63
|
+
.pipe(switchMap(() => this._overflowGate(built)), switchMap(() => from(Promise.resolve(built.save()))))));
|
|
62
64
|
}
|
|
63
65
|
// Resolves to DOWNLOAD when the export is whole (or the user accepted an
|
|
64
66
|
// incomplete one) and to RETRY when they want another attempt. Cancelling
|
|
@@ -84,6 +86,30 @@ export class ReportExportService {
|
|
|
84
86
|
})
|
|
85
87
|
.pipe(catchError(() => EMPTY));
|
|
86
88
|
}
|
|
89
|
+
// Resolves to DOWNLOAD when the build drew every component, or the user
|
|
90
|
+
// accepted a file that marks the ones it could not in their place. There is
|
|
91
|
+
// no Retry: a second build draws the same data the same way. Each component
|
|
92
|
+
// is named by its page and its title (a text block by the start of its
|
|
93
|
+
// words). Cancelling ends the export quietly, as at the failure gate, and
|
|
94
|
+
// the built file is dropped unsaved.
|
|
95
|
+
_undrawnGate(built) {
|
|
96
|
+
if (!built.undrawn.length) {
|
|
97
|
+
return of(DOWNLOAD);
|
|
98
|
+
}
|
|
99
|
+
const components = built.undrawn
|
|
100
|
+
.map((undrawn) => `<strong>${escapeHtml(undrawn.page)}</strong>`
|
|
101
|
+
+ (undrawn.name ? ` (“${escapeHtml(undrawn.name)}”)` : ''));
|
|
102
|
+
return this._prompt.confirm({
|
|
103
|
+
title: 'Some tiles could not be drawn',
|
|
104
|
+
template: `Some tiles could not be drawn: ${components.join(', ')}. `
|
|
105
|
+
+ 'The file says "Could not be drawn" in their place.',
|
|
106
|
+
buttons: [
|
|
107
|
+
{ label: 'Download Anyway', value: DOWNLOAD, color: 'primary' },
|
|
108
|
+
{ label: 'Cancel', cancel: true, color: '' },
|
|
109
|
+
],
|
|
110
|
+
})
|
|
111
|
+
.pipe(catchError(() => EMPTY));
|
|
112
|
+
}
|
|
87
113
|
// Resolves to DOWNLOAD when every text block fits its box in the built file,
|
|
88
114
|
// or the user accepted one that does not. There is no Retry: the words are
|
|
89
115
|
// the report's own, so a second attempt would build the same file. Each block
|
|
@@ -115,4 +141,4 @@ export class ReportExportService {
|
|
|
115
141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExportService, decorators: [{
|
|
116
142
|
type: Injectable
|
|
117
143
|
}] });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUN5Qiw0QkFBNEIsRUFBRSxlQUFlLEdBQzVFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHMUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsNEVBQTRFO0FBQzVFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFFNUIsMkVBQTJFO0FBQzNFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLHVDQUF1QztBQUN2QyxFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSw4RUFBOEU7QUFDOUUsaUNBQWlDO0FBRWpD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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQ3ZGLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQy9ELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7YUFDN0M7U0FDRixDQUFDO2FBQ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7d0dBekdVLG1CQUFtQjs0R0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQge1xuICBCdWlsdEV4cG9ydCwgQ29sbGVjdGVkUmVwb3J0LCBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLCBmYWlsZWRQYWdlTmFtZXMsXG59IGZyb20gJy4vcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQREZfTElTVF9ST1dTLCBSZXBvcnRQZGZTZXJ2aWNlIH0gZnJvbSAnLi9yZXBvcnQtcGRmLnNlcnZpY2UnO1xuaW1wb3J0IHsgUFBUWF9MSVNUX1JPV1MsIFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi9yZXBvcnQtcHB0eC5zZXJ2aWNlJztcblxuXG4vLyBXaGF0IHRoZSB1c2VyIGNob3NlIGF0IGFuIGV4cG9ydCBnYXRlLiBSZXRyeSwgb2ZmZXJlZCBvbmx5IHdoZW4gdGhlIGV4cG9ydFxuLy8gaXMgaW5jb21wbGV0ZSwgcmUtcnVucyB0aGUgd2hvbGUgY29sbGVjdGlvbiDigJQgdGhlIHF1ZXJpZXMgdGhhdCBmYWlsZWQgd2VyZVxuLy8ga2lsbGVkIG9uIGEgY2xvY2ssIG5vdCBvbiBhbnl0aGluZyBhYm91dCB0aGUgZGF0YSwgc28gYSBzZWNvbmQgYXR0ZW1wdFxuLy8gYWdhaW5zdCBhIHdhcm1lZCBkYXRhYmFzZSBnZW51aW5lbHkgb2Z0ZW4gc3VjY2VlZHMuIERvd25sb2FkIGtlZXBzIGdvaW5nLlxuY29uc3QgUkVUUlkgPSAncmV0cnknO1xuY29uc3QgRE9XTkxPQUQgPSAnZG93bmxvYWQnO1xuXG4vLyBSdW5zIGEgcmVwb3J0IGV4cG9ydCBlbmQgdG8gZW5kOiBjb2xsZWN0IGV2ZXJ5IHRpbGUgYW5kIHZhbHVlLCByZWZ1c2UgdG9cbi8vIHdyaXRlIGEgZmlsZSB0aGF0IGlzIG1pc3NpbmcgYW55IG9mIHRoZW0gd2l0aG91dCBzYXlpbmcgc28sIGJ1aWxkIGl0LCByZWZ1c2Vcbi8vIHRvIHNhdmUgb25lIHdob3NlIHRleHQgZG9lcyBub3QgZml0IGl0cyBib3hlcyB3aXRob3V0IHNheWluZyBzbywgdGhlbiBzYXZlLlxuLy9cbi8vIFRoZSBnYXRlcyBhcmUgdGhlIHJlYXNvbiB0aGlzIHNpdHMgYmV0d2VlbiB0aGUgY29sbGVjdG9yIGFuZCB0aGUgcmVuZGVyZXJzXG4vLyByYXRoZXIgdGhhbiBpbiBlaXRoZXIgb2YgdGhlbS4gQSBkZWNrIHdpdGggZml2ZSBibGFuayBwYWdlcyBpcyB3b3JzZSB0aGFuIG5vXG4vLyBkZWNrOiBpdCBsb29rcyBmaW5pc2hlZCwgc28gaXQgZ2V0cyBlbWFpbGVkIHRvIGEgY2xpZW50LCBhbmQgdGhlIHBhZ2VzIHRoYXRcbi8vIGFyZSBtaXNzaW5nIGFyZSBleGFjdGx5IHRoZSBvbmVzIG5vYm9keSB0aGlua3MgdG8gY2hlY2suIFRoZSByZW5kZXJlcnMgY2FuXG4vLyBvbmx5IGRlc2NyaWJlIGEgaG9sZSB0aGV5IGFyZSBoYW5kZWQ7IHRoZSBjb2xsZWN0b3Igb25seSBrbm93cyBvbmUgdGlsZSBhdCBhXG4vLyB0aW1lLiBXaGV0aGVyIHRoZSBGSUxFIHNob3VsZCBleGlzdCBpcyBhIGRlY2lzaW9uIGFib3V0IHRoZSB3aG9sZSByZXBvcnQsIGFuZFxuLy8gdGhpcyBpcyB0aGUgb25seSBwbGFjZSB0aGF0IHNlZXMgaXQuXG4vL1xuLy8gRmFpbHVyZXMgYXJlIGRlY2lkZWQgYmVmb3JlIHRoZSBidWlsZCwgd2hpY2ggaXMgdGhlIGV4cGVuc2l2ZSBwYXJ0IChldmVyeVxuLy8gY2hhcnQgZHJhd24gb2Zmc2NyZWVuLCBldmVyeSB0ZXh0IGJsb2NrIG1lYXN1cmVkKSwgc28gbmVpdGhlciBhIFJldHJ5IG5vciBhXG4vLyBDYW5jZWwgcGF5cyBmb3Igb25lLiBUZXh0IHRoYXQgZG9lcyBub3QgZml0IGl0cyBib3ggaXMga25vd24gb25seSBhZnRlciBpdDpcbi8vIHRoZSBidWlsZCBpcyB3aGF0IG1lYXN1cmVzIGl0LlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydEV4cG9ydFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX2NvbGxlY3RvciA9IGluamVjdChSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcGRmU2VydmljZSA9IGluamVjdChSZXBvcnRQZGZTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHB0eFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0UHB0eFNlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuXG4gIHB1YmxpYyBwZGYocmVwb3J0OiBSZXBvcnQpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5fcnVuKHJlcG9ydCwgUERGX0xJU1RfUk9XUywgKGNvbGxlY3RlZCkgPT4gdGhpcy5fcGRmU2VydmljZS5idWlsZChjb2xsZWN0ZWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3dlcnBvaW50KHJlcG9ydDogUmVwb3J0KTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bihyZXBvcnQsIFBQVFhfTElTVF9ST1dTLCAoY29sbGVjdGVkKSA9PiB0aGlzLl9wcHR4U2VydmljZS5idWlsZChjb2xsZWN0ZWQpKTtcbiAgfVxuXG4gIC8vIFJldHJ5IHJlLWNvbGxlY3RzIHRoZSBXSE9MRSByZXBvcnQsIG5vdCBqdXN0IHRoZSB0aWxlcyB0aGF0IGZhaWxlZC4gRXZlcnlcbiAgLy8gbnVtYmVyIGluIG9uZSBmaWxlIGhhcyB0byBoYXZlIGJlZW4gdHJ1ZSBhdCBvbmUgbW9tZW50OiByZWZldGNoaW5nIGZvdXJcbiAgLy8gdGlsZXMgYW5kIGtlZXBpbmcgbmluZSBmcm9tIHRocmVlIG1pbnV0ZXMgYWdvIHByb2R1Y2VzIGEgZGVjayB3aG9zZSBwYWdlc1xuICAvLyBkaXNhZ3JlZSB3aXRoIGVhY2ggb3RoZXIsIGFuZCBub3RoaW5nIG9uIGl0IHdvdWxkIHNheSBzby5cbiAgLy9cbiAgLy8gbGlzdFJvd3MgaXMgdGhlIGZvcm1hdCdzIG93biBsaXN0IGNhcCwgY2FycmllZCBpbnRvIHRoZSByZXRyeSBzbyBhIHNlY29uZFxuICAvLyBhdHRlbXB0IGZldGNoZXMgd2hhdCB0aGUgZmlyc3QgZGlkLlxuICBwcml2YXRlIF9ydW4oXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgbGlzdFJvd3M6IG51bWJlcixcbiAgICBidWlsZDogKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KSA9PiBQcm9taXNlPEJ1aWx0RXhwb3J0PixcbiAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rvci5jb2xsZWN0KHJlcG9ydCwgbGlzdFJvd3MpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChjb2xsZWN0ZWQpID0+IHRoaXMuX2ZhaWx1cmVHYXRlKGNvbGxlY3RlZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoY2hvaWNlKSA9PiBjaG9pY2UgPT09IFJFVFJZXG4gICAgICAgICAgICAgID8gdGhpcy5fcnVuKHJlcG9ydCwgbGlzdFJvd3MsIGJ1aWxkKVxuICAgICAgICAgICAgICA6IHRoaXMuX2J1aWxkQW5kU2F2ZShjb2xsZWN0ZWQsIGJ1aWxkKSksXG4gICAgICAgICAgKSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gQnVpbGRzIHRoZSBmaWxlLCB0aGVuIHNhdmVzIGl0IG9uY2UgdGhlIG92ZXJmbG93IGdhdGUgbGV0cyBpdCB0aHJvdWdoLlxuICBwcml2YXRlIF9idWlsZEFuZFNhdmUoXG4gICAgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsXG4gICAgYnVpbGQ6IChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCkgPT4gUHJvbWlzZTxCdWlsdEV4cG9ydD4sXG4gICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBmcm9tKGJ1aWxkKGNvbGxlY3RlZCkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChidWlsdCkgPT4gdGhpcy5fb3ZlcmZsb3dHYXRlKGJ1aWx0KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZyb20oUHJvbWlzZS5yZXNvbHZlKGJ1aWx0LnNhdmUoKSkpKSxcbiAgICAgICAgICApKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlcyB0byBET1dOTE9BRCB3aGVuIHRoZSBleHBvcnQgaXMgd2hvbGUgKG9yIHRoZSB1c2VyIGFjY2VwdGVkIGFuXG4gIC8vIGluY29tcGxldGUgb25lKSBhbmQgdG8gUkVUUlkgd2hlbiB0aGV5IHdhbnQgYW5vdGhlciBhdHRlbXB0LiBDYW5jZWxsaW5nXG4gIC8vIGVuZHMgdGhlIGV4cG9ydCBxdWlldGx5OiBFTVBUWSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZywgc28gbm90aGluZ1xuICAvLyBidWlsZHMgYW5kIG5vIGVycm9yIHN1cmZhY2VzIOKAlCB0aGV5IGtub3cgd2hhdCB0aGV5IGp1c3QgZGVjbGluZWQuXG4gIHByaXZhdGUgX2ZhaWx1cmVHYXRlKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmYWlsZWQgPSBmYWlsZWRQYWdlTmFtZXMoY29sbGVjdGVkKS5tYXAoZXNjYXBlSHRtbCk7XG4gICAgaWYgKCFmYWlsZWQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoRE9XTkxPQUQpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gZmFpbGVkLmxlbmd0aCA9PT0gMVxuICAgICAgPyBgPHN0cm9uZz4ke2ZhaWxlZFswXX08L3N0cm9uZz4gY291bGQgbm90IGJlIGdlbmVyYXRlZGBcbiAgICAgIDogYCR7ZmFpbGVkLmxlbmd0aH0gcGFnZXMgY291bGQgbm90IGJlIGdlbmVyYXRlZDogPHN0cm9uZz4ke2ZhaWxlZC5qb2luKCc8L3N0cm9uZz4sIDxzdHJvbmc+Jyl9PC9zdHJvbmc+YDtcblxuICAgIHJldHVybiB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0V4cG9ydCBpcyBpbmNvbXBsZXRlJyxcbiAgICAgIHRlbXBsYXRlOiBgJHtwYWdlc30uIFRoaXMgdXN1YWxseSBtZWFucyB0aG9zZSB0aWxlcyBvciB2YWx1ZXMgdG9vayB0b28gbG9uZyB0byBsb2FkLiBgXG4gICAgICAgICsgJ1JldHJ5LCBvciBkb3dubG9hZCB0aGUgZmlsZSB3aXRoIHRob3NlIHBhZ2VzIG1hcmtlZCBhcyBtaXNzaW5nLicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdSZXRyeScsIHZhbHVlOiBSRVRSWSwgY29sb3I6ICdwcmltYXJ5JyB9LFxuICAgICAgICB7IGxhYmVsOiAnRG93bmxvYWQgQW55d2F5JywgdmFsdWU6IERPV05MT0FELCBjb2xvcjogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0NhbmNlbCcsIGNhbmNlbDogdHJ1ZSwgY29sb3I6ICcnIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSk7XG4gIH1cblxuICAvLyBSZXNvbHZlcyB0byBET1dOTE9BRCB3aGVuIGV2ZXJ5IHRleHQgYmxvY2sgZml0cyBpdHMgYm94IGluIHRoZSBidWlsdCBmaWxlLFxuICAvLyBvciB0aGUgdXNlciBhY2NlcHRlZCBvbmUgdGhhdCBkb2VzIG5vdC4gVGhlcmUgaXMgbm8gUmV0cnk6IHRoZSB3b3JkcyBhcmVcbiAgLy8gdGhlIHJlcG9ydCdzIG93biwgc28gYSBzZWNvbmQgYXR0ZW1wdCB3b3VsZCBidWlsZCB0aGUgc2FtZSBmaWxlLiBFYWNoIGJsb2NrXG4gIC8vIGlzIG5hbWVkIGJ5IGl0cyBwYWdlIGFuZCB0aGUgc3RhcnQgb2YgaXRzIHdvcmRzLCBhbmQgdGhlIG5vdGUgc2F5cyB3aGF0XG4gIC8vIHRoaXMgZm9ybWF0IGRvZXMgd2l0aCB0aGUgcmVzdC4gQ2FuY2VsbGluZyBlbmRzIHRoZSBleHBvcnQgcXVpZXRseSwgYXMgYXRcbiAgLy8gdGhlIGZhaWx1cmUgZ2F0ZSwgYW5kIHRoZSBidWlsdCBmaWxlIGlzIGRyb3BwZWQgdW5zYXZlZC5cbiAgcHJpdmF0ZSBfb3ZlcmZsb3dHYXRlKGJ1aWx0OiBCdWlsdEV4cG9ydCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKCFidWlsdC5vdmVyZmxvd3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoRE9XTkxPQUQpO1xuICAgIH1cblxuICAgIC8vIEEgYmxvY2sgd2l0aCBubyB3b3JkcyB0byBxdW90ZSAoYW4gZW1wdHkgdGFibGUsIHNheSkgaXMgbmFtZWQgYnkgaXRzXG4gICAgLy8gcGFnZSBhbG9uZSwgbm90IGJ5IGFuIGVtcHR5IHBhaXIgb2YgcXVvdGVzLlxuICAgIGNvbnN0IGJsb2NrcyA9IGJ1aWx0Lm92ZXJmbG93c1xuICAgICAgLm1hcCgob3ZlcmZsb3cpID0+IGA8c3Ryb25nPiR7ZXNjYXBlSHRtbChvdmVyZmxvdy5wYWdlKX08L3N0cm9uZz5gXG4gICAgICAgICsgKG92ZXJmbG93LnNuaXBwZXQgPyBgICjigJwke2VzY2FwZUh0bWwob3ZlcmZsb3cuc25pcHBldCl94oCdKWAgOiAnJykpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnVGV4dCBkb2VzIG5vdCBmaXQnLFxuICAgICAgdGVtcGxhdGU6IGBTb21lIHRleHQgZG9lcyBub3QgZml0IGl0cyBib3g6ICR7YmxvY2tzLmpvaW4oJywgJyl9LiAke2J1aWx0Lm92ZXJmbG93Tm90ZX1gLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IGxhYmVsOiAnRG93bmxvYWQgQW55d2F5JywgdmFsdWU6IERPV05MT0FELCBjb2xvcjogJ3ByaW1hcnknIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDYW5jZWwnLCBjYW5jZWw6IHRydWUsIGNvbG9yOiAnJyB9LFxuICAgICAgXSxcbiAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBFTVBUWSkpO1xuICB9XG59XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUN5Qiw0QkFBNEIsRUFBRSxlQUFlLEdBQzVFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHMUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsNEVBQTRFO0FBQzVFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFFNUIsMkVBQTJFO0FBQzNFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsdUNBQXVDO0FBQ3ZDLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLGdGQUFnRjtBQUNoRix1Q0FBdUM7QUFDdkMsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlF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LENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDdkYsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDL0QsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTthQUM3QztTQUNGLENBQUM7YUFDQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQzt3R0F0SVUsbUJBQW1COzRHQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7XG4gIEJ1aWx0RXhwb3J0LCBDb2xsZWN0ZWRSZXBvcnQsIFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UsIGZhaWxlZFBhZ2VOYW1lcyxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBERl9MSVNUX1JPV1MsIFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuL3JlcG9ydC1wZGYuc2VydmljZSc7XG5pbXBvcnQgeyBQUFRYX0xJU1RfUk9XUywgUmVwb3J0UHB0eFNlcnZpY2UgfSBmcm9tICcuL3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuXG5cbi8vIFdoYXQgdGhlIHVzZXIgY2hvc2UgYXQgYW4gZXhwb3J0IGdhdGUuIFJldHJ5LCBvZmZlcmVkIG9ubHkgd2hlbiB0aGUgZXhwb3J0XG4vLyBpcyBpbmNvbXBsZXRlLCByZS1ydW5zIHRoZSB3aG9sZSBjb2xsZWN0aW9uIOKAlCB0aGUgcXVlcmllcyB0aGF0IGZhaWxlZCB3ZXJlXG4vLyBraWxsZWQgb24gYSBjbG9jaywgbm90IG9uIGFueXRoaW5nIGFib3V0IHRoZSBkYXRhLCBzbyBhIHNlY29uZCBhdHRlbXB0XG4vLyBhZ2FpbnN0IGEgd2FybWVkIGRhdGFiYXNlIGdlbnVpbmVseSBvZnRlbiBzdWNjZWVkcy4gRG93bmxvYWQga2VlcHMgZ29pbmcuXG5jb25zdCBSRVRSWSA9ICdyZXRyeSc7XG5jb25zdCBET1dOTE9BRCA9ICdkb3dubG9hZCc7XG5cbi8vIFJ1bnMgYSByZXBvcnQgZXhwb3J0IGVuZCB0byBlbmQ6IGNvbGxlY3QgZXZlcnkgdGlsZSBhbmQgdmFsdWUsIHJlZnVzZSB0b1xuLy8gd3JpdGUgYSBmaWxlIHRoYXQgaXMgbWlzc2luZyBhbnkgb2YgdGhlbSB3aXRob3V0IHNheWluZyBzbywgYnVpbGQgaXQsIHJlZnVzZVxuLy8gdG8gc2F2ZSBvbmUgdGhhdCBjb3VsZCBub3QgZHJhdyBhIGNvbXBvbmVudCwgb3Igd2hvc2UgdGV4dCBkb2VzIG5vdCBmaXQgaXRzXG4vLyBib3hlcywgd2l0aG91dCBzYXlpbmcgc28sIHRoZW4gc2F2ZS5cbi8vXG4vLyBUaGUgZ2F0ZXMgYXJlIHRoZSByZWFzb24gdGhpcyBzaXRzIGJldHdlZW4gdGhlIGNvbGxlY3RvciBhbmQgdGhlIHJlbmRlcmVyc1xuLy8gcmF0aGVyIHRoYW4gaW4gZWl0aGVyIG9mIHRoZW0uIEEgZGVjayB3aXRoIGZpdmUgYmxhbmsgcGFnZXMgaXMgd29yc2UgdGhhbiBub1xuLy8gZGVjazogaXQgbG9va3MgZmluaXNoZWQsIHNvIGl0IGdldHMgZW1haWxlZCB0byBhIGNsaWVudCwgYW5kIHRoZSBwYWdlcyB0aGF0XG4vLyBhcmUgbWlzc2luZyBhcmUgZXhhY3RseSB0aGUgb25lcyBub2JvZHkgdGhpbmtzIHRvIGNoZWNrLiBUaGUgcmVuZGVyZXJzIGNhblxuLy8gb25seSBkZXNjcmliZSBhIGhvbGUgdGhleSBhcmUgaGFuZGVkOyB0aGUgY29sbGVjdG9yIG9ubHkga25vd3Mgb25lIHRpbGUgYXQgYVxuLy8gdGltZS4gV2hldGhlciB0aGUgRklMRSBzaG91bGQgZXhpc3QgaXMgYSBkZWNpc2lvbiBhYm91dCB0aGUgd2hvbGUgcmVwb3J0LCBhbmRcbi8vIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgdGhhdCBzZWVzIGl0LlxuLy9cbi8vIEZhaWx1cmVzIGFyZSBkZWNpZGVkIGJlZm9yZSB0aGUgYnVpbGQsIHdoaWNoIGlzIHRoZSBleHBlbnNpdmUgcGFydCAoZXZlcnlcbi8vIGNoYXJ0IGRyYXduIG9mZnNjcmVlbiwgZXZlcnkgdGV4dCBibG9jayBtZWFzdXJlZCksIHNvIG5laXRoZXIgYSBSZXRyeSBub3IgYVxuLy8gQ2FuY2VsIHBheXMgZm9yIG9uZS4gVGV4dCB0aGF0IGRvZXMgbm90IGZpdCBpdHMgYm94IGlzIGtub3duIG9ubHkgYWZ0ZXIgaXQ6XG4vLyB0aGUgYnVpbGQgaXMgd2hhdCBtZWFzdXJlcyBpdC5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeHBvcnRTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9jb2xsZWN0b3IgPSBpbmplY3QoUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgX3BkZlNlcnZpY2UgPSBpbmplY3QoUmVwb3J0UGRmU2VydmljZSk7XG4gIHByaXZhdGUgX3BwdHhTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFBwdHhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcblxuICBwdWJsaWMgcGRmKHJlcG9ydDogUmVwb3J0KTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bihyZXBvcnQsIFBERl9MSVNUX1JPV1MsIChjb2xsZWN0ZWQpID0+IHRoaXMuX3BkZlNlcnZpY2UuYnVpbGQoY29sbGVjdGVkKSk7XG4gIH1cblxuICBwdWJsaWMgcG93ZXJwb2ludChyZXBvcnQ6IFJlcG9ydCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLl9ydW4ocmVwb3J0LCBQUFRYX0xJU1RfUk9XUywgKGNvbGxlY3RlZCkgPT4gdGhpcy5fcHB0eFNlcnZpY2UuYnVpbGQoY29sbGVjdGVkKSk7XG4gIH1cblxuICAvLyBSZXRyeSByZS1jb2xsZWN0cyB0aGUgV0hPTEUgcmVwb3J0LCBub3QganVzdCB0aGUgdGlsZXMgdGhhdCBmYWlsZWQuIEV2ZXJ5XG4gIC8vIG51bWJlciBpbiBvbmUgZmlsZSBoYXMgdG8gaGF2ZSBiZWVuIHRydWUgYXQgb25lIG1vbWVudDogcmVmZXRjaGluZyBmb3VyXG4gIC8vIHRpbGVzIGFuZCBrZWVwaW5nIG5pbmUgZnJvbSB0aHJlZSBtaW51dGVzIGFnbyBwcm9kdWNlcyBhIGRlY2sgd2hvc2UgcGFnZXNcbiAgLy8gZGlzYWdyZWUgd2l0aCBlYWNoIG90aGVyLCBhbmQgbm90aGluZyBvbiBpdCB3b3VsZCBzYXkgc28uXG4gIC8vXG4gIC8vIGxpc3RSb3dzIGlzIHRoZSBmb3JtYXQncyBvd24gbGlzdCBjYXAsIGNhcnJpZWQgaW50byB0aGUgcmV0cnkgc28gYSBzZWNvbmRcbiAgLy8gYXR0ZW1wdCBmZXRjaGVzIHdoYXQgdGhlIGZpcnN0IGRpZC5cbiAgcHJpdmF0ZSBfcnVuKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgYnVpbGQ6IChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCkgPT4gUHJvbWlzZTxCdWlsdEV4cG9ydD4sXG4gICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0b3IuY29sbGVjdChyZXBvcnQsIGxpc3RSb3dzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY29sbGVjdGVkKSA9PiB0aGlzLl9mYWlsdXJlR2F0ZShjb2xsZWN0ZWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGNob2ljZSkgPT4gY2hvaWNlID09PSBSRVRSWVxuICAgICAgICAgICAgICA/IHRoaXMuX3J1bihyZXBvcnQsIGxpc3RSb3dzLCBidWlsZClcbiAgICAgICAgICAgICAgOiB0aGlzLl9idWlsZEFuZFNhdmUoY29sbGVjdGVkLCBidWlsZCkpLFxuICAgICAgICAgICkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIEJ1aWxkcyB0aGUgZmlsZSwgdGhlbiBzYXZlcyBpdCBvbmNlIHRoZSB1bmRyYXduIGFuZCBvdmVyZmxvdyBnYXRlcyBsZXQgaXRcbiAgLy8gdGhyb3VnaC5cbiAgcHJpdmF0ZSBfYnVpbGRBbmRTYXZlKFxuICAgIGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LFxuICAgIGJ1aWxkOiAoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpID0+IFByb21pc2U8QnVpbHRFeHBvcnQ+LFxuICApOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gZnJvbShidWlsZChjb2xsZWN0ZWQpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoYnVpbHQpID0+IHRoaXMuX3VuZHJhd25HYXRlKGJ1aWx0KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX292ZXJmbG93R2F0ZShidWlsdCkpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZyb20oUHJvbWlzZS5yZXNvbHZlKGJ1aWx0LnNhdmUoKSkpKSxcbiAgICAgICAgICApKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlcyB0byBET1dOTE9BRCB3aGVuIHRoZSBleHBvcnQgaXMgd2hvbGUgKG9yIHRoZSB1c2VyIGFjY2VwdGVkIGFuXG4gIC8vIGluY29tcGxldGUgb25lKSBhbmQgdG8gUkVUUlkgd2hlbiB0aGV5IHdhbnQgYW5vdGhlciBhdHRlbXB0LiBDYW5jZWxsaW5nXG4gIC8vIGVuZHMgdGhlIGV4cG9ydCBxdWlldGx5OiBFTVBUWSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZywgc28gbm90aGluZ1xuICAvLyBidWlsZHMgYW5kIG5vIGVycm9yIHN1cmZhY2VzIOKAlCB0aGV5IGtub3cgd2hhdCB0aGV5IGp1c3QgZGVjbGluZWQuXG4gIHByaXZhdGUgX2ZhaWx1cmVHYXRlKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmYWlsZWQgPSBmYWlsZWRQYWdlTmFtZXMoY29sbGVjdGVkKS5tYXAoZXNjYXBlSHRtbCk7XG4gICAgaWYgKCFmYWlsZWQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoRE9XTkxPQUQpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gZmFpbGVkLmxlbmd0aCA9PT0gMVxuICAgICAgPyBgPHN0cm9uZz4ke2ZhaWxlZFswXX08L3N0cm9uZz4gY291bGQgbm90IGJlIGdlbmVyYXRlZGBcbiAgICAgIDogYCR7ZmFpbGVkLmxlbmd0aH0gcGFnZXMgY291bGQgbm90IGJlIGdlbmVyYXRlZDogPHN0cm9uZz4ke2ZhaWxlZC5qb2luKCc8L3N0cm9uZz4sIDxzdHJvbmc+Jyl9PC9zdHJvbmc+YDtcblxuICAgIHJldHVybiB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0V4cG9ydCBpcyBpbmNvbXBsZXRlJyxcbiAgICAgIHRlbXBsYXRlOiBgJHtwYWdlc30uIFRoaXMgdXN1YWxseSBtZWFucyB0aG9zZSB0aWxlcyBvciB2YWx1ZXMgdG9vayB0b28gbG9uZyB0byBsb2FkLiBgXG4gICAgICAgICsgJ1JldHJ5LCBvciBkb3dubG9hZCB0aGUgZmlsZSB3aXRoIHRob3NlIHBhZ2VzIG1hcmtlZCBhcyBtaXNzaW5nLicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdSZXRyeScsIHZhbHVlOiBSRVRSWSwgY29sb3I6ICdwcmltYXJ5JyB9LFxuICAgICAgICB7IGxhYmVsOiAnRG93bmxvYWQgQW55d2F5JywgdmFsdWU6IERPV05MT0FELCBjb2xvcjogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0NhbmNlbCcsIGNhbmNlbDogdHJ1ZSwgY29sb3I6ICcnIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSk7XG4gIH1cblxuICAvLyBSZXNvbHZlcyB0byBET1dOTE9BRCB3aGVuIHRoZSBidWlsZCBkcmV3IGV2ZXJ5IGNvbXBvbmVudCwgb3IgdGhlIHVzZXJcbiAgLy8gYWNjZXB0ZWQgYSBmaWxlIHRoYXQgbWFya3MgdGhlIG9uZXMgaXQgY291bGQgbm90IGluIHRoZWlyIHBsYWNlLiBUaGVyZSBpc1xuICAvLyBubyBSZXRyeTogYSBzZWNvbmQgYnVpbGQgZHJhd3MgdGhlIHNhbWUgZGF0YSB0aGUgc2FtZSB3YXkuIEVhY2ggY29tcG9uZW50XG4gIC8vIGlzIG5hbWVkIGJ5IGl0cyBwYWdlIGFuZCBpdHMgdGl0bGUgKGEgdGV4dCBibG9jayBieSB0aGUgc3RhcnQgb2YgaXRzXG4gIC8vIHdvcmRzKS4gQ2FuY2VsbGluZyBlbmRzIHRoZSBleHBvcnQgcXVpZXRseSwgYXMgYXQgdGhlIGZhaWx1cmUgZ2F0ZSwgYW5kXG4gIC8vIHRoZSBidWlsdCBmaWxlIGlzIGRyb3BwZWQgdW5zYXZlZC5cbiAgcHJpdmF0ZSBfdW5kcmF3bkdhdGUoYnVpbHQ6IEJ1aWx0RXhwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIWJ1aWx0LnVuZHJhd24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoRE9XTkxPQUQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBidWlsdC51bmRyYXduXG4gICAgICAubWFwKCh1bmRyYXduKSA9PiBgPHN0cm9uZz4ke2VzY2FwZUh0bWwodW5kcmF3bi5wYWdlKX08L3N0cm9uZz5gXG4gICAgICAgICsgKHVuZHJhd24ubmFtZSA/IGAgKOKAnCR7ZXNjYXBlSHRtbCh1bmRyYXduLm5hbWUpfeKAnSlgIDogJycpKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ1NvbWUgdGlsZXMgY291bGQgbm90IGJlIGRyYXduJyxcbiAgICAgIHRlbXBsYXRlOiBgU29tZSB0aWxlcyBjb3VsZCBub3QgYmUgZHJhd246ICR7Y29tcG9uZW50cy5qb2luKCcsICcpfS4gYFxuICAgICAgICArICdUaGUgZmlsZSBzYXlzIFwiQ291bGQgbm90IGJlIGRyYXduXCIgaW4gdGhlaXIgcGxhY2UuJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0Rvd25sb2FkIEFueXdheScsIHZhbHVlOiBET1dOTE9BRCwgY29sb3I6ICdwcmltYXJ5JyB9LFxuICAgICAgICB7IGxhYmVsOiAnQ2FuY2VsJywgY2FuY2VsOiB0cnVlLCBjb2xvcjogJycgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpKTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIHRvIERPV05MT0FEIHdoZW4gZXZlcnkgdGV4dCBibG9jayBmaXRzIGl0cyBib3ggaW4gdGhlIGJ1aWx0IGZpbGUsXG4gIC8vIG9yIHRoZSB1c2VyIGFjY2VwdGVkIG9uZSB0aGF0IGRvZXMgbm90LiBUaGVyZSBpcyBubyBSZXRyeTogdGhlIHdvcmRzIGFyZVxuICAvLyB0aGUgcmVwb3J0J3Mgb3duLCBzbyBhIHNlY29uZCBhdHRlbXB0IHdvdWxkIGJ1aWxkIHRoZSBzYW1lIGZpbGUuIEVhY2ggYmxvY2tcbiAgLy8gaXMgbmFtZWQgYnkgaXRzIHBhZ2UgYW5kIHRoZSBzdGFydCBvZiBpdHMgd29yZHMsIGFuZCB0aGUgbm90ZSBzYXlzIHdoYXRcbiAgLy8gdGhpcyBmb3JtYXQgZG9lcyB3aXRoIHRoZSByZXN0LiBDYW5jZWxsaW5nIGVuZHMgdGhlIGV4cG9ydCBxdWlldGx5LCBhcyBhdFxuICAvLyB0aGUgZmFpbHVyZSBnYXRlLCBhbmQgdGhlIGJ1aWx0IGZpbGUgaXMgZHJvcHBlZCB1bnNhdmVkLlxuICBwcml2YXRlIF9vdmVyZmxvd0dhdGUoYnVpbHQ6IEJ1aWx0RXhwb3J0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIWJ1aWx0Lm92ZXJmbG93cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZihET1dOTE9BRCk7XG4gICAgfVxuXG4gICAgLy8gQSBibG9jayB3aXRoIG5vIHdvcmRzIHRvIHF1b3RlIChhbiBlbXB0eSB0YWJsZSwgc2F5KSBpcyBuYW1lZCBieSBpdHNcbiAgICAvLyBwYWdlIGFsb25lLCBub3QgYnkgYW4gZW1wdHkgcGFpciBvZiBxdW90ZXMuXG4gICAgY29uc3QgYmxvY2tzID0gYnVpbHQub3ZlcmZsb3dzXG4gICAgICAubWFwKChvdmVyZmxvdykgPT4gYDxzdHJvbmc+JHtlc2NhcGVIdG1sKG92ZXJmbG93LnBhZ2UpfTwvc3Ryb25nPmBcbiAgICAgICAgKyAob3ZlcmZsb3cuc25pcHBldCA/IGAgKOKAnCR7ZXNjYXBlSHRtbChvdmVyZmxvdy5zbmlwcGV0KX3igJ0pYCA6ICcnKSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdUZXh0IGRvZXMgbm90IGZpdCcsXG4gICAgICB0ZW1wbGF0ZTogYFNvbWUgdGV4dCBkb2VzIG5vdCBmaXQgaXRzIGJveDogJHtibG9ja3Muam9pbignLCAnKX0uICR7YnVpbHQub3ZlcmZsb3dOb3RlfWAsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdEb3dubG9hZCBBbnl3YXknLCB2YWx1ZTogRE9XTkxPQUQsIGNvbG9yOiAncHJpbWFyeScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0NhbmNlbCcsIGNhbmNlbDogdHJ1ZSwgY29sb3I6ICcnIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSk7XG4gIH1cbn1cbiJdfQ==
|