valtech-components 4.0.24 → 4.0.26
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/README.md +31 -262
- package/esm2022/lib/components/molecules/modal-shell/modal-shell.component.mjs +3 -3
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +3 -3
- package/esm2022/lib/components/organisms/change-password-modal/change-password-modal.component.mjs +5 -5
- package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.component.mjs +5 -5
- package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +4 -3
- package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +5 -5
- package/esm2022/lib/components/organisms/invite-member-modal/invite-member-modal.component.mjs +7 -5
- package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +6 -5
- package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +37 -48
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +8 -2
- package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +15 -3
- package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +3 -3
- package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +7 -7
- package/esm2022/lib/services/firebase/messaging.service.mjs +2 -2
- package/esm2022/lib/services/refreshable-stream/refreshable-stream.mjs +2 -2
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +98 -87
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/article/article.component.d.ts +2 -2
- package/lib/components/organisms/landing-steps/landing-steps.component.d.ts +1 -1
- package/lib/components/organisms/org-info-sheet/org-info-sheet.component.d.ts +12 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/services/firebase/firebase-messaging-sw.js +0 -145
|
@@ -107,7 +107,7 @@ export class SwitchOrgModalComponent {
|
|
|
107
107
|
<ion-header>
|
|
108
108
|
<ion-toolbar>
|
|
109
109
|
<ion-buttons slot="end">
|
|
110
|
-
<ion-button fill="clear" color="dark" (click)="dismiss()">
|
|
110
|
+
<ion-button fill="clear" color="dark" shape="round" (click)="dismiss()">
|
|
111
111
|
<strong>{{ t('close') }}</strong>
|
|
112
112
|
</ion-button>
|
|
113
113
|
</ion-buttons>
|
|
@@ -198,7 +198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
198
198
|
<ion-header>
|
|
199
199
|
<ion-toolbar>
|
|
200
200
|
<ion-buttons slot="end">
|
|
201
|
-
<ion-button fill="clear" color="dark" (click)="dismiss()">
|
|
201
|
+
<ion-button fill="clear" color="dark" shape="round" (click)="dismiss()">
|
|
202
202
|
<strong>{{ t('close') }}</strong>
|
|
203
203
|
</ion-button>
|
|
204
204
|
</ion-buttons>
|
|
@@ -277,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
277
277
|
}], i18nNamespace: [{
|
|
278
278
|
type: Input
|
|
279
279
|
}] } });
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3N3aXRjaC1vcmctbW9kYWwvc3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFckYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRWhFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUM7QUFFL0MsUUFBUSxDQUFDLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztBQUV0RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUErTEgsTUFBTSxPQUFPLHVCQUF1QjtJQW9DbEM7UUFuQ1EsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JDLFdBQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQVE3QywyREFBMkQ7UUFDbEQsa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUVsQyxTQUFJLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUNsQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLFVBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsZ0JBQVcsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBRTFDLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFHaEIsQ0FBQztZQUNULE9BQU8sQ0FBQyxFQUFFLFdBQVcsSUFBSSxDQUFDLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVNLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFHRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQWlCO1FBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU87UUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsV0FBVyxFQUFFLGFBQWE7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTthQUNsQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVTthQUNaLFVBQVUsRUFBRTthQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7K0dBckZVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDRLQTlLeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJFVCw2L0NBdkZDLFNBQVMsb0dBQ1QsVUFBVSxtRkFDVixVQUFVLDhFQUNWLFNBQVMsb1BBQ1QsVUFBVSx3S0FDVixVQUFVLHlHQUNWLE9BQU8sMkpBQ1AsZ0JBQWdCLDJFQUNoQixtQkFBbUIsK0VBQ25CLGtCQUFrQiw0SUFDbEIsY0FBYzs7NEZBZ0xMLHVCQUF1QjtrQkE5TG5DLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7cUJBQ2YsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkVUO3dEQTJHUSxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uSGVhZGVyLFxuICBJb25JY29uLFxuICBJb25TcGlubmVyLFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgYnVzaW5lc3NPdXRsaW5lLCBjaGVja21hcmtDaXJjbGVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VhcmNoYmFyL3NlYXJjaGJhci5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5pbXBvcnQgeyBPcmdTd2l0Y2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9vcmctc3dpdGNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBTV0lUQ0hfT1JHX01PREFMX0kxOE4gfSBmcm9tICcuL3N3aXRjaC1vcmctbW9kYWwuaTE4bic7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLlN3aXRjaE9yZyc7XG5cbmFkZEljb25zKHsgYnVzaW5lc3NPdXRsaW5lLCBjaGVja21hcmtDaXJjbGVPdXRsaW5lIH0pO1xuXG4vKipcbiAqIGB2YWwtc3dpdGNoLW9yZy1tb2RhbGAg4oCUIG1vZGFsIGRlIGNhbWJpbyBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YSAob3JnYW5pc21cbiAqIGNvbXBhcnRpZG8pLiBQcm9tb3ZpZG8gZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGUgQURSLTAyMS4gUmV1c2FkbyBwb3JcbiAqIGxhIHZpc3RhIEN1ZW50YSAoeSBmdXR1cmFzIHZpc3RhcyBvcmctYXdhcmUpLlxuICpcbiAqIExpc3RhIGxhcyBvcmdhbml6YWNpb25lcyBkZWwgdXNlciAodsOtYSBgT3JnU2VydmljZS5saXN0TXlPcmdzYCksIHBlcm1pdGUgYnVzY2FyXG4gKiBwb3Igbm9tYnJlLCB5IGNhbWJpYSBsYSBvcmcgYWN0aXZhIGNvbiBgT3JnU3dpdGNoU2VydmljZS5zd2l0Y2hUb2AuIExhIG9yZ1xuICogYWN0dWFsIHF1ZWRhIHByaW1lcmEgeSBkZXNoYWJpbGl0YWRhLlxuICpcbiAqIEFiaWVydG8gdsOtYSBgTW9kYWxTZXJ2aWNlYCDigJQgcmVjaWJlIGBfbW9kYWxSZWZgIHBvciBgY29tcG9uZW50UHJvcHNgICsgY2FsbGJhY2tcbiAqIGBvblN1Y2Nlc3NgLiBIZWFkZXIgY2Fuw7NuaWNvIChSZWdsYSAjNSk6IHNpbiBgaW9uLXRpdGxlYCwgYm90w7NuIENlcnJhciB0ZXh0byBlblxuICogYHNsb3Q9ZW5kYCwgdMOtdHVsby9zdWJ0w610dWxvIGVuIGVsIGJvZHkgY29uIGB2YWwtZGlzcGxheWAvYHZhbC10aXRsZWAuXG4gKlxuICogQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZVxuICogYFNldHRpbmdzLlN3aXRjaE9yZ2AuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1zd2l0Y2gtb3JnLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uU3Bpbm5lcixcbiAgICBJb25JY29uLFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBTZWFyY2hiYXJDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImRpc21pc3MoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IGNvbnRlbnQ6IHQoJ3RpdGxlJyksIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycgfVwiIC8+XG4gICAgICA8dmFsLXRpdGxlXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgY29udGVudDogdCgnc3VidGl0bGUnKSxcbiAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgIGNvbG9yOiAnJyxcbiAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgfVwiXG4gICAgICAvPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoLXNlY3Rpb25cIj5cbiAgICAgICAgPHZhbC1zZWFyY2hiYXJcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHQoJ3NlYXJjaFBsYWNlaG9sZGVyJyksXG4gICAgICAgICAgICBkZWJvdW5jZTogMjAwLFxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogJ25ldmVyJyxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoZmlsdGVyRXZlbnQpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cblxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2gtc3RhdGVcIj5cbiAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIGlmIChmaWx0ZXJlZE9yZ3MoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICB2YXJpYW50OiAnZW1wdHknLFxuICAgICAgICAgICAgICB0aXRsZTogdCgnbm9SZXN1bHRzJyksXG4gICAgICAgICAgICAgIGljb246ICdidXNpbmVzcy1vdXRsaW5lJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmdzLWxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKG9yZyBvZiBmaWx0ZXJlZE9yZ3MoKTsgdHJhY2sgb3JnLmlkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm9yZy1yb3dcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5vcmctcm93LS1hY3RpdmVdPVwib3JnLmlkID09PSBhY3RpdmVPcmdJZCgpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFzd2l0Y2hpbmdJZCgpIHx8IG9yZy5pZCA9PT0gYWN0aXZlT3JnSWQoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KG9yZylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1yb3dfX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYnVzaW5lc3Mtb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1yb3dfX2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLXJvd19fbmFtZVwiPnt7IG9yZy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctcm93X190eXBlXCI+e3sgb3JnLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1yb3dfX2VuZFwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChzd2l0Y2hpbmdJZCgpID09PSBvcmcuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIGNsYXNzPVwib3JnLXJvd19fc3Bpbm5lclwiIC8+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChvcmcuaWQgPT09IGFjdGl2ZU9yZ0lkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctcm93X19jdXJyZW50XCI+e3sgdCgnY3VycmVudCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGNsYXNzPVwib3JnLXJvd19fY2hlY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnN3aXRjaC1zZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnN3aXRjaC1zdGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAyNHB4IDA7XG4gICAgICB9XG4gICAgICAub3Jncy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAub3JnLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTRweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1pb24tY29sb3ItZGFyay1yZ2IpLCAwLjE0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLFxuICAgICAgICAgIG9wYWNpdHkgMC4xNXMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC5vcmctcm93OmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgfVxuICAgICAgLm9yZy1yb3ctLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZy1yb3dfX2ljb24ge1xuICAgICAgICB3aWR0aDogMzZweDtcbiAgICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci1kYXJrLXJnYiksIDAuMDgpO1xuICAgICAgfVxuICAgICAgLm9yZy1yb3dfX2JvZHkge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgfVxuICAgICAgLm9yZy1yb3dfX25hbWUge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgICAgLm9yZy1yb3dfX3R5cGUge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEodmFyKC0taW9uLWNvbG9yLWRhcmstcmdiKSwgMC43KTtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X19lbmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG4gICAgICAub3JnLXJvd19fY3VycmVudCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgY29sb3I6IHJnYmEodmFyKC0taW9uLWNvbG9yLWRhcmstcmdiKSwgMC43KTtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X19jaGVjayB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZy1yb3dfX3NwaW5uZXIge1xuICAgICAgICB3aWR0aDogMThweDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIG9yZ1N3aXRjaCA9IGluamVjdChPcmdTd2l0Y2hTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlcnJvcnMgPSBpbmplY3QoVmFsdGVjaEVycm9yU2VydmljZSk7XG5cbiAgLyoqIElueWVjdGFkbyBwb3IgYE1vZGFsU2VydmljZS5vcGVuYCDigJQgcmVmZXJlbmNpYSBwYXJhIGNlcnJhciBkZXNkZSBkZW50cm8uICovXG4gIEBJbnB1dCgpIF9tb2RhbFJlZj86IHsgZGlzbWlzczogKGRhdGE/OiB1bmtub3duLCByb2xlPzogc3RyaW5nKSA9PiB2b2lkIH07XG5cbiAgLyoqIENhbGxiYWNrIHRyYXMgdW4gc3dpdGNoIGV4aXRvc28gKHBhc2FkbyBwb3IgYGNvbXBvbmVudFByb3BzYCkuICovXG4gIEBJbnB1dCgpIG9uU3VjY2Vzcz86ICgpID0+IHZvaWQ7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIGNvbiBxdWUgbGEgdmlzdGEgcmVzdWVsdmUgc3VzIHRleHRvcy4gKi9cbiAgQElucHV0KCkgaTE4bk5hbWVzcGFjZSA9IERFRkFVTFRfTkFNRVNQQUNFO1xuXG4gIHJlYWRvbmx5IG9yZ3MgPSBzaWduYWw8T3JnYW5pemF0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHF1ZXJ5ID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgc3dpdGNoaW5nSWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC51c2VyKCkgYXMge1xuICAgICAgYWN0aXZlT3JnSWQ/OiBzdHJpbmc7XG4gICAgICBhY3RpdmVPcmc/OiBzdHJpbmc7XG4gICAgfSB8IG51bGw7XG4gICAgcmV0dXJuIHU/LmFjdGl2ZU9yZ0lkID8/IHU/LmFjdGl2ZU9yZyA/PyAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRPcmdzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXJ5KCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMub3JncygpO1xuICAgIGlmICghcSkgcmV0dXJuIGxpc3Q7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKG8gPT4gby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UoREVGQVVMVF9OQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJDb250ZW50KERFRkFVTFRfTkFNRVNQQUNFLCBTV0lUQ0hfT1JHX01PREFMX0kxOE4pO1xuICAgIH1cbiAgICB0aGlzLmxvYWRPcmdzKCk7XG4gIH1cblxuICBvblF1ZXJ5Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5LnNldCh2YWx1ZSA/PyAnJyk7XG4gIH1cblxuICBhc3luYyBvblNlbGVjdChvcmc6IE9yZ2FuaXphdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN3aXRjaGluZ0lkKCkgfHwgb3JnLmlkID09PSB0aGlzLmFjdGl2ZU9yZ0lkKCkpIHJldHVybjtcbiAgICB0aGlzLnN3aXRjaGluZ0lkLnNldChvcmcuaWQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9yZ1N3aXRjaC5zd2l0Y2hUbyhvcmcuaWQpO1xuICAgICAgdGhpcy5vblN1Y2Nlc3M/LigpO1xuICAgICAgdGhpcy5kaXNtaXNzKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdhY2NvdW50LnN3aXRjaE9yZycsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnc3dpdGNoRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLmkxOG5OYW1lc3BhY2UsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3dpdGNoaW5nSWQuc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9yZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm9yZ1NlcnZpY2VcbiAgICAgIC5saXN0TXlPcmdzKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogb3JncyA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgICAgICAgdGhpcy5vcmdzLnNldChbLi4ub3Jnc10uc29ydCgoYSwgYikgPT4gKGEuaWQgPT09IGFjdGl2ZUlkID8gLTEgOiBiLmlkID09PSBhY3RpdmVJZCA/IDEgOiAwKSkpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSksXG4gICAgICB9KTtcbiAgfVxuXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kYWxSZWY/LmRpc21pc3MobnVsbCwgJ2NhbmNlbCcpO1xuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5pMThuTmFtZXNwYWNlKTtcbiAgfVxufVxuIl19
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3N3aXRjaC1vcmctbW9kYWwvc3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixF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LENBQUM7SUFDMUMsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7K0dBckZVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDRLQTlLeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJFVCw2L0NBdkZDLFNBQVMsb0dBQ1QsVUFBVSxtRkFDVixVQUFVLDhFQUNWLFNBQVMsb1BBQ1QsVUFBVSx3S0FDVixVQUFVLHlHQUNWLE9BQU8sMkpBQ1AsZ0JBQWdCLDJFQUNoQixtQkFBbUIsK0VBQ25CLGtCQUFrQiw0SUFDbEIsY0FBYzs7NEZBZ0xMLHVCQUF1QjtrQkE5TG5DLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7cUJBQ2YsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkVUO3dEQTJHUSxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uSGVhZGVyLFxuICBJb25JY29uLFxuICBJb25TcGlubmVyLFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgYnVzaW5lc3NPdXRsaW5lLCBjaGVja21hcmtDaXJjbGVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VhcmNoYmFyL3NlYXJjaGJhci5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5pbXBvcnQgeyBPcmdTd2l0Y2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9vcmctc3dpdGNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBTV0lUQ0hfT1JHX01PREFMX0kxOE4gfSBmcm9tICcuL3N3aXRjaC1vcmctbW9kYWwuaTE4bic7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLlN3aXRjaE9yZyc7XG5cbmFkZEljb25zKHsgYnVzaW5lc3NPdXRsaW5lLCBjaGVja21hcmtDaXJjbGVPdXRsaW5lIH0pO1xuXG4vKipcbiAqIGB2YWwtc3dpdGNoLW9yZy1tb2RhbGAg4oCUIG1vZGFsIGRlIGNhbWJpbyBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YSAob3JnYW5pc21cbiAqIGNvbXBhcnRpZG8pLiBQcm9tb3ZpZG8gZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGUgQURSLTAyMS4gUmV1c2FkbyBwb3JcbiAqIGxhIHZpc3RhIEN1ZW50YSAoeSBmdXR1cmFzIHZpc3RhcyBvcmctYXdhcmUpLlxuICpcbiAqIExpc3RhIGxhcyBvcmdhbml6YWNpb25lcyBkZWwgdXNlciAodsOtYSBgT3JnU2VydmljZS5saXN0TXlPcmdzYCksIHBlcm1pdGUgYnVzY2FyXG4gKiBwb3Igbm9tYnJlLCB5IGNhbWJpYSBsYSBvcmcgYWN0aXZhIGNvbiBgT3JnU3dpdGNoU2VydmljZS5zd2l0Y2hUb2AuIExhIG9yZ1xuICogYWN0dWFsIHF1ZWRhIHByaW1lcmEgeSBkZXNoYWJpbGl0YWRhLlxuICpcbiAqIEFiaWVydG8gdsOtYSBgTW9kYWxTZXJ2aWNlYCDigJQgcmVjaWJlIGBfbW9kYWxSZWZgIHBvciBgY29tcG9uZW50UHJvcHNgICsgY2FsbGJhY2tcbiAqIGBvblN1Y2Nlc3NgLiBIZWFkZXIgY2Fuw7NuaWNvIChSZWdsYSAjNSk6IHNpbiBgaW9uLXRpdGxlYCwgYm90w7NuIENlcnJhciB0ZXh0byBlblxuICogYHNsb3Q9ZW5kYCwgdMOtdHVsby9zdWJ0w610dWxvIGVuIGVsIGJvZHkgY29uIGB2YWwtZGlzcGxheWAvYHZhbC10aXRsZWAuXG4gKlxuICogQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZVxuICogYFNldHRpbmdzLlN3aXRjaE9yZ2AuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1zd2l0Y2gtb3JnLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uU3Bpbm5lcixcbiAgICBJb25JY29uLFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBTZWFyY2hiYXJDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJkaXNtaXNzKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBjb250ZW50OiB0KCd0aXRsZScpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnIH1cIiAvPlxuICAgICAgPHZhbC10aXRsZVxuICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgIGNvbnRlbnQ6IHQoJ3N1YnRpdGxlJyksXG4gICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICBjb2xvcjogJycsXG4gICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgIH1cIlxuICAgICAgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaC1zZWN0aW9uXCI+XG4gICAgICAgIDx2YWwtc2VhcmNoYmFyXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0KCdzZWFyY2hQbGFjZWhvbGRlcicpLFxuICAgICAgICAgICAgZGVib3VuY2U6IDIwMCxcbiAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246ICduZXZlcicsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGZpbHRlckV2ZW50KT1cIm9uUXVlcnlDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoLXN0YXRlXCI+XG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSBpZiAoZmlsdGVyZWRPcmdzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgdmFyaWFudDogJ2VtcHR5JyxcbiAgICAgICAgICAgICAgdGl0bGU6IHQoJ25vUmVzdWx0cycpLFxuICAgICAgICAgICAgICBpY29uOiAnYnVzaW5lc3Mtb3V0bGluZScsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib3Jncy1saXN0XCI+XG4gICAgICAgICAgICBAZm9yIChvcmcgb2YgZmlsdGVyZWRPcmdzKCk7IHRyYWNrIG9yZy5pZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJvcmctcm93XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3JnLXJvdy0tYWN0aXZlXT1cIm9yZy5pZCA9PT0gYWN0aXZlT3JnSWQoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhc3dpdGNoaW5nSWQoKSB8fCBvcmcuaWQgPT09IGFjdGl2ZU9yZ0lkKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdChvcmcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctcm93X19pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImJ1c2luZXNzLW91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctcm93X19ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1yb3dfX25hbWVcIj57eyBvcmcubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLXJvd19fdHlwZVwiPnt7IG9yZy50eXBlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctcm93X19lbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc3dpdGNoaW5nSWQoKSA9PT0gb3JnLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiBjbGFzcz1cIm9yZy1yb3dfX3NwaW5uZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAob3JnLmlkID09PSBhY3RpdmVPcmdJZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLXJvd19fY3VycmVudFwiPnt7IHQoJ2N1cnJlbnQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmstY2lyY2xlLW91dGxpbmVcIiBjbGFzcz1cIm9yZy1yb3dfX2NoZWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zd2l0Y2gtc2VjdGlvbiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zd2l0Y2gtc3RhdGUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMjRweCAwO1xuICAgICAgfVxuICAgICAgLm9yZ3MtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLm9yZy1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE0cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0taW9uLWNvbG9yLWRhcmstcmdiKSwgMC4xNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBib3JkZXItY29sb3IgMC4xNXMgZWFzZSxcbiAgICAgICAgICBvcGFjaXR5IDAuMTVzIGVhc2U7XG4gICAgICB9XG4gICAgICAub3JnLXJvdzpub3QoOmRpc2FibGVkKTphY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG4gICAgICAub3JnLXJvdzpkaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93LS1hY3RpdmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X19pY29uIHtcbiAgICAgICAgd2lkdGg6IDM2cHg7XG4gICAgICAgIGhlaWdodDogMzZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItZGFyay1yZ2IpLCAwLjA4KTtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X19ib2R5IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X19uYW1lIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X190eXBlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKHZhcigtLWlvbi1jb2xvci1kYXJrLXJnYiksIDAuNyk7XG4gICAgICB9XG4gICAgICAub3JnLXJvd19fZW5kIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuICAgICAgLm9yZy1yb3dfX2N1cnJlbnQge1xuICAgICAgICBmb250LXNpemU6IDAuNzRyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKHZhcigtLWlvbi1jb2xvci1kYXJrLXJnYiksIDAuNyk7XG4gICAgICB9XG4gICAgICAub3JnLXJvd19fY2hlY2sge1xuICAgICAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmctcm93X19zcGlubmVyIHtcbiAgICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTd2l0Y2hPcmdNb2RhbENvbXBvbmVudCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgb3JnU2VydmljZSA9IGluamVjdChPcmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTd2l0Y2ggPSBpbmplY3QoT3JnU3dpdGNoU2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuXG4gIC8qKiBJbnllY3RhZG8gcG9yIGBNb2RhbFNlcnZpY2Uub3BlbmAg4oCUIHJlZmVyZW5jaWEgcGFyYSBjZXJyYXIgZGVzZGUgZGVudHJvLiAqL1xuICBASW5wdXQoKSBfbW9kYWxSZWY/OiB7IGRpc21pc3M6IChkYXRhPzogdW5rbm93biwgcm9sZT86IHN0cmluZykgPT4gdm9pZCB9O1xuXG4gIC8qKiBDYWxsYmFjayB0cmFzIHVuIHN3aXRjaCBleGl0b3NvIChwYXNhZG8gcG9yIGBjb21wb25lbnRQcm9wc2ApLiAqL1xuICBASW5wdXQoKSBvblN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biBjb24gcXVlIGxhIHZpc3RhIHJlc3VlbHZlIHN1cyB0ZXh0b3MuICovXG4gIEBJbnB1dCgpIGkxOG5OYW1lc3BhY2UgPSBERUZBVUxUX05BTUVTUEFDRTtcblxuICByZWFkb25seSBvcmdzID0gc2lnbmFsPE9yZ2FuaXphdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBxdWVyeSA9IHNpZ25hbCgnJyk7XG4gIHJlYWRvbmx5IHN3aXRjaGluZ0lkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ0lkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLmF1dGgudXNlcigpIGFzIHtcbiAgICAgIGFjdGl2ZU9yZ0lkPzogc3RyaW5nO1xuICAgICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICAgIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkT3JncyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxID0gdGhpcy5xdWVyeSgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm9yZ3MoKTtcbiAgICBpZiAoIXEpIHJldHVybiBsaXN0O1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihvID0+IG8ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKERFRkFVTFRfTkFNRVNQQUNFKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyQ29udGVudChERUZBVUxUX05BTUVTUEFDRSwgU1dJVENIX09SR19NT0RBTF9JMThOKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkT3JncygpO1xuICB9XG5cbiAgb25RdWVyeUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeS5zZXQodmFsdWUgPz8gJycpO1xuICB9XG5cbiAgYXN5bmMgb25TZWxlY3Qob3JnOiBPcmdhbml6YXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zd2l0Y2hpbmdJZCgpIHx8IG9yZy5pZCA9PT0gdGhpcy5hY3RpdmVPcmdJZCgpKSByZXR1cm47XG4gICAgdGhpcy5zd2l0Y2hpbmdJZC5zZXQob3JnLmlkKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vcmdTd2l0Y2guc3dpdGNoVG8ob3JnLmlkKTtcbiAgICAgIHRoaXMub25TdWNjZXNzPy4oKTtcbiAgICAgIHRoaXMuZGlzbWlzcygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnYWNjb3VudC5zd2l0Y2hPcmcnLFxuICAgICAgICBmYWxsYmFja0tleTogJ3N3aXRjaEVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5pMThuTmFtZXNwYWNlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnN3aXRjaGluZ0lkLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRPcmdzKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vcmdTZXJ2aWNlXG4gICAgICAubGlzdE15T3JncygpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IG9yZ3MgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUlkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgICAgICAgIHRoaXMub3Jncy5zZXQoWy4uLm9yZ3NdLnNvcnQoKGEsIGIpID0+IChhLmlkID09PSBhY3RpdmVJZCA/IC0xIDogYi5pZCA9PT0gYWN0aXZlSWQgPyAxIDogMCkpKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9hZGluZy5zZXQoZmFsc2UpLFxuICAgICAgfSk7XG4gIH1cblxuICBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsUmVmPy5kaXNtaXNzKG51bGwsICdjYW5jZWwnKTtcbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMuaTE4bk5hbWVzcGFjZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -68,7 +68,7 @@ export class TransferOwnershipModalComponent {
|
|
|
68
68
|
<ion-header>
|
|
69
69
|
<ion-toolbar>
|
|
70
70
|
<ion-buttons slot="end">
|
|
71
|
-
<ion-button fill="clear" color="dark" (click)="dismiss()">
|
|
71
|
+
<ion-button fill="clear" color="dark" shape="round" (click)="dismiss()">
|
|
72
72
|
<strong>{{ t('close') }}</strong>
|
|
73
73
|
</ion-button>
|
|
74
74
|
</ion-buttons>
|
|
@@ -128,13 +128,13 @@ export class TransferOwnershipModalComponent {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
<div class="transfer-confirm-row">
|
|
131
|
-
<ion-button expand="block" color="dark" [disabled]="!selectedId()" (click)="confirm()">
|
|
131
|
+
<ion-button expand="block" color="dark" shape="round" [disabled]="!selectedId()" (click)="confirm()">
|
|
132
132
|
{{ t('confirmCta') }}
|
|
133
133
|
</ion-button>
|
|
134
134
|
</div>
|
|
135
135
|
|
|
136
136
|
<div class="modal-close-bottom">
|
|
137
|
-
<ion-button expand="block" fill="outline" color="dark" (click)="dismiss()">
|
|
137
|
+
<ion-button expand="block" fill="outline" color="dark" shape="round" (click)="dismiss()">
|
|
138
138
|
{{ t('close') }}
|
|
139
139
|
</ion-button>
|
|
140
140
|
</div>
|
|
@@ -157,7 +157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
157
157
|
<ion-header>
|
|
158
158
|
<ion-toolbar>
|
|
159
159
|
<ion-buttons slot="end">
|
|
160
|
-
<ion-button fill="clear" color="dark" (click)="dismiss()">
|
|
160
|
+
<ion-button fill="clear" color="dark" shape="round" (click)="dismiss()">
|
|
161
161
|
<strong>{{ t('close') }}</strong>
|
|
162
162
|
</ion-button>
|
|
163
163
|
</ion-buttons>
|
|
@@ -217,13 +217,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
<div class="transfer-confirm-row">
|
|
220
|
-
<ion-button expand="block" color="dark" [disabled]="!selectedId()" (click)="confirm()">
|
|
220
|
+
<ion-button expand="block" color="dark" shape="round" [disabled]="!selectedId()" (click)="confirm()">
|
|
221
221
|
{{ t('confirmCta') }}
|
|
222
222
|
</ion-button>
|
|
223
223
|
</div>
|
|
224
224
|
|
|
225
225
|
<div class="modal-close-bottom">
|
|
226
|
-
<ion-button expand="block" fill="outline" color="dark" (click)="dismiss()">
|
|
226
|
+
<ion-button expand="block" fill="outline" color="dark" shape="round" (click)="dismiss()">
|
|
227
227
|
{{ t('close') }}
|
|
228
228
|
</ion-button>
|
|
229
229
|
</div>
|
|
@@ -238,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
238
238
|
}], i18nNamespace: [{
|
|
239
239
|
type: Input
|
|
240
240
|
}] } });
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXItb3duZXJzaGlwLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFaEYsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQThJSCxNQUFNLE9BQU8sK0JBQStCO0lBNEIxQztRQTNCUSxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLHVFQUF1RTtRQUM5RCxZQUFPLEdBQWlCLEVBQUUsQ0FBQztRQVFwQywyREFBMkQ7UUFDbEQsa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUVsQyxVQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUs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QVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uQnV0dG9ucywgSW9uQ29udGVudCwgSW9uSGVhZGVyLCBJb25Ub29sYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IFNlYXJjaGJhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5cbmltcG9ydCB7IE1lbWJlckNhcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRSQU5TRkVSX09XTkVSU0hJUF9NT0RBTF9JMThOIH0gZnJvbSAnLi90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwuaTE4bic7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLlRyYW5zZmVyTW9kYWwnO1xuXG4vKipcbiAqIGB2YWwtdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsYCDigJQgc2VsZWN0b3IgZGUgbWllbWJybyBwYXJhIHRyYW5zZmVyaXIgbGFcbiAqIHByb3BpZWRhZCBkZSBsYSBvcmdhbml6YWNpw7NuLiBQcm9tb3ZpZG8gZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGVcbiAqIEFEUi0wMjEuXG4gKlxuICogUmVjaWJlIGxhIGxpc3RhIGRlIGNhbmRpZGF0b3MgcG9yIGBtZW1iZXJzYCAodG9kb3MgZXhjZXB0byBlbCBvd25lciBhY3R1YWwpLFxuICogcGVybWl0ZSBmaWx0cmFybG9zIGNvbiBgdmFsLXNlYXJjaGJhcmAgeSwgYWwgY29uZmlybWFyLCBlamVjdXRhIGVsIGNhbGxiYWNrXG4gKiBgb25Db25maXJtKG5ld093bmVySWQpYC4gTGEgZWplY3VjacOzbiByZWFsIGRlIGxhIHRyYW5zZmVyZW5jaWEgKHbDrWFcbiAqIGBPcmdTZXJ2aWNlLnRyYW5zZmVyT3duZXJzaGlwYCkgcXVlZGEgZW4gZWwgY29uc3VtZXIuXG4gKlxuICogQWJpZXJ0byB2w61hIGBNb2RhbFNlcnZpY2VgIOKAlCByZWNpYmUgYF9tb2RhbFJlZmAgcG9yIGBjb21wb25lbnRQcm9wc2AuIEhlYWRlclxuICogY2Fuw7NuaWNvIChSZWdsYSAjNSk6IHNpbiBgaW9uLXRpdGxlYCwgYm90w7NuIENlcnJhciB0ZXh0byBlbiBgc2xvdD1lbmRgLFxuICogdMOtdHVsby9zdWJ0w610dWxvIGVuIGVsIGJvZHkgY29uIGB2YWwtZGlzcGxheWAvYHZhbC10aXRsZWAuXG4gKlxuICogQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZVxuICogYFNldHRpbmdzLlRyYW5zZmVyTW9kYWxgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkNvbnRlbnQsXG4gICAgU2VhcmNoYmFyQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cblxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgY29udGVudDogdCgndGl0bGUnKSwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJyB9XCIgLz5cbiAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICBjb250ZW50OiB0KCdoaW50JyksXG4gICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICBjb2xvcjogJycsXG4gICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgIH1cIlxuICAgICAgLz5cblxuICAgICAgPHZhbC1zZWFyY2hiYXJcbiAgICAgICAgW3Byb3BzXT1cInsgcGxhY2Vob2xkZXI6IHQoJ3NlYXJjaFBsYWNlaG9sZGVyJyksIGRlYm91bmNlOiAxNTAgfVwiXG4gICAgICAgIChmaWx0ZXJFdmVudCk9XCJxdWVyeS5zZXQoJGV2ZW50KVwiXG4gICAgICAvPlxuXG4gICAgICBAaWYgKG1lbWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBjb250ZW50OiB0KCdlbXB0eScpLFxuICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIH0gQGVsc2UgaWYgKGZpbHRlcmVkKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBjb250ZW50OiBub1Jlc3VsdHNMYWJlbCgpLFxuICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNmZXItbWVtYmVyLWxpc3RcIj5cbiAgICAgICAgICBAZm9yIChtIG9mIGZpbHRlcmVkKCk7IHRyYWNrIG0udXNlcklkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNmZXItbWVtYmVyLXJvd1wiXG4gICAgICAgICAgICAgIFtjbGFzcy50cmFuc2Zlci1tZW1iZXItcm93LS1zZWxlY3RlZF09XCJzZWxlY3RlZElkKCkgPT09IG0udXNlcklkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkSWQuc2V0KG0udXNlcklkKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRyYW5zZmVyLW1lbWJlci1uYW1lXCI+e3sgbS5uYW1lIHx8IG0uZW1haWwgfHwgbS51c2VySWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRJZCgpID09PSBtLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJhbnNmZXItbWVtYmVyLWNoZWNrXCI+JiMxMDAwMzs8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0cmFuc2Zlci1jb25maXJtLXJvd1wiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBleHBhbmQ9XCJibG9ja1wiIGNvbG9yPVwiZGFya1wiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRJZCgpXCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiPlxuICAgICAgICAgIHt7IHQoJ2NvbmZpcm1DdGEnKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNsb3NlLWJvdHRvbVwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBleHBhbmQ9XCJibG9ja1wiIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImRpc21pc3MoKVwiPlxuICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgdmFsLWRpc3BsYXkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgdmFsLXRpdGxlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB9XG4gICAgICB2YWwtc2VhcmNoYmFyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG4gICAgICAudHJhbnNmZXItbWVtYmVyLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgIH1cbiAgICAgIC50cmFuc2Zlci1tZW1iZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzO1xuICAgICAgfVxuICAgICAgLnRyYW5zZmVyLW1lbWJlci1yb3ctLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICB9XG4gICAgICAudHJhbnNmZXItbWVtYmVyLWNoZWNrIHtcbiAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnRyYW5zZmVyLWNvbmZpcm0tcm93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgIH1cbiAgICAgIC5tb2RhbC1jbG9zZS1ib3R0b20ge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyT3duZXJzaGlwTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIC8qKiBMaXN0YSBkZSBtaWVtYnJvcyB0cmFuc2ZlcmlibGVzICh0b2RvcyBleGNlcHRvIGVsIG93bmVyIGFjdHVhbCkuICovXG4gIEBJbnB1dCgpIG1lbWJlcnM6IE1lbWJlckNhcmRbXSA9IFtdO1xuXG4gIC8qKiBDYWxsYmFjayBlamVjdXRhZG8gY29uIGVsIHVzZXJJZCBzZWxlY2Npb25hZG8gdHJhcyBjb25maXJtYXIuICovXG4gIEBJbnB1dCgpIG9uQ29uZmlybT86IChuZXdPd25lcklkOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqIElueWVjdGFkbyBwb3IgYE1vZGFsU2VydmljZS5vcGVuYCDigJQgcmVmZXJlbmNpYSBwYXJhIGNlcnJhciBkZXNkZSBkZW50cm8uICovXG4gIEBJbnB1dCgpIF9tb2RhbFJlZj86IHsgZGlzbWlzczogKGRhdGE/OiB1bmtub3duLCByb2xlPzogc3RyaW5nKSA9PiB2b2lkIH07XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIGNvbiBxdWUgbGEgdmlzdGEgcmVzdWVsdmUgc3VzIHRleHRvcy4gKi9cbiAgQElucHV0KCkgaTE4bk5hbWVzcGFjZSA9IERFRkFVTFRfTkFNRVNQQUNFO1xuXG4gIHJlYWRvbmx5IHF1ZXJ5ID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJZCA9IHNpZ25hbCgnJyk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcSA9IHRoaXMucXVlcnkoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXEpIHJldHVybiB0aGlzLm1lbWJlcnM7XG4gICAgcmV0dXJuIHRoaXMubWVtYmVycy5maWx0ZXIoXG4gICAgICBtID0+IG0ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fCBtLmVtYWlsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpIHx8IG0udXNlcklkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBub1Jlc3VsdHNMYWJlbCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMudCgnbm9SZXN1bHRzJyl9IFwiJHt0aGlzLnF1ZXJ5KCl9XCJgKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UoREVGQVVMVF9OQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJDb250ZW50KERFRkFVTFRfTkFNRVNQQUNFLCBUUkFOU0ZFUl9PV05FUlNISVBfTU9EQUxfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKHRoaXMuaTE4bk5hbWVzcGFjZSkpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQodGhpcy5pMThuTmFtZXNwYWNlLCBUUkFOU0ZFUl9PV05FUlNISVBfTU9EQUxfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybSgpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc2VsZWN0ZWRJZCgpO1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICB0aGlzLm9uQ29uZmlybT8uKGlkKTtcbiAgICB0aGlzLmRpc21pc3MoKTtcbiAgfVxuXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kYWxSZWY/LmRpc21pc3MobnVsbCwgJ2NhbmNlbCcpO1xuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5pMThuTmFtZXNwYWNlKTtcbiAgfVxufVxuIl19
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXItb3duZXJzaGlwLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFaEYsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQThJSCxNQUFNLE9BQU8sK0JBQStCO0lBNEIxQztRQTNCUSxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLHVFQUF1RTtRQUM5RCxZQUFPLEdBQWlCLEVBQUUsQ0FBQztRQVFwQywyREFBMkQ7UUFDbEQsa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUVsQyxVQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUs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QVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uQnV0dG9ucywgSW9uQ29udGVudCwgSW9uSGVhZGVyLCBJb25Ub29sYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IFNlYXJjaGJhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5cbmltcG9ydCB7IE1lbWJlckNhcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRSQU5TRkVSX09XTkVSU0hJUF9NT0RBTF9JMThOIH0gZnJvbSAnLi90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwuaTE4bic7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLlRyYW5zZmVyTW9kYWwnO1xuXG4vKipcbiAqIGB2YWwtdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsYCDigJQgc2VsZWN0b3IgZGUgbWllbWJybyBwYXJhIHRyYW5zZmVyaXIgbGFcbiAqIHByb3BpZWRhZCBkZSBsYSBvcmdhbml6YWNpw7NuLiBQcm9tb3ZpZG8gZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGVcbiAqIEFEUi0wMjEuXG4gKlxuICogUmVjaWJlIGxhIGxpc3RhIGRlIGNhbmRpZGF0b3MgcG9yIGBtZW1iZXJzYCAodG9kb3MgZXhjZXB0byBlbCBvd25lciBhY3R1YWwpLFxuICogcGVybWl0ZSBmaWx0cmFybG9zIGNvbiBgdmFsLXNlYXJjaGJhcmAgeSwgYWwgY29uZmlybWFyLCBlamVjdXRhIGVsIGNhbGxiYWNrXG4gKiBgb25Db25maXJtKG5ld093bmVySWQpYC4gTGEgZWplY3VjacOzbiByZWFsIGRlIGxhIHRyYW5zZmVyZW5jaWEgKHbDrWFcbiAqIGBPcmdTZXJ2aWNlLnRyYW5zZmVyT3duZXJzaGlwYCkgcXVlZGEgZW4gZWwgY29uc3VtZXIuXG4gKlxuICogQWJpZXJ0byB2w61hIGBNb2RhbFNlcnZpY2VgIOKAlCByZWNpYmUgYF9tb2RhbFJlZmAgcG9yIGBjb21wb25lbnRQcm9wc2AuIEhlYWRlclxuICogY2Fuw7NuaWNvIChSZWdsYSAjNSk6IHNpbiBgaW9uLXRpdGxlYCwgYm90w7NuIENlcnJhciB0ZXh0byBlbiBgc2xvdD1lbmRgLFxuICogdMOtdHVsby9zdWJ0w610dWxvIGVuIGVsIGJvZHkgY29uIGB2YWwtZGlzcGxheWAvYHZhbC10aXRsZWAuXG4gKlxuICogQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZVxuICogYFNldHRpbmdzLlRyYW5zZmVyTW9kYWxgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkNvbnRlbnQsXG4gICAgU2VhcmNoYmFyQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImRpc21pc3MoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IGNvbnRlbnQ6IHQoJ3RpdGxlJyksIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycgfVwiIC8+XG4gICAgICA8dmFsLXRpdGxlXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgY29udGVudDogdCgnaGludCcpLFxuICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgY29sb3I6ICcnLFxuICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICB9XCJcbiAgICAgIC8+XG5cbiAgICAgIDx2YWwtc2VhcmNoYmFyXG4gICAgICAgIFtwcm9wc109XCJ7IHBsYWNlaG9sZGVyOiB0KCdzZWFyY2hQbGFjZWhvbGRlcicpLCBkZWJvdW5jZTogMTUwIH1cIlxuICAgICAgICAoZmlsdGVyRXZlbnQpPVwicXVlcnkuc2V0KCRldmVudClcIlxuICAgICAgLz5cblxuICAgICAgQGlmIChtZW1iZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgY29udGVudDogdCgnZW1wdHknKSxcbiAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIGlmIChmaWx0ZXJlZCgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgY29udGVudDogbm9SZXN1bHRzTGFiZWwoKSxcbiAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zZmVyLW1lbWJlci1saXN0XCI+XG4gICAgICAgICAgQGZvciAobSBvZiBmaWx0ZXJlZCgpOyB0cmFjayBtLnVzZXJJZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInRyYW5zZmVyLW1lbWJlci1yb3dcIlxuICAgICAgICAgICAgICBbY2xhc3MudHJhbnNmZXItbWVtYmVyLXJvdy0tc2VsZWN0ZWRdPVwic2VsZWN0ZWRJZCgpID09PSBtLnVzZXJJZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZElkLnNldChtLnVzZXJJZClcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmFuc2Zlci1tZW1iZXItbmFtZVwiPnt7IG0ubmFtZSB8fCBtLmVtYWlsIHx8IG0udXNlcklkIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkSWQoKSA9PT0gbS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRyYW5zZmVyLW1lbWJlci1jaGVja1wiPiYjMTAwMDM7PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwidHJhbnNmZXItY29uZmlybS1yb3dcIj5cbiAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cImRhcmtcIiBzaGFwZT1cInJvdW5kXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZElkKClcIiAoY2xpY2spPVwiY29uZmlybSgpXCI+XG4gICAgICAgICAge3sgdCgnY29uZmlybUN0YScpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY2xvc2UtYm90dG9tXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImJsb2NrXCIgZmlsbD1cIm91dGxpbmVcIiBjb2xvcj1cImRhcmtcIiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImRpc21pc3MoKVwiPlxuICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgdmFsLWRpc3BsYXkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgdmFsLXRpdGxlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB9XG4gICAgICB2YWwtc2VhcmNoYmFyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG4gICAgICAudHJhbnNmZXItbWVtYmVyLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgIH1cbiAgICAgIC50cmFuc2Zlci1tZW1iZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzO1xuICAgICAgfVxuICAgICAgLnRyYW5zZmVyLW1lbWJlci1yb3ctLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICB9XG4gICAgICAudHJhbnNmZXItbWVtYmVyLWNoZWNrIHtcbiAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnRyYW5zZmVyLWNvbmZpcm0tcm93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgIH1cbiAgICAgIC5tb2RhbC1jbG9zZS1ib3R0b20ge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyT3duZXJzaGlwTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIC8qKiBMaXN0YSBkZSBtaWVtYnJvcyB0cmFuc2ZlcmlibGVzICh0b2RvcyBleGNlcHRvIGVsIG93bmVyIGFjdHVhbCkuICovXG4gIEBJbnB1dCgpIG1lbWJlcnM6IE1lbWJlckNhcmRbXSA9IFtdO1xuXG4gIC8qKiBDYWxsYmFjayBlamVjdXRhZG8gY29uIGVsIHVzZXJJZCBzZWxlY2Npb25hZG8gdHJhcyBjb25maXJtYXIuICovXG4gIEBJbnB1dCgpIG9uQ29uZmlybT86IChuZXdPd25lcklkOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqIElueWVjdGFkbyBwb3IgYE1vZGFsU2VydmljZS5vcGVuYCDigJQgcmVmZXJlbmNpYSBwYXJhIGNlcnJhciBkZXNkZSBkZW50cm8uICovXG4gIEBJbnB1dCgpIF9tb2RhbFJlZj86IHsgZGlzbWlzczogKGRhdGE/OiB1bmtub3duLCByb2xlPzogc3RyaW5nKSA9PiB2b2lkIH07XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIGNvbiBxdWUgbGEgdmlzdGEgcmVzdWVsdmUgc3VzIHRleHRvcy4gKi9cbiAgQElucHV0KCkgaTE4bk5hbWVzcGFjZSA9IERFRkFVTFRfTkFNRVNQQUNFO1xuXG4gIHJlYWRvbmx5IHF1ZXJ5ID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJZCA9IHNpZ25hbCgnJyk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcSA9IHRoaXMucXVlcnkoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXEpIHJldHVybiB0aGlzLm1lbWJlcnM7XG4gICAgcmV0dXJuIHRoaXMubWVtYmVycy5maWx0ZXIoXG4gICAgICBtID0+IG0ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fCBtLmVtYWlsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpIHx8IG0udXNlcklkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBub1Jlc3VsdHNMYWJlbCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMudCgnbm9SZXN1bHRzJyl9IFwiJHt0aGlzLnF1ZXJ5KCl9XCJgKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UoREVGQVVMVF9OQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJDb250ZW50KERFRkFVTFRfTkFNRVNQQUNFLCBUUkFOU0ZFUl9PV05FUlNISVBfTU9EQUxfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKHRoaXMuaTE4bk5hbWVzcGFjZSkpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQodGhpcy5pMThuTmFtZXNwYWNlLCBUUkFOU0ZFUl9PV05FUlNISVBfTU9EQUxfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybSgpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc2VsZWN0ZWRJZCgpO1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICB0aGlzLm9uQ29uZmlybT8uKGlkKTtcbiAgICB0aGlzLmRpc21pc3MoKTtcbiAgfVxuXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kYWxSZWY/LmRpc21pc3MobnVsbCwgJ2NhbmNlbCcpO1xuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5pMThuTmFtZXNwYWNlKTtcbiAgfVxufVxuIl19
|
|
@@ -338,7 +338,7 @@ export class MessagingService {
|
|
|
338
338
|
const token = await this.requestPermission();
|
|
339
339
|
if (!token) {
|
|
340
340
|
// requestPermission devuelve null tanto por permiso denegado como por
|
|
341
|
-
// fallo al obtener el token.
|
|
341
|
+
// fallo al obtener el token. Distivdsmos por el estado del permiso.
|
|
342
342
|
const permission = this.getPermissionState();
|
|
343
343
|
if (permission === 'denied' || permission === 'default') {
|
|
344
344
|
return { status: 'denied', reason: 'Permiso de notificaciones denegado' };
|
|
@@ -927,4 +927,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
927
927
|
type: Inject,
|
|
928
928
|
args: [PLATFORM_ID]
|
|
929
929
|
}] }, { type: i0.NgZone }] });
|
|
930
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFhLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsSUFBSSxjQUFjLEVBQUUsWUFBWSxJQUFJLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBeUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBcUQzQixZQUNVLFFBQWtCLEVBQ2UsTUFBNkIsRUFDekMsVUFBa0IsRUFDdkMsTUFBYztRQUhkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZSxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4RGhCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFDcEQsNkJBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFDakUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBaUI7WUFDekQsS0FBSyxFQUFFLElBQUk7WUFDWCxVQUFVLEVBQUUsU0FBUztZQUNyQixXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7UUFNSCx3REFBd0Q7UUFDdkMsc0JBQWlCLEdBQUcsb0JBQW9CLENBQUM7UUFDMUQ7Ozs7Ozs7V0FPRztRQUNjLHNCQUFpQixHQUFHLG1CQUFtQixDQUFDO1FBRXpEOzs7Ozs7V0FNRztRQUNjLHdCQUFtQixHQUFHLE1BQU0sQ0FBQztRQUU5Qzs7Ozs7Ozs7OztXQVVHO1FBQ2MsdUJBQWtCLEdBQUcsTUFBTSxDQUFDO1FBRTdDOzs7V0FHRztRQUNjLG9CQUFlLEdBQUcseUJBQXlCLENBQUM7UUFRM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLElBQUksS0FBSyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUF3Qk8sS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsdUVBQXVFO1lBQ3ZFLCtEQUErRDtZQUMvRCwwRUFBMEU7WUFDMUUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFjLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsaUJBQWlCO0lBQ2pCLDhFQUE4RTtJQUU5RTs7T0FFRztJQUNLLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSxnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDMUIsV0FBVyxFQUFFLFNBQVM7WUFDdEIsVUFBVTtTQUNYLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLFNBQVMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzNFLE9BQU87UUFDVCxDQUFDO1FBRUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDMUQsOERBQThEO1lBQzlELHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsMERBQTBEO1lBQzFELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssb0JBQW9CO2dCQUFFLE9BQU87WUFDdEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUErQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO29CQUNqQyxZQUFZO29CQUNaLE1BQU07b0JBQ04sU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2lCQUN0QixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQiw4RUFBOEU7SUFFOUU7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHNDQUFzQztZQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTFELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsVUFBVSxFQUFFLFVBQW9DO2FBQ2pELENBQUMsQ0FBQztZQUVILElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELG9CQUFvQjtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVwQyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFDRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBNkIsRUFBRTtRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFMUMsSUFBSSxRQUFtRCxDQUFDO1FBRXhELDBFQUEwRTtRQUMxRSw0RUFBNEU7UUFDNUUsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQW1CLE9BQU8sQ0FBQyxFQUFFO1lBQzlELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztnQkFBRSxPQUFPLENBQUMsc0JBQXNCO1lBQ2pFLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN6QixRQUFRLEdBQUcsU0FBUyxDQUFDO2dCQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxJQUFJLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxDQUFDO2dCQUV0RixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO29CQUMzQixrRUFBa0U7b0JBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzNCLE9BQU8sQ0FBQzt3QkFDTixNQUFNLEVBQUUsU0FBUzt3QkFDakIsUUFBUSxFQUFFLEtBQUs7d0JBQ2YsTUFBTSxFQUFFLGdDQUFnQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHO3FCQUMxRSxDQUFDLENBQUM7b0JBQ0gsT0FBTztnQkFDVCxDQUFDO2dCQUVELHFFQUFxRTtnQkFDckUsT0FBTyxDQUFDLElBQUksQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxDQUFDO29CQUNOLE1BQU0sRUFBRSxTQUFTO29CQUNqQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxNQUFNLEVBQUUsK0NBQStDO2lCQUN4RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDcEQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkIsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUEwQjtRQUNwRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO1FBQ2pGLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCx1RUFBdUU7WUFDdkUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUU3QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsc0VBQXNFO2dCQUN0RSxxRUFBcUU7Z0JBQ3JFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztnQkFDNUUsQ0FBQztnQkFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQztZQUN4RSxDQUFDO1lBRUQseUVBQXlFO1lBQ3pFLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxxQ0FBcUMsRUFBRSxDQUFDO2dCQUNuRixDQUFDO1lBQ0gsQ0FBQztZQUVELDJFQUEyRTtZQUMzRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUYsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCx5REFBeUQ7SUFDakQsZUFBZTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDO1FBQzlELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx5RUFBeUU7WUFDekUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUNuRCxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsaURBQWlEO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsc0VBQXNFO0lBQzlELG1CQUFtQjtRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU87UUFDaEQsSUFBSSxDQUFDO1lBQ0gsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLHNEQUFzRDtRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLElBQUksQ0FDVixxRkFBcUYsQ0FDdEYsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsdUVBQXVFO1lBQ3ZFLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3pELGdGQUFnRjtZQUNoRix3RUFBd0U7WUFDeEUsMkVBQTJFO1lBQzNFLG1FQUFtRTtZQUNuRSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUVwRSxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RDLFFBQVE7Z0JBQ1IseUJBQXlCLEVBQUUsWUFBWTthQUN4QyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUNULHlDQUF5QyxFQUN6QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUNoRCxDQUFDO1lBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBRUgscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHdFQUF3RTtZQUN4RSw4REFBOEQ7WUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGdDQUFnQztRQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUYsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDM0UsT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSyx5QkFBeUI7UUFDL0IsSUFBSSxLQUFnRCxDQUFDO1FBRXJELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDcEQsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBUSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMvQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLGdEQUFnRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQ25GLENBQ0YsQ0FBQztZQUNKLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDakQsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsS0FBZ0M7UUFDbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksQ0FBQztZQUNILElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTztRQUNoRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7WUFFSCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV4QiwrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsV0FBVztJQUNYLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN6RCxNQUFNLFlBQVksR0FBd0I7Z0JBQ3hDLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUk7Z0JBQ2hDLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBOEI7Z0JBQzVDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzthQUM3QixDQUFDO1lBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdkMsOERBQThEO1lBQzlELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHNCQUFzQixDQUFDLE9BQTRCO1FBQ3pELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSwyQkFBMkI7WUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLHNCQUFzQjtJQUN0Qiw4RUFBOEU7SUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUMsVUFBb0MsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLHlEQUF5RDtRQUN6RCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDRDQUE0QztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDhFQUE4RTtRQUM5RSxnRUFBZ0U7UUFDaEUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLG1EQUFtRDtRQUNuRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RCxNQUFNLEVBQUUsR0FBSSxTQUF1QixDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU87WUFDeEQsU0FBaUQsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDMUIsS0FBSztZQUNMLFdBQVcsRUFBRSxJQUFJLEVBQUUsd0NBQXdDO1NBQzVELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsNEJBQTRCO0lBQzVCLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0EwQkc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILHFCQUFxQixDQUFDLElBQTZCO1FBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sTUFBTSxHQUF1QixFQUFFLENBQUM7UUFFdEMsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELGNBQWM7UUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsOENBQThDO1FBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdEQUF3RDtnQkFDeEQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7UUFFRCx3Q0FBd0M7UUFDeEMsTUFBTSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztRQUMvQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQztvQkFDSCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7SUFDSCx1QkFBdUIsQ0FBQyxZQUFpQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7WUFDakMsWUFBWTtZQUNaLE1BQU07WUFDTixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsSUFBNkI7UUFDL0MsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUMxQyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFaEMsOEJBQThCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUVwRixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQXg5QlUsZ0JBQWdCLDBDQXVEakIsdUJBQXVCLGFBQ3ZCLFdBQVc7bUhBeERWLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF3RDdCLE1BQU07MkJBQUMsdUJBQXVCOzswQkFDOUIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXNzYWdpbmcgU2VydmljZSAoRkNNKVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChQdXNoIE5vdGlmaWNhdGlvbnMpLlxuICogUGVybWl0ZSBzb2xpY2l0YXIgcGVybWlzb3MsIG9idGVuZXIgdG9rZW5zLCBlc2N1Y2hhciBtZW5zYWplcyB5IG1hbmVqYXJcbiAqIG5hdmVnYWNpw7NuIChkZWVwIGxpbmtpbmcpIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgdW5hIG5vdGlmaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nLCBnZXRUb2tlbiwgZGVsZXRlVG9rZW4sIG9uTWVzc2FnZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGlzU3VwcG9ydGVkIGFzIGZjbUlzU3VwcG9ydGVkLCBnZXRNZXNzYWdpbmcgYXMgZmNtR2V0TWVzc2FnaW5nIH0gZnJvbSAnZmlyZWJhc2UvbWVzc2FnaW5nJztcbmltcG9ydCB7IGdldEFwcCwgZ2V0QXBwcywgaW5pdGlhbGl6ZUFwcCB9IGZyb20gJ2ZpcmViYXNlL2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBFbmFibGVQdXNoUmVzdWx0LFxuICBOb3RpZmljYXRpb25BY3Rpb24sXG4gIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnQsXG4gIE5vdGlmaWNhdGlvblBheWxvYWQsXG4gIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gIFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ2FsbGJhY2sgb3BjaW9uYWwgZGUgcmVnaXN0cm8gZGUgZGV2aWNlIHBhcmEgYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLlxuICpcbiAqIEVsIHJlZ2lzdHJvIGRlbCBkZXZpY2Ugdml2ZSBlbiBgQXV0aFNlcnZpY2VgIChuZWNlc2l0YSBlbCBKV1QgKyBlbCBlbmRwb2ludFxuICogZGVsIGJhY2tlbmQpLiBgTWVzc2FnaW5nU2VydmljZWAgTk8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW5cbiAqIGNyZWFyIHVuIGNpY2xvIChBdXRoU2VydmljZSDihpIgTWVzc2FnaW5nU2VydmljZSkuIFBvciBlc28gZWwgY2FsbGVyIGxlIHBhc2FcbiAqIGVsIHBhc28gZGUgcmVnaXN0cm8gY29tbyBjYWxsYmFjay4gUmVjaWJlIGVsIHRva2VuIEZDTSB5IGRldnVlbHZlIHNpIGVsXG4gKiBkZXZpY2UgcXVlZMOzIHJlZ2lzdHJhZG8uXG4gKi9cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyRGV2aWNlRm4gPSAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBPcGNpb25lcyBkZSBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogUGFzbyBvcGNpb25hbCBkZSByZWdpc3RybyBkZSBkZXZpY2UgZW4gZWwgYmFja2VuZC4gU2kgc2Ugb21pdGUsIGBlbmFibGUoKWBcbiAgICogcmVzdWVsdmUgY29uIGBzdGF0dXM6ICdlbmFibGVkJ2AgYXBlbmFzIG9idGllbmUgZWwgdG9rZW4gKHNpbiByZWdpc3RyYXIpLlxuICAgKi9cbiAgcmVnaXN0ZXJEZXZpY2U/OiBSZWdpc3RlckRldmljZUZuO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbnRlcm5vIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAqL1xuaW50ZXJmYWNlIE1lc3NhZ2luZ1N0YXRlIHtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChGQ00pLlxuICpcbiAqIFBlcm1pdGUgcmVjaWJpciBub3RpZmljYWNpb25lcyBwdXNoIGVuIGxhIGFwbGljYWNpw7NuIHdlYi5cbiAqIFJlcXVpZXJlIFZBUElEIGtleSBjb25maWd1cmFkYSBlbiBWYWx0ZWNoRmlyZWJhc2VDb25maWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gKlxuICogICB0b2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAqXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgLy8gU29saWNpdGFyIHBlcm1pc28geSBvYnRlbmVyIHRva2VuXG4gKiAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICpcbiAqICAgICBpZiAodG9rZW4pIHtcbiAqICAgICAgIHRoaXMudG9rZW4uc2V0KHRva2VuKTtcbiAqICAgICAgIC8vIEVudmlhciB0b2tlbiBhIHR1IGJhY2tlbmQgcGFyYSBhbG1hY2VuYXJsb1xuICogICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlZ2lzdGVyRGV2aWNlVG9rZW4odG9rZW4pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICogICBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2luZy5vbk1lc3NhZ2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25DbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxOb3RpZmljYXRpb25DbGlja0V2ZW50PigpO1xuICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnaW5nU3RhdGU+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBwZXJtaXNzaW9uOiAnZGVmYXVsdCcsXG4gICAgaXNTdXBwb3J0ZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25NZXNzYWdlPzogKCkgPT4gdm9pZDtcblxuICAvKiogRmxhZyBwYXJhIHBlcnNpc3RpciBtZW5zYWplcyBGQ00gZW4gbG9jYWxTdG9yYWdlIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdQZXJzaXN0ZW5jZTogYm9vbGVhbjtcbiAgLyoqIEtleSBwYXJhIGxvY2FsU3RvcmFnZSBkZSBtZW5zYWplcyBGQ00gKGRlYnVnZ2luZykgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19TVE9SQUdFX0tFWSA9ICdmY21fZGVidWdfbWVzc2FnZXMnO1xuICAvKipcbiAgICogS2V5IGRlIGxvY2FsU3RvcmFnZSBkb25kZSBzZSBwZXJzaXN0ZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEVsIHRva2VuIHZpdmUgZW4gdW4gYEJlaGF2aW9yU3ViamVjdGAgZW4gbWVtb3JpYSB5IHNlIHBpZXJkZSBlbiBjYWRhXG4gICAqIHJlY2FyZ2EgLyBzdXNwZW5zacOzbiBkZSBsYSBQV0EgKGlPUyByZWluaWNpYSBQV0FzIGNvbiBmcmVjdWVuY2lhKS4gUGVyc2lzdGlyXG4gICAqIGVsIHRva2VuIHBlcm1pdGUgaGlkcmF0YXIgZWwgZXN0YWRvIGVuIGNvbGQgc3RhcnQgeSBxdWUgbGEgVUkgbm8gcGFycGFkZWUuXG4gICAqIEVzIHVuICpvcHRpbWlzdGljIGhpbnQqIOKAlCBsYSB2ZXJkYWQgbGEgY29uZmlybWEgZWwgc2lndWllbnRlIGBnZXRUb2tlbigpYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgVE9LRU5fU1RPUkFHRV9LRVkgPSAndmFsdGVjaF9mY21fdG9rZW4nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgcGFyYSBgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgIGRlbnRybyBkZSBgZ2V0VG9rZW4oKWAuXG4gICAqXG4gICAqIEVuIHVuIGNvbGQgbG9hZCBlbCBTVyBwdWVkZSBubyBlc3RhciBhY3RpdmFkbyBhw7puIHkgYHNlcnZpY2VXb3JrZXIucmVhZHlgXG4gICAqIG5vIHJlc29sdmVyIG51bmNhLiBQYXNhZG8gZXN0ZSB0aWVtcG8sIGBnZXRUb2tlbigpYCByZWNoYXphIGxpbXBpbyBlbiBsdWdhclxuICAgKiBkZSBjb2xnYXJzZSBpbmRlZmluaWRhbWVudGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IFNXX1JFQURZX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgd2F0Y2hkb2cgZGUgYGVuYWJsZSgpYCBhbnRlcyBkZSBhdXRvLXJlY2FyZ2FyIGxhIHDDoWdpbmEuXG4gICAqXG4gICAqIEVsIGZsdWpvIGRlIGFjdGl2YWNpw7NuIGEgdmVjZXMgc2UgY3VlbGdhIEFOVEVTIGRlIGBnZXRUb2tlbigpYCDigJQgY2Fzb1xuICAgKiB0w61waWNvOiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIG5vIG11ZXN0cmEgZWwgcG9wdXAgZGVsIFNPIGVuIHVuXG4gICAqIGNvbGQgbG9hZC4gRWwgdGltZW91dCBkZSBgZ2V0VG9rZW4oKWAgKFNXX1JFQURZX1RJTUVPVVRfTVMpIG5vIGN1YnJlIGVzbztcbiAgICogcG9yIGVzbyBgZW5hYmxlKClgIGVudnVlbHZlIGVsIGZsdWpvIGNvbXBsZXRvIGVuIGVzdGUgd2F0Y2hkb2cuXG4gICAqXG4gICAqIFVuIGZsdWpvIGV4aXRvc28gcmVhbCBsbGVnYSBhIHRva2VuK2RldmljZSBlbiB+NHM7IDE1cyBlcyBob2xnYWRvIHkgbm9cbiAgICogYXRyYXBhIHVuIMOpeGl0byBsZW50by5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgRU5BQkxFX1dBVENIRE9HX01TID0gMTVfMDAwO1xuXG4gIC8qKlxuICAgKiBLZXkgZGUgc2Vzc2lvblN0b3JhZ2Ug4oCUIGdhcmFudGl6YSB1biBzb2xvIGF1dG8tcmVsb2FkIHBvciBzZXNpw7NuLiBTaSBlbFxuICAgKiBmbHVqbyBzZSBjdWVsZ2EgdW5hIDLCqiB2ZXogdHJhcyBlbCByZWxvYWQsIE5PIHNlIHJlY2FyZ2EgZGUgbnVldm8gKGFudGktbG9vcCkuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IEFVVE9SRUxPQURfRkxBRyA9ICdub3RpZi1lbmFibGUtYXV0b3JlbG9hZCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuZGVidWdQZXJzaXN0ZW5jZSA9IHRoaXMuY29uZmlnPy5kZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSA/PyBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxpemVNZXNzYWdpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBNZXNzYWdpbmcgdmlhIEZpcmViYXNlIFNESyBkaXJlY3RvIChOTyBBbmd1bGFyRmlyZSBESSkuXG4gICAqXG4gICAqICoqUG9yIHF1w6kgbm8gdXNhbW9zIGBpbmplY3Rvci5nZXQoTWVzc2FnaW5nKWA6KipcbiAgICogQW5ndWxhckZpcmUgYHByb3ZpZGVNZXNzYWdpbmdgIHJlZ2lzdHJhIHVuIEFQUF9JTklUSUFMSVpFUiBxdWUgaW50ZXJuYW1lbnRlXG4gICAqIHJlc3VlbHZlIGBhd2FpdCBpc1N1cHBvcnRlZCgpYC4gU2kgYGluamVjdG9yLmdldChNZXNzYWdpbmcpYCBzZSBsbGFtYSBhbnRlc1xuICAgKiBxdWUgZXNlIEFQUF9JTklUSUFMSVpFUiB0ZXJtaW5lIChlai4gb3Ryb3MgQVBQX0lOSVRJQUxJWkVSIGRlbCBjbGllbnRlXG4gICAqIGNvbnN0cnV5ZW4gQXV0aFNlcnZpY2Ug4oaSIE1lc3NhZ2luZ1NlcnZpY2Ug4oaSIHRvY2EgTWVzc2FnaW5nIHRlbXByYW5vKSxcbiAgICogQW5ndWxhckZpcmUgbGFuemEgZWwgZXJyb3IgXCJBUFBfSU5JVElBTElaRVIgLi4uIGhhcyBub3QgcmVzb2x2ZWRcIi4gQW5ndWxhclxuICAgKiBESSAqKmNhY2hlYSBlcnJvcmVzIGRlIGZhY3RvcnkqKiDigJQgdW5hIHZleiBxdWUgZmFsbMOzLCB0b2RvcyBsb3NcbiAgICogYGluamVjdG9yLmdldGAgc2lndWllbnRlcyByZXRvcm5hbiBlbCBtaXNtbyBlcnJvciBjYWNoZWFkby4gUmV0cnkgbG9vcHNcbiAgICogbm8gZnVuY2lvbmFuLlxuICAgKlxuICAgKiAqKldvcmthcm91bmQ6KiogYnlwYXNzIEFuZ3VsYXJGaXJlIGVudGlyZWx5IHkgdXNhciBGaXJlYmFzZSBTREsgZGlyZWN0b1xuICAgKiAoYGZpcmViYXNlL21lc3NhZ2luZy5nZXRNZXNzYWdpbmcoZ2V0QXBwKCkpYCkuIEFuZ3VsYXJGaXJlIGVzIHVuIHdyYXBwZXJcbiAgICogc29icmUgZWwgbWlzbW8gU0RLIOKAlCBsYSBpbnN0YW5jaWEgcXVlIG9idGVuZW1vcyBlcyBmdW5jaW9uYWxtZW50ZSBpZMOpbnRpY2EuXG4gICAqIGBnZXRBcHAoKWAgcmV0b3JuYSBsYSBkZWZhdWx0IEZpcmViYXNlIGFwcCBpbmljaWFsaXphZGEgcG9yXG4gICAqIGBwcm92aWRlRmlyZWJhc2VBcHAoKCkgPT4gaW5pdGlhbGl6ZUFwcChjb25maWcuZmlyZWJhc2UpKWAuIFNpIHBvciBhbGd1bmFcbiAgICogcmF6w7NuIG5vIGVzdMOhIGluaWNpYWxpemFkYSBhw7puLCBoYWNlbW9zIGluaXRpYWxpemVBcHAgaWRlbXBvdGVudGUuXG4gICAqL1xuICBwcml2YXRlIGZjbVN1cHBvcnRQcm9taXNlPzogUHJvbWlzZTxib29sZWFuPjtcblxuICBwcml2YXRlIGFzeW5jIGdldE1lc3NhZ2luZ0luc3RhbmNlKCk6IFByb21pc2U8TWVzc2FnaW5nIHwgbnVsbD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoIXRoaXMuZmNtU3VwcG9ydFByb21pc2UpIHtcbiAgICAgIHRoaXMuZmNtU3VwcG9ydFByb21pc2UgPSBmY21Jc1N1cHBvcnRlZCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZmNtSXNTdXBwb3J0ZWQgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuZmNtU3VwcG9ydFByb21pc2U7XG4gICAgaWYgKCFzdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRkNNIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwID0gZ2V0QXBwcygpLmxlbmd0aCA+IDAgPyBnZXRBcHAoKSA6IGluaXRpYWxpemVBcHAodGhpcy5jb25maWcuZmlyZWJhc2UpO1xuICAgICAgLy8gQ2FzdCBhIE1lc3NhZ2luZyAodG9rZW4gZGUgQW5ndWxhckZpcmUpIOKAlCBlbCB0aXBvIHN1YnlhY2VudGUgZGVsIFNES1xuICAgICAgLy8gZXMgZWwgbWlzbW8uIExhcyBmdW5jaW9uZXMgZ2V0VG9rZW4vZGVsZXRlVG9rZW4vb25NZXNzYWdlIGRlXG4gICAgICAvLyBAYW5ndWxhci9maXJlL21lc3NhZ2luZyBzb24gcmUtZXhwb3J0cyBkZWwgU0RLIHkgYWNlcHRhbiBlc3RhIGluc3RhbmNlLlxuICAgICAgcmV0dXJuIGZjbUdldE1lc3NhZ2luZyhhcHApIGFzIE1lc3NhZ2luZztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGZpcmViYXNlIGdldE1lc3NhZ2luZygpIHRocmV3OicsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5JQ0lBTElaQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTWVzc2FnaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhpZHJhdGFyIGVsIHRva2VuIGRlc2RlIGxvY2FsU3RvcmFnZSBBTlRFUyBkZWwgY2hlY2sgZGUgc29wb3J0ZTogZWwgdG9rZW5cbiAgICAvLyBjYWNoZWFkbyBlcyB1biBoaW50IG9wdGltaXN0YSBwYXJhIGxhIFVJIHRyYXMgcmVjYXJnYXMgLyBzdXNwZW5zaW9uZXMgZGVcbiAgICAvLyBsYSBQV0EuIExhIHZhbGlkZXogcmVhbCBzZSBjb25maXJtYSBlbiBlbCBwcsOzeGltbyBnZXRUb2tlbigpLlxuICAgIHRoaXMuaHlkcmF0ZVRva2VuRnJvbVN0b3JhZ2UoKTtcblxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2hlY2tTdXBwb3J0KCk7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG5cbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHN1cHBvcnRlZCxcbiAgICAgIHBlcm1pc3Npb24sXG4gICAgfSk7XG5cbiAgICAvLyBTaSB5YSB0aWVuZSBwZXJtaXNvLCBjb25maWd1cmFyIGxpc3RlbmVyc1xuICAgIGlmIChzdXBwb3J0ZWQgJiYgcGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyIChjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgYmFja2dyb3VuZClcbiAgICB0aGlzLnNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxpc3RlbmVyIHBhcmEgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKiBSZWNpYmUgZXZlbnRvcyBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIGJhY2tncm91bmQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50ID0+IHtcbiAgICAgIC8vIFNvbG8gcHJvY2VzYXIgbWVuc2FqZXMgZGUgbm90aWZpY2FjacOzbiBjbGljayBiaWVuIGZvcm1hZG9zLlxuICAgICAgLy8gRW4gYXBwcyBjb24gbcO6bHRpcGxlcyBTVyAoUFdBIG5nc3ctd29ya2VyICsgZmlyZWJhc2UtbWVzc2FnaW5nLXN3KSxcbiAgICAgIC8vIG8gdmFyaWFudGVzIGRlbCBwYXlsb2FkLCBgbm90aWZpY2F0aW9uYCBwdWVkZSBubyBleGlzdGlyIGF1bnF1ZVxuICAgICAgLy8gYGRhdGEudHlwZWAgY29pbmNpZGEg4oaSIGd1YXJkIGRlZmVuc2l2byBldml0YSBUeXBlRXJyb3IuXG4gICAgICBpZiAoZXZlbnQuZGF0YT8udHlwZSAhPT0gJ05PVElGSUNBVElPTl9DTElDSycpIHJldHVybjtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGV2ZW50LmRhdGEubm90aWZpY2F0aW9uIGFzIE5vdGlmaWNhdGlvblBheWxvYWQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbikgcmV0dXJuO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG8gZW4gZWwgbmF2ZWdhZG9yIGFjdHVhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1N1cHBvcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIEFQSXMgbmVjZXNhcmlhc1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBxdWUgbWVzc2FnaW5nIGVzdMOpIGRpc3BvbmlibGUgKGFzeW5jIOKAlCBlc3BlcmEgQVBQX0lOSVRJQUxJWkVSKVxuICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJNSVNPUyBZIFRPS0VOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIHkgb2J0aWVuZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBzZSBvdG9yZ8OzIHBlcm1pc28sIG51bGwgc2kgc2UgZGVuZWfDs1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAqIGlmICh0b2tlbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdUb2tlbiBGQ006JywgdG9rZW4pO1xuICAgKiAgIC8vIEVudmlhciBhIGJhY2tlbmRcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnUGVybWlzbyBkZW5lZ2FkbyBvIG5vIHNvcG9ydGFkbycpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdGQ00gbm8gZXN0w6Egc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU29saWNpdGFyIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXNcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBlcm1pc3Npb24gIT09ICdncmFudGVkJykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgZGVuZWdhZG8nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIE9idGVuZXIgdG9rZW4gRkNNXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIENvbmZpZ3VyYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNvbGljaXRhbmRvIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsdWpvIGNvbXBsZXRvIGRlIGFjdGl2YWNpw7NuIGRlIHB1c2gsIHJvYnVzdG8sIGNyb3NzLWFwcC5cbiAgICpcbiAgICogT3JxdWVzdGE6IHBlZGlyIHBlcm1pc28g4oaSIFNXIHJlYWR5IOKGkiBvYnRlbmVyIHRva2VuIEZDTSDihpIgKG9wY2lvbmFsKVxuICAgKiByZWdpc3RyYXIgZWwgZGV2aWNlIGVuIGJhY2tlbmQuIEVzIGVsIHB1bnRvIGRlIG9ycXVlc3RhY2nDs24gw7puaWNvIHF1ZSBjYWRhXG4gICAqIGFwcCBkZWwgZmFjdG9yeSBjb25zdW1lIOKAlCBsYSBsw7NnaWNhIGRlIHJvYnVzdGV6IHZpdmUgYXF1w60sIG5vIGVuIGNhZGEgcMOhZ2luYS5cbiAgICpcbiAgICogKipXYXRjaGRvZyBkZSBhdXRvLXJlbG9hZC4qKiBFbCBmbHVqbyBhIHZlY2VzIHNlIGN1ZWxnYSBBTlRFUyBkZSBgZ2V0VG9rZW4oKWBcbiAgICogKGVqLiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIHF1ZSBubyBtdWVzdHJhIGVsIHBvcHVwIGVuIHVuIGNvbGRcbiAgICogbG9hZCkg4oCUIGVsIHRpbWVvdXQgaW50ZXJubyBkZSBgZ2V0VG9rZW4oKWAgbm8gY3VicmUgZXNlIGNhc28uIFBvciBlc29cbiAgICogYGVuYWJsZSgpYCBlbnZ1ZWx2ZSBlbCBmbHVqbyBlbnRlcm8gZW4gdW4gd2F0Y2hkb2c6IHNpIG5vIGFsY2FuemEgdW4gZXN0YWRvXG4gICAqIHRlcm1pbmFsIGVuIGBFTkFCTEVfV0FUQ0hET0dfTVNgICgxNXMpOlxuICAgKiAgLSAxwqogdmV6IGVuIGxhIHNlc2nDs24g4oaSIG1hcmNhIHVuIGZsYWcgZW4gYHNlc3Npb25TdG9yYWdlYCB5IGhhY2VcbiAgICogICAgYHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKWAgKHVuIGZyZXNoIGxvYWQgc3VlbGUgdGVuZXIgZWwgU1cgYWN0aXZvKS5cbiAgICogICAgUmVzdWVsdmUgY29uIGB7IHN0YXR1czogJ3RpbWVvdXQnLCByZWxvYWRlZDogdHJ1ZSB9YC5cbiAgICogIC0geWEgc2UgYXV0by1yZWNhcmfDsyBhbnRlcyDihpIgTk8gcmVjYXJnYSAoYW50aS1sb29wKTogbGltcGlhIGVsIGZsYWcgeVxuICAgKiAgICByZXN1ZWx2ZSBjb24gYHsgc3RhdHVzOiAndGltZW91dCcsIHJlbG9hZGVkOiBmYWxzZSB9YCBwYXJhIHF1ZSBsYSBhcHBcbiAgICogICAgbXVlc3RyZSB1biBlcnJvci5cbiAgICpcbiAgICogTk8gaGFjZSB0aHJvdyDigJQgc2llbXByZSByZXN1ZWx2ZSBjb24gdW4gYEVuYWJsZVB1c2hSZXN1bHRgIGRlc2NyaXB0aXZvIHF1ZVxuICAgKiBsYSBww6FnaW5hIGNvbnN1bWlkb3JhIGluc3BlY2Npb25hIHBhcmEgZGVjaWRpciBxdcOpIHRvYXN0IG1vc3RyYXIuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLnJlZ2lzdGVyRGV2aWNlIENhbGxiYWNrIG9wY2lvbmFsIHF1ZSByZWdpc3RyYSBlbCBkZXZpY2UgZW5cbiAgICogICBlbCBiYWNrZW5kICh2aXZlIGVuIGBBdXRoU2VydmljZWAg4oCUIHNlIHBhc2EgY29tbyBjYWxsYmFjayBwYXJhIGV2aXRhciBlbFxuICAgKiAgIGNpY2xvIGRlIERJIEF1dGhTZXJ2aWNlIOKGlCBNZXNzYWdpbmdTZXJ2aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBtZXNzYWdpbmcuZW5hYmxlKHtcbiAgICogICByZWdpc3RlckRldmljZTogKHRva2VuKSA9PiBhdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICogfSk7XG4gICAqIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZW5hYmxlZCcpIHtcbiAgICogICAvLyByZXN1bHQudG9rZW4gZGlzcG9uaWJsZSDigJQgcHVzaCBhY3Rpdm9cbiAgICogfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAndGltZW91dCcgJiYgIXJlc3VsdC5yZWxvYWRlZCkge1xuICAgKiAgIC8vIG1vc3RyYXIgZXJyb3I6IGVsIGZsdWpvIHNlIGNvbGfDsyB5IHlhIHNlIGNvbnN1bWnDsyBlbCBhdXRvLXJlbG9hZFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZW5hYmxlKG9wdGlvbnM6IEVuYWJsZVB1c2hPcHRpb25zID0ge30pOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gZW5hYmxlKCkgc3RhcnQnKTtcblxuICAgIGxldCB3YXRjaGRvZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBFbCB3YXRjaGRvZyBjb3JyZSBlbiBwYXJhbGVsbyBhbCBmbHVqbyByZWFsLiBMbyBxdWUgZ2FuZSBlbCByYWNlIGRlZmluZVxuICAgIC8vIGVsIHJlc3VsdGFkby4gRWwgZmx1am8gcmVhbCwgc2kgZ2FuYSwgbGltcGlhIGVsIHdhdGNoZG9nIGVuIGVsIGBmaW5hbGx5YC5cbiAgICBjb25zdCB3YXRjaGRvZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxFbmFibGVQdXNoUmVzdWx0PihyZXNvbHZlID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuOyAvLyBTU1Ig4oCUIHNpbiB3YXRjaGRvZy5cbiAgICAgIHdhdGNoZG9nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdhdGNoZG9nID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtNZXNzYWdpbmddIGVuYWJsZSgpIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVN9bXMg4oCUIHdhdGNoZG9nYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQXV0b1JlbG9hZGVkKCkpIHtcbiAgICAgICAgICAvLyBBbnRpLWxvb3A6IHlhIHJlY2FyZ2Ftb3MgdW5hIHZleiBlc3RhIHNlc2nDs24geSB2b2x2acOzIGEgY29sZ2FyLlxuICAgICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gYXV0by1yZWxvYWQgeWEgY29uc3VtaWRvIOKAlCBubyBzZSByZWNhcmdhIGRlIG51ZXZvJyk7XG4gICAgICAgICAgdGhpcy5jbGVhckF1dG9SZWxvYWRGbGFnKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICd0aW1lb3V0JyxcbiAgICAgICAgICAgIHJlbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYXNvbjogYEZsdWpvIGRlIGFjdGl2YWNpw7NuIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVMgLyAxMDAwfXNgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDHCqiB2ZXo6IG1hcmNhciB5IHJlY2FyZ2FyLiBVbiBmcmVzaCBsb2FkIHN1ZWxlIHRlbmVyIGVsIFNXIGFjdGl2by5cbiAgICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBhdXRvLXJlY2FyZ2FuZG8gbGEgcMOhZ2luYSAoMS8xIHBvciBzZXNpw7NuKScpO1xuICAgICAgICB0aGlzLm1hcmtBdXRvUmVsb2FkZWQoKTtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3RhdHVzOiAndGltZW91dCcsXG4gICAgICAgICAgcmVsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgcmVhc29uOiAnQXV0by1yZWNhcmdhbmRvIHBhcmEgcmVpbnRlbnRhciBsYSBhY3RpdmFjacOzbicsXG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LCB0aGlzLkVOQUJMRV9XQVRDSERPR19NUyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbG93ID0gdGhpcy5ydW5FbmFibGVGbG93KG9wdGlvbnMpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHdhdGNoZG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHdhdGNoZG9nKTtcbiAgICAgICAgd2F0Y2hkb2cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtmbG93LCB3YXRjaGRvZ1Byb21pc2VdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVqbyByZWFsIGRlIGFjdGl2YWNpw7NuLCBzaW4gZWwgd2F0Y2hkb2cgKGxvIGVudnVlbHZlIGBlbmFibGUoKWApLlxuICAgKiBSZXN1ZWx2ZSBzaWVtcHJlIGNvbiB1biBgRW5hYmxlUHVzaFJlc3VsdGAg4oCUIG5vIGhhY2UgdGhyb3cuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuYWJsZUZsb3cob3B0aW9uczogRW5hYmxlUHVzaE9wdGlvbnMpOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIGVuYWJsZTogRkNNIG5vIHNvcG9ydGFkbycpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAndW5zdXBwb3J0ZWQnLCByZWFzb246ICdGQ00gbm8gc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gKHJlcXVlc3RQZXJtaXNzaW9uIGVuY2FkZW5hIGxhcyAzKS5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuXG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIC8vIHJlcXVlc3RQZXJtaXNzaW9uIGRldnVlbHZlIG51bGwgdGFudG8gcG9yIHBlcm1pc28gZGVuZWdhZG8gY29tbyBwb3JcbiAgICAgICAgLy8gZmFsbG8gYWwgb2J0ZW5lciBlbCB0b2tlbi4gRGlzdGluZ3VpbW9zIHBvciBlbCBlc3RhZG8gZGVsIHBlcm1pc28uXG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gJ2RlbmllZCcgfHwgcGVybWlzc2lvbiA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnZGVuaWVkJywgcmVhc29uOiAnUGVybWlzbyBkZSBub3RpZmljYWNpb25lcyBkZW5lZ2FkbycgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6ICdlcnJvcicsIHJlYXNvbjogJ05vIHNlIHB1ZG8gb2J0ZW5lciBlbCB0b2tlbiBGQ00nIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdHJvIGRlIGRldmljZSBlbiBiYWNrZW5kIChvcGNpb25hbCDigJQgZWwgY2FsbGVyIHBhc2EgZWwgY2FsbGJhY2spLlxuICAgICAgaWYgKG9wdGlvbnMucmVnaXN0ZXJEZXZpY2UpIHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZCA9IGF3YWl0IG9wdGlvbnMucmVnaXN0ZXJEZXZpY2UodG9rZW4pO1xuICAgICAgICBpZiAoIXJlZ2lzdGVyZWQpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICdlcnJvcicsIHRva2VuLCByZWFzb246ICdObyBzZSBwdWRvIHJlZ2lzdHJhciBlbCBkaXNwb3NpdGl2bycgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDDiXhpdG86IGVzdGFkbyB0ZXJtaW5hbC4gTGltcGlhciBlbCBmbGFnIGFudGktbG9vcCBwYXJhIGZ1dHVyb3MgaW50ZW50b3MuXG4gICAgICB0aGlzLmNsZWFyQXV0b1JlbG9hZEZsYWcoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBlbmFibGUoKSBzdWNjZXNzJyk7XG4gICAgICByZXR1cm4geyBzdGF0dXM6ICdlbmFibGVkJywgdG9rZW4gfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmVycm9yKCdbTWVzc2FnaW5nXSBlbmFibGUoKSBlcnJvcjonLCByZWFzb24sIGVycm9yKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgcmVhc29uIH07XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgc2kgeWEgc2UgYXV0by1yZWNhcmfDsyB1bmEgdmV6IGVuIGVzdGEgc2VzacOzbi4gKi9cbiAgcHJpdmF0ZSBoYXNBdXRvUmVsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuQVVUT1JFTE9BRF9GTEFHKSA9PT0gJzEnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSAobW9kbyBwcml2YWRvIGVzdHJpY3RvLCBTU1IpLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNYXJjYSBxdWUgc2UgY29uc3VtacOzIGVsIGF1dG8tcmVsb2FkIGRlIGVzdGEgc2VzacOzbi4gKi9cbiAgcHJpdmF0ZSBtYXJrQXV0b1JlbG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuQVVUT1JFTE9BRF9GTEFHLCAnMScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLyogc2Vzc2lvblN0b3JhZ2Ugbm8gZGlzcG9uaWJsZSDigJQgYmVzdC1lZmZvcnQuICovXG4gICAgfVxuICB9XG5cbiAgLyoqIExpbXBpYSBlbCBmbGFnIGFudGktbG9vcCDigJQgdHJhcyB1biDDqXhpdG8gbyB1biBmYWxsbyBkZWZpbml0aXZvLiAqL1xuICBwcml2YXRlIGNsZWFyQXV0b1JlbG9hZEZsYWcoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5BVVRPUkVMT0FEX0ZMQUcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLyogc2Vzc2lvblN0b3JhZ2Ugbm8gZGlzcG9uaWJsZSDigJQgbmFkYSBxdWUgbGltcGlhci4gKi9cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBGQ00gYWN0dWFsIChzaW4gc29saWNpdGFyIHBlcm1pc28pLlxuICAgKlxuICAgKiBAcmV0dXJucyBUb2tlbiBGQ00gc2kgZXN0w6EgZGlzcG9uaWJsZSwgbnVsbCBzaSBub1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIGdldFRva2VuKCkgc3RhcnQnKTtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZ2V0VG9rZW4gYWJvcnRlZDogbm8gTWVzc2FnaW5nIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YXBpZEtleSA9IHRoaXMuY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5O1xuICAgIGlmICghdmFwaWRLZXkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tNZXNzYWdpbmddIFZBUElEIGtleSBubyBjb25maWd1cmFkYSAoY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5KS4gRkNNIG5vIGZ1bmNpb25hcsOhLidcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmV1dGlsaXphciBlbCBTVyB5YSByZWdpc3RyYWRvIChlbiBjb25maWcudHMgZHVyYW50ZSBlbCBib290c3RyYXApIGVuXG4gICAgICAvLyBsdWdhciBkZSByZS1yZWdpc3RyYXJsbyBlbiBjYWRhIGxsYW1hZGEg4oCUIHJlLXJlZ2lzdHJhciBkaXNwYXJhXG4gICAgICAvLyByZXZhbGlkYWNpb25lcyBkZWwgU1cgZW4gaU9TIFBXQS4gU29sbyByZWdpc3RyYW1vcyBzaSBubyBleGlzdGUgYcO6bi5cbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IHRoaXMucmVzb2x2ZVNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24oKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBTVyByZXNvbHZlZCwgd2FpdGluZyByZWFkeS4uLicpO1xuICAgICAgLy8gRXNwZXJhciBhIHF1ZSBlbCBTVyBlc3TDqSBhY3Rpdm8sIGNvbiB0aW1lb3V0OiBgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgXG4gICAgICAvLyBwdWVkZSBubyByZXNvbHZlciBOVU5DQSBlbiB1biBjb2xkIGxvYWQgKFNXIGHDum4gbm8gYWN0aXZhZG8pIOKGkiBzaW4gZWxcbiAgICAgIC8vIHRpbWVvdXQgYGdldFRva2VuKClgIHNlIGN1ZWxnYSBpbmRlZmluaWRhbWVudGUuIENvbiBlbCByYWNlLCBzaSBlbCBTVyBub1xuICAgICAgLy8gcXVlZGEgbGlzdG8gZW4gU1dfUkVBRFlfVElNRU9VVF9NUywgZXN0YSBwcm9tZXNhIHJlY2hhemEgbGltcGlvLlxuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yU2VydmljZVdvcmtlclJlYWR5KCk7XG4gICAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gU1cgcmVhZHksIGNhbGxpbmcgRmlyZWJhc2UgZ2V0VG9rZW4oKS4uLicpO1xuXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKG1lc3NhZ2luZywge1xuICAgICAgICB2YXBpZEtleSxcbiAgICAgICAgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbjogcmVnaXN0cmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnW01lc3NhZ2luZ10gRmlyZWJhc2UgZ2V0VG9rZW4gcmV0dXJuZWQ6JyxcbiAgICAgICAgdG9rZW4gPyBgJHt0b2tlbi5zbGljZSgwLCAxNil94oCmYCA6ICdudWxsL2VtcHR5J1xuICAgICAgKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICB0b2tlbixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQZXJzaXN0aXIgZWwgdG9rZW4gcGFyYSBoaWRyYXRhciBlbCBlc3RhZG8gZW4gZnV0dXJvcyBjb2xkIHN0YXJ0cy5cbiAgICAgIHRoaXMucGVyc2lzdFRva2VuKHRva2VuKTtcblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyB0cmFnYW1vcyBsYSBjYXVzYTogbG9ndWVhbW9zIGVsIGRldGFsbGUgcGFyYSBkaWFnbsOzc3RpY28uIExhIGZpcm1hXG4gICAgICAvLyBzaWd1ZSBzaWVuZG8gUHJvbWlzZTxzdHJpbmcgfCBudWxsPiBwYXJhIG5vIHJvbXBlciBjYWxsZXJzLlxuICAgICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmVycm9yKCdbTWVzc2FnaW5nXSBnZXRUb2tlbiBlcnJvcjonLCByZWFzb24sIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1ZWx2ZSBlbCBgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbmAgZGVsIFNXIGRlIEZDTS5cbiAgICpcbiAgICogRWwgU1cgYC9maXJlYmFzZS1tZXNzYWdpbmctc3cuanNgIHlhIHNlIHJlZ2lzdHJhIHVuYSB2ZXogZW4gZWwgYm9vdHN0cmFwIGRlXG4gICAqIGxhIGFwcCAoYGNvbmZpZy50c2ApLiBSZXV0aWxpemFtb3MgZXNlIHJlZ2lzdHJvIGVuIGx1Z2FyIGRlIHJlLXJlZ2lzdHJhcmxvXG4gICAqIGVuIGNhZGEgYGdldFRva2VuKClgIOKAlCByZS1yZWdpc3RyYXIgcmVwZXRpZGFtZW50ZSBkaXNwYXJhIHJldmFsaWRhY2lvbmVzIGRlbFxuICAgKiBTVyBlbiBpT1MgUFdBLiBTb2xvIHJlZ2lzdHJhbW9zIGNvbW8gZmFsbGJhY2sgc2kgdG9kYXbDrWEgbm8gZXhpc3RlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigpOiBQcm9taXNlPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmdldFJlZ2lzdHJhdGlvbignL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcycpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIFNXIG5vdCByZWdpc3RlcmVkIHlldCwgcmVnaXN0ZXJpbmcgYXMgZmFsbGJhY2snKTtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9maXJlYmFzZS1tZXNzYWdpbmctc3cuanMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3BlcmEgYSBxdWUgZWwgU2VydmljZSBXb3JrZXIgcXVlZGUgYWN0aXZvIChgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgKVxuICAgKiBwZXJvIGNvbiB1biB0aW1lb3V0IGR1cm8uXG4gICAqXG4gICAqIGBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeWAgcmVzdWVsdmUgY3VhbmRvIGhheSB1biBTVyAqYWN0aXZvKi4gRW4gdW5cbiAgICogY29sZCBsb2FkIChwcmltZXJhIHZpc2l0YSwgU1cgcmVjacOpbiByZWdpc3RyYWRvLCBpT1MgUFdBIHJlY2nDqW4gYWJpZXJ0YSkgZWxcbiAgICogU1cgcHVlZGUgcXVlZGFyIGVuIGVzdGFkbyBgaW5zdGFsbGluZ2AvYHdhaXRpbmdgIHkgYHJlYWR5YCBubyByZXNvbHZlciBudW5jYVxuICAgKiDihpIgYGdldFRva2VuKClgIHNlIGN1ZWxnYS4gRWwgYFByb21pc2UucmFjZWAgY29udHJhIHVuIGBzZXRUaW1lb3V0YCBnYXJhbnRpemFcbiAgICogcXVlIGVzdGEgZXNwZXJhIHRlcm1pbmE6IG8gZ2FuYSBgcmVhZHlgIChjYXNvIG5vcm1hbCkgbyBnYW5hIGVsIHRpbWVvdXQgeVxuICAgKiBsYW56YW1vcyB1biBlcnJvciBjbGFybyBwYXJhIHF1ZSBgZ2V0VG9rZW4oKWAgcmVjaGFjZSBlbiB2ZXogZGUgY29sZ2Fyc2UuXG4gICAqXG4gICAqIEVsIHRpbWVyIHNlIGxpbXBpYSBlbiBhbWJhcyByYW1hcyBwYXJhIG5vIGRlamFyIHRpbWVycyBjb2xnYW5kby5cbiAgICovXG4gIHByaXZhdGUgd2FpdEZvclNlcnZpY2VXb3JrZXJSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVhZHkgPSBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aW1lciAhPT0gdW5kZWZpbmVkKSBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFtNZXNzYWdpbmddIHNlcnZpY2Ugd29ya2VyIG5vIHF1ZWTDsyBsaXN0byBlbiAke3RoaXMuU1dfUkVBRFlfVElNRU9VVF9NUyAvIDEwMDB9c2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9LCB0aGlzLlNXX1JFQURZX1RJTUVPVVRfTVMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbcmVhZHksIHRpbWVvdXRdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmICh0aW1lciAhPT0gdW5kZWZpbmVkKSBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RlIGVsIHRva2VuIEZDTSBlbiBsb2NhbFN0b3JhZ2UgKG8gbG8gbGltcGlhIHNpIGVzIG51bGwvZW1wdHkpLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0VG9rZW4odG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVksIHRva2VuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gdG9rZW4gcGVyc2lzdGVuY2UgZmFpbGVkOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRyYXRhIGVsIGVzdGFkbyBkZWwgdG9rZW4gZGVzZGUgbG9jYWxTdG9yYWdlIGVuIGVsIGFycmFucXVlIGRlbCBzZXJ2aWNpby5cbiAgICovXG4gIHByaXZhdGUgaHlkcmF0ZVRva2VuRnJvbVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICB0aGlzLnNldFRva2VuRnJvbVN0b3JhZ2UoY2FjaGVkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIHRva2VuIGh5ZHJhdGlvbiBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgdG9rZW4gRkNNIGFjdHVhbCAodW5zdWJzY3JpYmUgZGUgbm90aWZpY2FjaW9uZXMpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IG1lc3NhZ2luZy5kZWxldGVUb2tlbigpO1xuICAgKiBjb25zb2xlLmxvZygnVG9rZW4gZWxpbWluYWRvLCBubyByZWNpYmlyw6EgbcOhcyBub3RpZmljYWNpb25lcycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVUb2tlbihtZXNzYWdpbmcpO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExpbXBpYXIgZWwgdG9rZW4gcGVyc2lzdGlkbyDigJQgeWEgbm8gZXN0YW1vcyBzdXNjcml0b3MuXG4gICAgICB0aGlzLnBlcnNpc3RUb2tlbihudWxsKTtcblxuICAgICAgLy8gTGltcGlhciBsaXN0ZW5lciBkZSBtZW5zYWplc1xuICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlbGltaW5hbmRvIHRva2VuIEZDTTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gZWxpbWluYXIgZWwgdG9rZW4gZGUgbm90aWZpY2FjaW9uZXMnKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUVOU0FKRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgbWVuc2FqZXMgcmVjaWJpZG9zIGVuIGZvcmVncm91bmQuXG4gICAqXG4gICAqIElNUE9SVEFOVEU6IExvcyBtZW5zYWplcyBlbiBiYWNrZ3JvdW5kIHNvbiBtYW5lamFkb3MgcG9yIGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBjdWFuZG8gbGxlZ2EgdW4gbWVuc2FqZSBlbiBmb3JlZ3JvdW5kXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbWVzc2FnaW5nLm9uTWVzc2FnZSgpLnN1YnNjcmliZShwYXlsb2FkID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnTWVuc2FqZSByZWNpYmlkbzonLCBwYXlsb2FkKTtcbiAgICogICAvLyBNb3N0cmFyIG5vdGlmaWNhY2nDs24gY3VzdG9tIG8gYWN0dWFsaXphciBVSVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBvbk1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25QYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGVsIGxpc3RlbmVyIGRlIG1lbnNhamVzIGVuIGZvcmVncm91bmRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2V0dXBNZXNzYWdlTGlzdGVuZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nIHx8IHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlID0gb25NZXNzYWdlKG1lc3NhZ2luZywgcGF5bG9hZCA9PiB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblBheWxvYWQgPSB7XG4gICAgICAgIHRpdGxlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8udGl0bGUsXG4gICAgICAgIGJvZHk6IHBheWxvYWQubm90aWZpY2F0aW9uPy5ib2R5LFxuICAgICAgICBpbWFnZTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmltYWdlLFxuICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgICAgbWVzc2FnZUlkOiBwYXlsb2FkLm1lc3NhZ2VJZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubWVzc2FnZVN1YmplY3QubmV4dChub3RpZmljYXRpb24pO1xuXG4gICAgICAvLyBQZXJzaXN0aXIgZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nIHNpIGVzdMOhIGhhYmlsaXRhZG9cbiAgICAgIGlmICh0aGlzLmRlYnVnUGVyc2lzdGVuY2UpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0TWVzc2FnZUZvckRlYnVnKG5vdGlmaWNhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgdW4gbWVuc2FqZSBGQ00gZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nLlxuICAgKiBTb2xvIHNlIHVzYSBjdWFuZG8gZGVidWdNZXNzYWdlUGVyc2lzdGVuY2UgZXN0w6EgaGFiaWxpdGFkby5cbiAgICogTWFudGllbmUgbG9zIMO6bHRpbW9zIDUwIG1lbnNhamVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0TWVzc2FnZUZvckRlYnVnKG1lc3NhZ2U6IE5vdGlmaWNhdGlvblBheWxvYWQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSk7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuICAgICAgbWVzc2FnZXMudW5zaGlmdCh7IC4uLm1lc3NhZ2UsIHJlY2VpdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICAgIC8vIE1hbnRlbmVyIHNvbG8gw7psdGltb3MgNTBcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuREVCVUdfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLnNsaWNlKDAsIDUwKSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRGVidWcgcGVyc2lzdGVuY2UgZmFpbGVkOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gWSBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBhY3R1YWwgZGVsIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGVybWlzc2lvbiA9IG1lc3NhZ2luZy5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcbiAgICogaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xuICAgKiAgIC8vIFlhIHRpZW5lIHBlcm1pc29cbiAgICogfSBlbHNlIGlmIChwZXJtaXNzaW9uID09PSAnZGVmYXVsdCcpIHtcbiAgICogICAvLyBQdWVkZSBzb2xpY2l0YXIgcGVybWlzb1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIERlbmVnYWRvLCBkZWJlIGhhYmlsaXRhciBtYW51YWxtZW50ZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb24ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9XG5cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSB7XG4gICAgICByZXR1cm4gJ2RlbmllZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgRkNNIGVzdMOhIHNvcG9ydGFkbyBlbiBlbCBuYXZlZ2Fkb3IgYWN0dWFsLlxuICAgKiBVc2EgbMOzZ2ljYSBpbnRlbGlnZW50ZSBwYXJhIGV2aXRhciBmYWxzb3MgbmVnYXRpdm9zIHBvciB0aW1pbmcgZGVsIEluamVjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpZiAoYXdhaXQgbWVzc2FnaW5nLmlzU3VwcG9ydGVkKCkpIHtcbiAgICogICAvLyBQdWVkZSB1c2FyIG5vdGlmaWNhY2lvbmVzIHB1c2hcbiAgICogfSBlbHNlIHtcbiAgICogICAvLyBOYXZlZ2Fkb3Igbm8gc29wb3J0YSBvIG5vIHRpZW5lIFNlcnZpY2UgV29ya2VyXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBpc1N1cHBvcnRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTaSB5YSB0ZW5lbW9zIHRva2VuIGVuIGVzdGFkbywgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICBpZiAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUudG9rZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNpIHlhIGNhbGN1bGFtb3Mgc29wb3J0ZSBleGl0b3NhbWVudGUsIHVzYXJsb1xuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FjaW9uZXMgYsOhc2ljYXMg4oCUIEFQSXMgZGVsIGJyb3dzZXJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCEoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaU9TIOKAlCBzb2xvIHNvcG9ydGEgcHVzaCB3ZWIgY3VhbmRvIGxhIFBXQSBlc3TDoSBpbnN0YWxhZGEgZW4gaG9tZSBzY3JlZW5cbiAgICAvLyAoaU9TIDE2LjQrKS4gRWRnZS9DaHJvbWUvRmlyZWZveCBlbiBpT1MgY29tcGFydGVuIGVzdGEgbGltaXRhY2nDs24gcG9ycXVlXG4gICAgLy8gZXN0w6FuIG9ibGlnYWRvcyBhIHVzYXIgV2ViS2l0LiBSZXRvcm5hbW9zIGZhbHNlIGFxdcOtIHBhcmEgcXVlIGxhIFVJIG11ZXN0cmVcbiAgICAvLyBlbCBmbHVqbyBcImluc3RhbGEgbGEgYXBwXCIgZW4gbHVnYXIgZGUgdW4gQ1RBIHF1ZSB2YSBhIGZhbGxhci5cbiAgICBpZiAodGhpcy5pc0lPU1dpdGhvdXRTdGFuZGFsb25lKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOT1RBOiBkZWxpYmVyYWRhbWVudGUgTk8gY2hlcXVlYW1vcyBgZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKWAgYXF1w60gcG9ycXVlXG4gICAgLy8gZWwgZmFjdG9yeSBgcHJvdmlkZU1lc3NhZ2luZygoKSA9PiBnZXRNZXNzYWdpbmcoKSlgIGVzIGxhenkgZW4gQW5ndWxhclxuICAgIC8vIEZpcmUgeSBwdWVkZSBubyBlc3RhciByZXN1ZWx0byBjdWFuZG8gZXN0YSBmdW5jacOzbiBzZSBsbGFtYSB0ZW1wcmFub1xuICAgIC8vIGVuIGVsIGNpY2xvIGRlIHZpZGEuIEVzbyBjYXVzYWJhIGZhbHNvcyBuZWdhdGl2b3MuIFNpIEZDTSByZWFsbWVudGUgbm9cbiAgICAvLyBlc3TDoSBkaXNwb25pYmxlIChwcm95ZWN0byBzaW4gTWVzc2FnaW5nIGhhYmlsaXRhZG8sIFZBUElEIGludsOhbGlkbyksIGVsXG4gICAgLy8gZmxvdyBkb3duc3RyZWFtIChgZ2V0VG9rZW5gL2ByZXF1ZXN0UGVybWlzc2lvbmApIGZhbGxhcsOhIGNvbiBlcnJvciByZWFsLFxuICAgIC8vIHF1ZSBlcyBtZWpvciBVWCBxdWUgdW4gXCJubyBzb3BvcnRhZG9cIiBwcmVtYXR1cm8uXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogaU9TIHNpbiBlc3RhciBpbnN0YWxhZG8gY29tbyBQV0Egc3RhbmRhbG9uZSDigJQgcHVzaCB3ZWIgbm8gZGlzcG9uaWJsZS5cbiAgICogQXBsaWNhIGEgU2FmYXJpIHkgYSBFZGdlL0Nocm9tZS9GaXJlZm94IGVuIGlPUyAodG9kb3MgV2ViS2l0IHBvciBtYW5kYXRvIEFwcGxlKS5cbiAgICovXG4gIHByaXZhdGUgaXNJT1NXaXRob3V0U3RhbmRhbG9uZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB1YSA9IChuYXZpZ2F0b3IgYXMgTmF2aWdhdG9yKS51c2VyQWdlbnQgfHwgJyc7XG4gICAgY29uc3QgaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1YSk7XG4gICAgaWYgKCFpc0lPUykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGlzU3RhbmRhbG9uZSA9XG4gICAgICB3aW5kb3cubWF0Y2hNZWRpYT8uKCcoZGlzcGxheS1tb2RlOiBzdGFuZGFsb25lKScpLm1hdGNoZXMgfHxcbiAgICAgIChuYXZpZ2F0b3IgYXMgdW5rbm93biBhcyB7IHN0YW5kYWxvbmU/OiBib29sZWFuIH0pLnN0YW5kYWxvbmUgPT09IHRydWU7XG4gICAgcmV0dXJuICFpc1N0YW5kYWxvbmU7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBhY3R1YWwgc2luIGhhY2VyIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIGFsbWFjZW5hZG8gbyBudWxsXG4gICAqL1xuICBnZXQgY3VycmVudFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlbCBlc3RhZG8gY29tcGxldG8gZGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZy5cbiAgICovXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxNZXNzYWdpbmdTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHlhIG90b3Jnw7MgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICovXG4gIGdldCBoYXNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5wZXJtaXNzaW9uID09PSAnZ3JhbnRlZCc7XG4gIH1cblxuICAvKipcbiAgICogSGlkcmF0YSBlbCBlc3RhZG8gZGVsIHRva2VuIGRlc2RlIHVuIHZhbG9yIGV4dGVybm8gKGVqOiBsb2NhbFN0b3JhZ2UpLlxuICAgKiDDmnRpbCBjdWFuZG8gZWwgdG9rZW4geWEgZXhpc3RlIHBlcm8gZWwgTWVzc2FnaW5nU2VydmljZSBubyBsbyB0aWVuZSBlbiBtZW1vcmlhLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gVG9rZW4gRkNNIGEgc2V0ZWFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3RvcmVkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmNtX3Rva2VuJyk7XG4gICAqIGlmIChzdG9yZWRUb2tlbikge1xuICAgKiAgIG1lc3NhZ2luZy5zZXRUb2tlbkZyb21TdG9yYWdlKHN0b3JlZFRva2VuKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNldFRva2VuRnJvbVN0b3JhZ2UodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICB0b2tlbixcbiAgICAgIGlzU3VwcG9ydGVkOiB0cnVlLCAvLyBTaSBoYXkgdG9rZW4sIGNsYXJhbWVudGUgRkNNIGZ1bmNpb25hXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gREVFUCBMSU5LSU5HIC8gTkFWRUdBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBFbWl0ZSBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIChmb3JlZ3JvdW5kIG8gYmFja2dyb3VuZCkuXG4gICAqIFVzYSBlc3RlIG9ic2VydmFibGUgcGFyYSBuYXZlZ2FyIGEgbGEgcMOhZ2luYSBjb3JyZXNwb25kaWVudGUuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBAQ29tcG9uZW50KHsuLi59KVxuICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICogICBwcml2YXRlIG1lc3NhZ2luZyA9IGluamVjdChNZXNzYWdpbmdTZXJ2aWNlKTtcbiAgICogICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgKlxuICAgKiAgIGNvbnN0cnVjdG9yKCkge1xuICAgKiAgICAgdGhpcy5tZXNzYWdpbmcub25Ob3RpZmljYXRpb25DbGljaygpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAqICAgICAgIGlmIChldmVudC5hY3Rpb24ucm91dGUpIHtcbiAgICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZXZlbnQuYWN0aW9uLnJvdXRlXSwge1xuICAgKiAgICAgICAgICAgcXVlcnlQYXJhbXM6IGV2ZW50LmFjdGlvbi5xdWVyeVBhcmFtc1xuICAgKiAgICAgICAgIH0pO1xuICAgKiAgICAgICB9XG4gICAqICAgICB9KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBvbk5vdGlmaWNhdGlvbkNsaWNrKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uQ2xpY2tFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNsaWNrU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWUgbGEgYWNjacOzbiBkZSBuYXZlZ2FjacOzbiBkZSBsb3MgZGF0b3MgZGUgdW5hIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEJ1c2NhIGNhbXBvcyBlc3BlY8OtZmljb3MgZW4gZWwgcGF5bG9hZCBkZSBkYXRvczpcbiAgICogLSBgcm91dGVgOiBSdXRhIGludGVybmEgZGUgbGEgYXBwIChlajogJy9vcmRlcnMvMTIzJylcbiAgICogLSBgdXJsYDogVVJMIGV4dGVybmEgKGVqOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG4gICAqIC0gYGFjdGlvbl90eXBlYDogVGlwbyBkZSBhY2Npw7NuIHBlcnNvbmFsaXphZGFcbiAgICogLSBDYW1wb3MgY29uIHByZWZpam8gYGFjdGlvbl9gOiBEYXRvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBwYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICogQHJldHVybnMgQWNjacOzbiBkZSBuYXZlZ2FjacOzbiBleHRyYcOtZGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQYXlsb2FkIGRlc2RlIGVsIGJhY2tlbmQ6XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvbl90eXBlOiAndmlld19vcmRlcicsIGFjdGlvbl9vcmRlcklkOiAnMTIzJyB9XG4gICAqXG4gICAqIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2luZy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuICAgKiAvLyB7IHJvdXRlOiAnL29yZGVycy8xMjMnLCBhY3Rpb25UeXBlOiAndmlld19vcmRlcicsIGFjdGlvbkRhdGE6IHsgb3JkZXJJZDogJzEyMycgfSB9XG4gICAqIGBgYFxuICAgKi9cbiAgZXh0cmFjdEFjdGlvbkZyb21EYXRhKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb246IE5vdGlmaWNhdGlvbkFjdGlvbiA9IHt9O1xuXG4gICAgLy8gUnV0YSBpbnRlcm5hXG4gICAgaWYgKGRhdGFbJ3JvdXRlJ10pIHtcbiAgICAgIGFjdGlvbi5yb3V0ZSA9IGRhdGFbJ3JvdXRlJ107XG4gICAgfVxuXG4gICAgLy8gVVJMIGV4dGVybmFcbiAgICBpZiAoZGF0YVsndXJsJ10pIHtcbiAgICAgIGFjdGlvbi51cmwgPSBkYXRhWyd1cmwnXTtcbiAgICB9XG5cbiAgICAvLyBUaXBvIGRlIGFjY2nDs25cbiAgICBpZiAoZGF0YVsnYWN0aW9uX3R5cGUnXSkge1xuICAgICAgYWN0aW9uLmFjdGlvblR5cGUgPSBkYXRhWydhY3Rpb25fdHlwZSddO1xuICAgIH1cblxuICAgIC8vIFF1ZXJ5IHBhcmFtcyAocHVlZGUgdmVuaXIgY29tbyBKU09OIHN0cmluZylcbiAgICBpZiAoZGF0YVsncXVlcnlfcGFyYW1zJ10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IEpTT04ucGFyc2UoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpIG5vIGVzIEpTT04gdsOhbGlkbywgaW50ZW50YXIgcGFyc2VhciBjb21vIGtleT12YWx1ZVxuICAgICAgICBhY3Rpb24ucXVlcnlQYXJhbXMgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERhdG9zIGFkaWNpb25hbGVzIGNvbiBwcmVmaWpvIGFjdGlvbl9cbiAgICBjb25zdCBhY3Rpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2FjdGlvbl8nKSAmJiBrZXkgIT09ICdhY3Rpb25fdHlwZScpIHtcbiAgICAgICAgY29uc3QgY2xlYW5LZXkgPSBrZXkucmVwbGFjZSgnYWN0aW9uXycsICcnKTtcbiAgICAgICAgLy8gSW50ZW50YXIgcGFyc2VhciBKU09OIHNpIGVzIHBvc2libGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFjdGlvbkRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGlvbi5hY3Rpb25EYXRhID0gYWN0aW9uRGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRlIG1hbnVhbG1lbnRlIHVuIGV2ZW50byBkZSBjbGljayBlbiBub3RpZmljYWNpw7NuLlxuICAgKlxuICAgKiDDmnRpbCBwYXJhIG1hbmVqYXIgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzIGZvcmVncm91bmQgZG9uZGVcbiAgICogbGEgYXBwIGRlY2lkZSBtb3N0cmFyIHVuIGJhbm5lciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBQYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKG5vdGlmaWNhdGlvbiA9PiB7XG4gICAqICAgLy8gTW9zdHJhciBiYW5uZXIgY3VzdG9tXG4gICAqICAgdGhpcy5zaG93QmFubmVyKG5vdGlmaWNhdGlvbiwgKCkgPT4ge1xuICAgKiAgICAgLy8gVXN1YXJpbyBoaXpvIGNsaWNrIGVuIGVsIGJhbm5lclxuICAgKiAgICAgbWVzc2FnaW5nLmhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbik7XG4gICAqICAgfSk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuYSBub3RpZmljYWNpw7NuIHRpZW5lIGFjY2nDs24gZGUgbmF2ZWdhY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWRcbiAgICogQHJldHVybnMgdHJ1ZSBzaSB0aWVuZSByb3V0ZSBvIHVybFxuICAgKi9cbiAgaGFzTmF2aWdhdGlvbkFjdGlvbihkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGlmICghZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIShkYXRhWydyb3V0ZSddIHx8IGRhdGFbJ3VybCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZWEgdW4gcXVlcnkgc3RyaW5nIGVuIHVuIG9iamV0by5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xuXG4gICAgLy8gUmVtb3ZlciA/IGluaWNpYWwgc2kgZXhpc3RlXG4gICAgY29uc3QgY2xlYW5RdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoJz8nKSA/IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpIDogcXVlcnlTdHJpbmc7XG5cbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgY2xlYW5RdWVyeS5zcGxpdCgnJicpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQoa2V5KV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cbiJdfQ==
|
|
930
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFhLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsSUFBSSxjQUFjLEVBQUUsWUFBWSxJQUFJLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBeUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBcUQzQixZQUNVLFFBQWtCLEVBQ2UsTUFBNkIsRUFDekMsVUFBa0IsRUFDdkMsTUFBYztRQUhkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZSxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4RGhCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFDcEQsNkJBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFDakUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FB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a0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQXg5QlUsZ0JBQWdCLDBDQXVEakIsdUJBQXVCLGFBQ3ZCLFdBQVc7bUhBeERWLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF3RDdCLE1BQU07MkJBQUMsdUJBQXVCOzswQkFDOUIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXNzYWdpbmcgU2VydmljZSAoRkNNKVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChQdXNoIE5vdGlmaWNhdGlvbnMpLlxuICogUGVybWl0ZSBzb2xpY2l0YXIgcGVybWlzb3MsIG9idGVuZXIgdG9rZW5zLCBlc2N1Y2hhciBtZW5zYWplcyB5IG1hbmVqYXJcbiAqIG5hdmVnYWNpw7NuIChkZWVwIGxpbmtpbmcpIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgdW5hIG5vdGlmaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nLCBnZXRUb2tlbiwgZGVsZXRlVG9rZW4sIG9uTWVzc2FnZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGlzU3VwcG9ydGVkIGFzIGZjbUlzU3VwcG9ydGVkLCBnZXRNZXNzYWdpbmcgYXMgZmNtR2V0TWVzc2FnaW5nIH0gZnJvbSAnZmlyZWJhc2UvbWVzc2FnaW5nJztcbmltcG9ydCB7IGdldEFwcCwgZ2V0QXBwcywgaW5pdGlhbGl6ZUFwcCB9IGZyb20gJ2ZpcmViYXNlL2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBFbmFibGVQdXNoUmVzdWx0LFxuICBOb3RpZmljYXRpb25BY3Rpb24sXG4gIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnQsXG4gIE5vdGlmaWNhdGlvblBheWxvYWQsXG4gIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gIFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ2FsbGJhY2sgb3BjaW9uYWwgZGUgcmVnaXN0cm8gZGUgZGV2aWNlIHBhcmEgYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLlxuICpcbiAqIEVsIHJlZ2lzdHJvIGRlbCBkZXZpY2Ugdml2ZSBlbiBgQXV0aFNlcnZpY2VgIChuZWNlc2l0YSBlbCBKV1QgKyBlbCBlbmRwb2ludFxuICogZGVsIGJhY2tlbmQpLiBgTWVzc2FnaW5nU2VydmljZWAgTk8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW5cbiAqIGNyZWFyIHVuIGNpY2xvIChBdXRoU2VydmljZSDihpIgTWVzc2FnaW5nU2VydmljZSkuIFBvciBlc28gZWwgY2FsbGVyIGxlIHBhc2FcbiAqIGVsIHBhc28gZGUgcmVnaXN0cm8gY29tbyBjYWxsYmFjay4gUmVjaWJlIGVsIHRva2VuIEZDTSB5IGRldnVlbHZlIHNpIGVsXG4gKiBkZXZpY2UgcXVlZMOzIHJlZ2lzdHJhZG8uXG4gKi9cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyRGV2aWNlRm4gPSAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBPcGNpb25lcyBkZSBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogUGFzbyBvcGNpb25hbCBkZSByZWdpc3RybyBkZSBkZXZpY2UgZW4gZWwgYmFja2VuZC4gU2kgc2Ugb21pdGUsIGBlbmFibGUoKWBcbiAgICogcmVzdWVsdmUgY29uIGBzdGF0dXM6ICdlbmFibGVkJ2AgYXBlbmFzIG9idGllbmUgZWwgdG9rZW4gKHNpbiByZWdpc3RyYXIpLlxuICAgKi9cbiAgcmVnaXN0ZXJEZXZpY2U/OiBSZWdpc3RlckRldmljZUZuO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbnRlcm5vIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAqL1xuaW50ZXJmYWNlIE1lc3NhZ2luZ1N0YXRlIHtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChGQ00pLlxuICpcbiAqIFBlcm1pdGUgcmVjaWJpciBub3RpZmljYWNpb25lcyBwdXNoIGVuIGxhIGFwbGljYWNpw7NuIHdlYi5cbiAqIFJlcXVpZXJlIFZBUElEIGtleSBjb25maWd1cmFkYSBlbiBWYWx0ZWNoRmlyZWJhc2VDb25maWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gKlxuICogICB0b2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAqXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgLy8gU29saWNpdGFyIHBlcm1pc28geSBvYnRlbmVyIHRva2VuXG4gKiAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICpcbiAqICAgICBpZiAodG9rZW4pIHtcbiAqICAgICAgIHRoaXMudG9rZW4uc2V0KHRva2VuKTtcbiAqICAgICAgIC8vIEVudmlhciB0b2tlbiBhIHR1IGJhY2tlbmQgcGFyYSBhbG1hY2VuYXJsb1xuICogICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlZ2lzdGVyRGV2aWNlVG9rZW4odG9rZW4pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICogICBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2luZy5vbk1lc3NhZ2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25DbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxOb3RpZmljYXRpb25DbGlja0V2ZW50PigpO1xuICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnaW5nU3RhdGU+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBwZXJtaXNzaW9uOiAnZGVmYXVsdCcsXG4gICAgaXNTdXBwb3J0ZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25NZXNzYWdlPzogKCkgPT4gdm9pZDtcblxuICAvKiogRmxhZyBwYXJhIHBlcnNpc3RpciBtZW5zYWplcyBGQ00gZW4gbG9jYWxTdG9yYWdlIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdQZXJzaXN0ZW5jZTogYm9vbGVhbjtcbiAgLyoqIEtleSBwYXJhIGxvY2FsU3RvcmFnZSBkZSBtZW5zYWplcyBGQ00gKGRlYnVnZ2luZykgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19TVE9SQUdFX0tFWSA9ICdmY21fZGVidWdfbWVzc2FnZXMnO1xuICAvKipcbiAgICogS2V5IGRlIGxvY2FsU3RvcmFnZSBkb25kZSBzZSBwZXJzaXN0ZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEVsIHRva2VuIHZpdmUgZW4gdW4gYEJlaGF2aW9yU3ViamVjdGAgZW4gbWVtb3JpYSB5IHNlIHBpZXJkZSBlbiBjYWRhXG4gICAqIHJlY2FyZ2EgLyBzdXNwZW5zacOzbiBkZSBsYSBQV0EgKGlPUyByZWluaWNpYSBQV0FzIGNvbiBmcmVjdWVuY2lhKS4gUGVyc2lzdGlyXG4gICAqIGVsIHRva2VuIHBlcm1pdGUgaGlkcmF0YXIgZWwgZXN0YWRvIGVuIGNvbGQgc3RhcnQgeSBxdWUgbGEgVUkgbm8gcGFycGFkZWUuXG4gICAqIEVzIHVuICpvcHRpbWlzdGljIGhpbnQqIOKAlCBsYSB2ZXJkYWQgbGEgY29uZmlybWEgZWwgc2lndWllbnRlIGBnZXRUb2tlbigpYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgVE9LRU5fU1RPUkFHRV9LRVkgPSAndmFsdGVjaF9mY21fdG9rZW4nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgcGFyYSBgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgIGRlbnRybyBkZSBgZ2V0VG9rZW4oKWAuXG4gICAqXG4gICAqIEVuIHVuIGNvbGQgbG9hZCBlbCBTVyBwdWVkZSBubyBlc3RhciBhY3RpdmFkbyBhw7puIHkgYHNlcnZpY2VXb3JrZXIucmVhZHlgXG4gICAqIG5vIHJlc29sdmVyIG51bmNhLiBQYXNhZG8gZXN0ZSB0aWVtcG8sIGBnZXRUb2tlbigpYCByZWNoYXphIGxpbXBpbyBlbiBsdWdhclxuICAgKiBkZSBjb2xnYXJzZSBpbmRlZmluaWRhbWVudGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IFNXX1JFQURZX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgd2F0Y2hkb2cgZGUgYGVuYWJsZSgpYCBhbnRlcyBkZSBhdXRvLXJlY2FyZ2FyIGxhIHDDoWdpbmEuXG4gICAqXG4gICAqIEVsIGZsdWpvIGRlIGFjdGl2YWNpw7NuIGEgdmVjZXMgc2UgY3VlbGdhIEFOVEVTIGRlIGBnZXRUb2tlbigpYCDigJQgY2Fzb1xuICAgKiB0w61waWNvOiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIG5vIG11ZXN0cmEgZWwgcG9wdXAgZGVsIFNPIGVuIHVuXG4gICAqIGNvbGQgbG9hZC4gRWwgdGltZW91dCBkZSBgZ2V0VG9rZW4oKWAgKFNXX1JFQURZX1RJTUVPVVRfTVMpIG5vIGN1YnJlIGVzbztcbiAgICogcG9yIGVzbyBgZW5hYmxlKClgIGVudnVlbHZlIGVsIGZsdWpvIGNvbXBsZXRvIGVuIGVzdGUgd2F0Y2hkb2cuXG4gICAqXG4gICAqIFVuIGZsdWpvIGV4aXRvc28gcmVhbCBsbGVnYSBhIHRva2VuK2RldmljZSBlbiB+NHM7IDE1cyBlcyBob2xnYWRvIHkgbm9cbiAgICogYXRyYXBhIHVuIMOpeGl0byBsZW50by5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgRU5BQkxFX1dBVENIRE9HX01TID0gMTVfMDAwO1xuXG4gIC8qKlxuICAgKiBLZXkgZGUgc2Vzc2lvblN0b3JhZ2Ug4oCUIGdhcmFudGl6YSB1biBzb2xvIGF1dG8tcmVsb2FkIHBvciBzZXNpw7NuLiBTaSBlbFxuICAgKiBmbHVqbyBzZSBjdWVsZ2EgdW5hIDLCqiB2ZXogdHJhcyBlbCByZWxvYWQsIE5PIHNlIHJlY2FyZ2EgZGUgbnVldm8gKGFudGktbG9vcCkuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IEFVVE9SRUxPQURfRkxBRyA9ICdub3RpZi1lbmFibGUtYXV0b3JlbG9hZCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuZGVidWdQZXJzaXN0ZW5jZSA9IHRoaXMuY29uZmlnPy5kZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSA/PyBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxpemVNZXNzYWdpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBNZXNzYWdpbmcgdmlhIEZpcmViYXNlIFNESyBkaXJlY3RvIChOTyBBbmd1bGFyRmlyZSBESSkuXG4gICAqXG4gICAqICoqUG9yIHF1w6kgbm8gdXNhbW9zIGBpbmplY3Rvci5nZXQoTWVzc2FnaW5nKWA6KipcbiAgICogQW5ndWxhckZpcmUgYHByb3ZpZGVNZXNzYWdpbmdgIHJlZ2lzdHJhIHVuIEFQUF9JTklUSUFMSVpFUiBxdWUgaW50ZXJuYW1lbnRlXG4gICAqIHJlc3VlbHZlIGBhd2FpdCBpc1N1cHBvcnRlZCgpYC4gU2kgYGluamVjdG9yLmdldChNZXNzYWdpbmcpYCBzZSBsbGFtYSBhbnRlc1xuICAgKiBxdWUgZXNlIEFQUF9JTklUSUFMSVpFUiB0ZXJtaW5lIChlai4gb3Ryb3MgQVBQX0lOSVRJQUxJWkVSIGRlbCBjbGllbnRlXG4gICAqIGNvbnN0cnV5ZW4gQXV0aFNlcnZpY2Ug4oaSIE1lc3NhZ2luZ1NlcnZpY2Ug4oaSIHRvY2EgTWVzc2FnaW5nIHRlbXByYW5vKSxcbiAgICogQW5ndWxhckZpcmUgbGFuemEgZWwgZXJyb3IgXCJBUFBfSU5JVElBTElaRVIgLi4uIGhhcyBub3QgcmVzb2x2ZWRcIi4gQW5ndWxhclxuICAgKiBESSAqKmNhY2hlYSBlcnJvcmVzIGRlIGZhY3RvcnkqKiDigJQgdW5hIHZleiBxdWUgZmFsbMOzLCB0b2RvcyBsb3NcbiAgICogYGluamVjdG9yLmdldGAgc2lndWllbnRlcyByZXRvcm5hbiBlbCBtaXNtbyBlcnJvciBjYWNoZWFkby4gUmV0cnkgbG9vcHNcbiAgICogbm8gZnVuY2lvbmFuLlxuICAgKlxuICAgKiAqKldvcmthcm91bmQ6KiogYnlwYXNzIEFuZ3VsYXJGaXJlIGVudGlyZWx5IHkgdXNhciBGaXJlYmFzZSBTREsgZGlyZWN0b1xuICAgKiAoYGZpcmViYXNlL21lc3NhZ2luZy5nZXRNZXNzYWdpbmcoZ2V0QXBwKCkpYCkuIEFuZ3VsYXJGaXJlIGVzIHVuIHdyYXBwZXJcbiAgICogc29icmUgZWwgbWlzbW8gU0RLIOKAlCBsYSBpbnN0YW5jaWEgcXVlIG9idGVuZW1vcyBlcyBmdW5jaW9uYWxtZW50ZSBpZMOpbnRpY2EuXG4gICAqIGBnZXRBcHAoKWAgcmV0b3JuYSBsYSBkZWZhdWx0IEZpcmViYXNlIGFwcCBpbmljaWFsaXphZGEgcG9yXG4gICAqIGBwcm92aWRlRmlyZWJhc2VBcHAoKCkgPT4gaW5pdGlhbGl6ZUFwcChjb25maWcuZmlyZWJhc2UpKWAuIFNpIHBvciBhbGd1bmFcbiAgICogcmF6w7NuIG5vIGVzdMOhIGluaWNpYWxpemFkYSBhw7puLCBoYWNlbW9zIGluaXRpYWxpemVBcHAgaWRlbXBvdGVudGUuXG4gICAqL1xuICBwcml2YXRlIGZjbVN1cHBvcnRQcm9taXNlPzogUHJvbWlzZTxib29sZWFuPjtcblxuICBwcml2YXRlIGFzeW5jIGdldE1lc3NhZ2luZ0luc3RhbmNlKCk6IFByb21pc2U8TWVzc2FnaW5nIHwgbnVsbD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoIXRoaXMuZmNtU3VwcG9ydFByb21pc2UpIHtcbiAgICAgIHRoaXMuZmNtU3VwcG9ydFByb21pc2UgPSBmY21Jc1N1cHBvcnRlZCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZmNtSXNTdXBwb3J0ZWQgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuZmNtU3VwcG9ydFByb21pc2U7XG4gICAgaWYgKCFzdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRkNNIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwID0gZ2V0QXBwcygpLmxlbmd0aCA+IDAgPyBnZXRBcHAoKSA6IGluaXRpYWxpemVBcHAodGhpcy5jb25maWcuZmlyZWJhc2UpO1xuICAgICAgLy8gQ2FzdCBhIE1lc3NhZ2luZyAodG9rZW4gZGUgQW5ndWxhckZpcmUpIOKAlCBlbCB0aXBvIHN1YnlhY2VudGUgZGVsIFNES1xuICAgICAgLy8gZXMgZWwgbWlzbW8uIExhcyBmdW5jaW9uZXMgZ2V0VG9rZW4vZGVsZXRlVG9rZW4vb25NZXNzYWdlIGRlXG4gICAgICAvLyBAYW5ndWxhci9maXJlL21lc3NhZ2luZyBzb24gcmUtZXhwb3J0cyBkZWwgU0RLIHkgYWNlcHRhbiBlc3RhIGluc3RhbmNlLlxuICAgICAgcmV0dXJuIGZjbUdldE1lc3NhZ2luZyhhcHApIGFzIE1lc3NhZ2luZztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGZpcmViYXNlIGdldE1lc3NhZ2luZygpIHRocmV3OicsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5JQ0lBTElaQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTWVzc2FnaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhpZHJhdGFyIGVsIHRva2VuIGRlc2RlIGxvY2FsU3RvcmFnZSBBTlRFUyBkZWwgY2hlY2sgZGUgc29wb3J0ZTogZWwgdG9rZW5cbiAgICAvLyBjYWNoZWFkbyBlcyB1biBoaW50IG9wdGltaXN0YSBwYXJhIGxhIFVJIHRyYXMgcmVjYXJnYXMgLyBzdXNwZW5zaW9uZXMgZGVcbiAgICAvLyBsYSBQV0EuIExhIHZhbGlkZXogcmVhbCBzZSBjb25maXJtYSBlbiBlbCBwcsOzeGltbyBnZXRUb2tlbigpLlxuICAgIHRoaXMuaHlkcmF0ZVRva2VuRnJvbVN0b3JhZ2UoKTtcblxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2hlY2tTdXBwb3J0KCk7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG5cbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHN1cHBvcnRlZCxcbiAgICAgIHBlcm1pc3Npb24sXG4gICAgfSk7XG5cbiAgICAvLyBTaSB5YSB0aWVuZSBwZXJtaXNvLCBjb25maWd1cmFyIGxpc3RlbmVyc1xuICAgIGlmIChzdXBwb3J0ZWQgJiYgcGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyIChjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgYmFja2dyb3VuZClcbiAgICB0aGlzLnNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxpc3RlbmVyIHBhcmEgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKiBSZWNpYmUgZXZlbnRvcyBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIGJhY2tncm91bmQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50ID0+IHtcbiAgICAgIC8vIFNvbG8gcHJvY2VzYXIgbWVuc2FqZXMgZGUgbm90aWZpY2FjacOzbiBjbGljayBiaWVuIGZvcm1hZG9zLlxuICAgICAgLy8gRW4gYXBwcyBjb24gbcO6bHRpcGxlcyBTVyAoUFdBIG5nc3ctd29ya2VyICsgZmlyZWJhc2UtbWVzc2FnaW5nLXN3KSxcbiAgICAgIC8vIG8gdmFyaWFudGVzIGRlbCBwYXlsb2FkLCBgbm90aWZpY2F0aW9uYCBwdWVkZSBubyBleGlzdGlyIGF1bnF1ZVxuICAgICAgLy8gYGRhdGEudHlwZWAgY29pbmNpZGEg4oaSIGd1YXJkIGRlZmVuc2l2byBldml0YSBUeXBlRXJyb3IuXG4gICAgICBpZiAoZXZlbnQuZGF0YT8udHlwZSAhPT0gJ05PVElGSUNBVElPTl9DTElDSycpIHJldHVybjtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGV2ZW50LmRhdGEubm90aWZpY2F0aW9uIGFzIE5vdGlmaWNhdGlvblBheWxvYWQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbikgcmV0dXJuO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG8gZW4gZWwgbmF2ZWdhZG9yIGFjdHVhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1N1cHBvcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIEFQSXMgbmVjZXNhcmlhc1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBxdWUgbWVzc2FnaW5nIGVzdMOpIGRpc3BvbmlibGUgKGFzeW5jIOKAlCBlc3BlcmEgQVBQX0lOSVRJQUxJWkVSKVxuICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJNSVNPUyBZIFRPS0VOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIHkgb2J0aWVuZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBzZSBvdG9yZ8OzIHBlcm1pc28sIG51bGwgc2kgc2UgZGVuZWfDs1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAqIGlmICh0b2tlbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdUb2tlbiBGQ006JywgdG9rZW4pO1xuICAgKiAgIC8vIEVudmlhciBhIGJhY2tlbmRcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnUGVybWlzbyBkZW5lZ2FkbyBvIG5vIHNvcG9ydGFkbycpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdGQ00gbm8gZXN0w6Egc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU29saWNpdGFyIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXNcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBlcm1pc3Npb24gIT09ICdncmFudGVkJykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgZGVuZWdhZG8nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIE9idGVuZXIgdG9rZW4gRkNNXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIENvbmZpZ3VyYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNvbGljaXRhbmRvIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsdWpvIGNvbXBsZXRvIGRlIGFjdGl2YWNpw7NuIGRlIHB1c2gsIHJvYnVzdG8sIGNyb3NzLWFwcC5cbiAgICpcbiAgICogT3JxdWVzdGE6IHBlZGlyIHBlcm1pc28g4oaSIFNXIHJlYWR5IOKGkiBvYnRlbmVyIHRva2VuIEZDTSDihpIgKG9wY2lvbmFsKVxuICAgKiByZWdpc3RyYXIgZWwgZGV2aWNlIGVuIGJhY2tlbmQuIEVzIGVsIHB1bnRvIGRlIG9ycXVlc3RhY2nDs24gw7puaWNvIHF1ZSBjYWRhXG4gICAqIGFwcCBkZWwgZmFjdG9yeSBjb25zdW1lIOKAlCBsYSBsw7NnaWNhIGRlIHJvYnVzdGV6IHZpdmUgYXF1w60sIG5vIGVuIGNhZGEgcMOhZ2luYS5cbiAgICpcbiAgICogKipXYXRjaGRvZyBkZSBhdXRvLXJlbG9hZC4qKiBFbCBmbHVqbyBhIHZlY2VzIHNlIGN1ZWxnYSBBTlRFUyBkZSBgZ2V0VG9rZW4oKWBcbiAgICogKGVqLiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIHF1ZSBubyBtdWVzdHJhIGVsIHBvcHVwIGVuIHVuIGNvbGRcbiAgICogbG9hZCkg4oCUIGVsIHRpbWVvdXQgaW50ZXJubyBkZSBgZ2V0VG9rZW4oKWAgbm8gY3VicmUgZXNlIGNhc28uIFBvciBlc29cbiAgICogYGVuYWJsZSgpYCBlbnZ1ZWx2ZSBlbCBmbHVqbyBlbnRlcm8gZW4gdW4gd2F0Y2hkb2c6IHNpIG5vIGFsY2FuemEgdW4gZXN0YWRvXG4gICAqIHRlcm1pbmFsIGVuIGBFTkFCTEVfV0FUQ0hET0dfTVNgICgxNXMpOlxuICAgKiAgLSAxwqogdmV6IGVuIGxhIHNlc2nDs24g4oaSIG1hcmNhIHVuIGZsYWcgZW4gYHNlc3Npb25TdG9yYWdlYCB5IGhhY2VcbiAgICogICAgYHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKWAgKHVuIGZyZXNoIGxvYWQgc3VlbGUgdGVuZXIgZWwgU1cgYWN0aXZvKS5cbiAgICogICAgUmVzdWVsdmUgY29uIGB7IHN0YXR1czogJ3RpbWVvdXQnLCByZWxvYWRlZDogdHJ1ZSB9YC5cbiAgICogIC0geWEgc2UgYXV0by1yZWNhcmfDsyBhbnRlcyDihpIgTk8gcmVjYXJnYSAoYW50aS1sb29wKTogbGltcGlhIGVsIGZsYWcgeVxuICAgKiAgICByZXN1ZWx2ZSBjb24gYHsgc3RhdHVzOiAndGltZW91dCcsIHJlbG9hZGVkOiBmYWxzZSB9YCBwYXJhIHF1ZSBsYSBhcHBcbiAgICogICAgbXVlc3RyZSB1biBlcnJvci5cbiAgICpcbiAgICogTk8gaGFjZSB0aHJvdyDigJQgc2llbXByZSByZXN1ZWx2ZSBjb24gdW4gYEVuYWJsZVB1c2hSZXN1bHRgIGRlc2NyaXB0aXZvIHF1ZVxuICAgKiBsYSBww6FnaW5hIGNvbnN1bWlkb3JhIGluc3BlY2Npb25hIHBhcmEgZGVjaWRpciBxdcOpIHRvYXN0IG1vc3RyYXIuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLnJlZ2lzdGVyRGV2aWNlIENhbGxiYWNrIG9wY2lvbmFsIHF1ZSByZWdpc3RyYSBlbCBkZXZpY2UgZW5cbiAgICogICBlbCBiYWNrZW5kICh2aXZlIGVuIGBBdXRoU2VydmljZWAg4oCUIHNlIHBhc2EgY29tbyBjYWxsYmFjayBwYXJhIGV2aXRhciBlbFxuICAgKiAgIGNpY2xvIGRlIERJIEF1dGhTZXJ2aWNlIOKGlCBNZXNzYWdpbmdTZXJ2aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBtZXNzYWdpbmcuZW5hYmxlKHtcbiAgICogICByZWdpc3RlckRldmljZTogKHRva2VuKSA9PiBhdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICogfSk7XG4gICAqIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZW5hYmxlZCcpIHtcbiAgICogICAvLyByZXN1bHQudG9rZW4gZGlzcG9uaWJsZSDigJQgcHVzaCBhY3Rpdm9cbiAgICogfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAndGltZW91dCcgJiYgIXJlc3VsdC5yZWxvYWRlZCkge1xuICAgKiAgIC8vIG1vc3RyYXIgZXJyb3I6IGVsIGZsdWpvIHNlIGNvbGfDsyB5IHlhIHNlIGNvbnN1bWnDsyBlbCBhdXRvLXJlbG9hZFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZW5hYmxlKG9wdGlvbnM6IEVuYWJsZVB1c2hPcHRpb25zID0ge30pOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gZW5hYmxlKCkgc3RhcnQnKTtcblxuICAgIGxldCB3YXRjaGRvZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBFbCB3YXRjaGRvZyBjb3JyZSBlbiBwYXJhbGVsbyBhbCBmbHVqbyByZWFsLiBMbyBxdWUgZ2FuZSBlbCByYWNlIGRlZmluZVxuICAgIC8vIGVsIHJlc3VsdGFkby4gRWwgZmx1am8gcmVhbCwgc2kgZ2FuYSwgbGltcGlhIGVsIHdhdGNoZG9nIGVuIGVsIGBmaW5hbGx5YC5cbiAgICBjb25zdCB3YXRjaGRvZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxFbmFibGVQdXNoUmVzdWx0PihyZXNvbHZlID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuOyAvLyBTU1Ig4oCUIHNpbiB3YXRjaGRvZy5cbiAgICAgIHdhdGNoZG9nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdhdGNoZG9nID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtNZXNzYWdpbmddIGVuYWJsZSgpIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVN9bXMg4oCUIHdhdGNoZG9nYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQXV0b1JlbG9hZGVkKCkpIHtcbiAgICAgICAgICAvLyBBbnRpLWxvb3A6IHlhIHJlY2FyZ2Ftb3MgdW5hIHZleiBlc3RhIHNlc2nDs24geSB2b2x2acOzIGEgY29sZ2FyLlxuICAgICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gYXV0by1yZWxvYWQgeWEgY29uc3VtaWRvIOKAlCBubyBzZSByZWNhcmdhIGRlIG51ZXZvJyk7XG4gICAgICAgICAgdGhpcy5jbGVhckF1dG9SZWxvYWRGbGFnKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICd0aW1lb3V0JyxcbiAgICAgICAgICAgIHJlbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYXNvbjogYEZsdWpvIGRlIGFjdGl2YWNpw7NuIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVMgLyAxMDAwfXNgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDHCqiB2ZXo6IG1hcmNhciB5IHJlY2FyZ2FyLiBVbiBmcmVzaCBsb2FkIHN1ZWxlIHRlbmVyIGVsIFNXIGFjdGl2by5cbiAgICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBhdXRvLXJlY2FyZ2FuZG8gbGEgcMOhZ2luYSAoMS8xIHBvciBzZXNpw7NuKScpO1xuICAgICAgICB0aGlzLm1hcmtBdXRvUmVsb2FkZWQoKTtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3RhdHVzOiAndGltZW91dCcsXG4gICAgICAgICAgcmVsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgcmVhc29uOiAnQXV0by1yZWNhcmdhbmRvIHBhcmEgcmVpbnRlbnRhciBsYSBhY3RpdmFjacOzbicsXG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LCB0aGlzLkVOQUJMRV9XQVRDSERPR19NUyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbG93ID0gdGhpcy5ydW5FbmFibGVGbG93KG9wdGlvbnMpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHdhdGNoZG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHdhdGNoZG9nKTtcbiAgICAgICAgd2F0Y2hkb2cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtmbG93LCB3YXRjaGRvZ1Byb21pc2VdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVqbyByZWFsIGRlIGFjdGl2YWNpw7NuLCBzaW4gZWwgd2F0Y2hkb2cgKGxvIGVudnVlbHZlIGBlbmFibGUoKWApLlxuICAgKiBSZXN1ZWx2ZSBzaWVtcHJlIGNvbiB1biBgRW5hYmxlUHVzaFJlc3VsdGAg4oCUIG5vIGhhY2UgdGhyb3cuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuYWJsZUZsb3cob3B0aW9uczogRW5hYmxlUHVzaE9wdGlvbnMpOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIGVuYWJsZTogRkNNIG5vIHNvcG9ydGFkbycpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAndW5zdXBwb3J0ZWQnLCByZWFzb246ICdGQ00gbm8gc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gKHJlcXVlc3RQZXJtaXNzaW9uIGVuY2FkZW5hIGxhcyAzKS5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuXG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIC8vIHJlcXVlc3RQZXJtaXNzaW9uIGRldnVlbHZlIG51bGwgdGFudG8gcG9yIHBlcm1pc28gZGVuZWdhZG8gY29tbyBwb3JcbiAgICAgICAgLy8gZmFsbG8gYWwgb2J0ZW5lciBlbCB0b2tlbi4gRGlzdGl2ZHNtb3MgcG9yIGVsIGVzdGFkbyBkZWwgcGVybWlzby5cbiAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uID09PSAnZGVuaWVkJyB8fCBwZXJtaXNzaW9uID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICdkZW5pZWQnLCByZWFzb246ICdQZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIGRlbmVnYWRvJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgcmVhc29uOiAnTm8gc2UgcHVkbyBvYnRlbmVyIGVsIHRva2VuIEZDTScgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0cm8gZGUgZGV2aWNlIGVuIGJhY2tlbmQgKG9wY2lvbmFsIOKAlCBlbCBjYWxsZXIgcGFzYSBlbCBjYWxsYmFjaykuXG4gICAgICBpZiAob3B0aW9ucy5yZWdpc3RlckRldmljZSkge1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkID0gYXdhaXQgb3B0aW9ucy5yZWdpc3RlckRldmljZSh0b2tlbik7XG4gICAgICAgIGlmICghcmVnaXN0ZXJlZCkge1xuICAgICAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgdG9rZW4sIHJlYXNvbjogJ05vIHNlIHB1ZG8gcmVnaXN0cmFyIGVsIGRpc3Bvc2l0aXZvJyB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIMOJeGl0bzogZXN0YWRvIHRlcm1pbmFsLiBMaW1waWFyIGVsIGZsYWcgYW50aS1sb29wIHBhcmEgZnV0dXJvcyBpbnRlbnRvcy5cbiAgICAgIHRoaXMuY2xlYXJBdXRvUmVsb2FkRmxhZygpO1xuICAgICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIGVuYWJsZSgpIHN1Y2Nlc3MnKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2VuYWJsZWQnLCB0b2tlbiB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGVuYWJsZSgpIGVycm9yOicsIHJlYXNvbiwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnZXJyb3InLCByZWFzb24gfTtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSBzaSB5YSBzZSBhdXRvLXJlY2FyZ8OzIHVuYSB2ZXogZW4gZXN0YSBzZXNpw7NuLiAqL1xuICBwcml2YXRlIGhhc0F1dG9SZWxvYWRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5BVVRPUkVMT0FEX0ZMQUcpID09PSAnMSc7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBzZXNzaW9uU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIChtb2RvIHByaXZhZG8gZXN0cmljdG8sIFNTUikuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hcmNhIHF1ZSBzZSBjb25zdW1pw7MgZWwgYXV0by1yZWxvYWQgZGUgZXN0YSBzZXNpw7NuLiAqL1xuICBwcml2YXRlIG1hcmtBdXRvUmVsb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5BVVRPUkVMT0FEX0ZMQUcsICcxJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBzZXNzaW9uU3RvcmFnZSBubyBkaXNwb25pYmxlIOKAlCBiZXN0LWVmZm9ydC4gKi9cbiAgICB9XG4gIH1cblxuICAvKiogTGltcGlhIGVsIGZsYWcgYW50aS1sb29wIOKAlCB0cmFzIHVuIMOpeGl0byBvIHVuIGZhbGxvIGRlZmluaXRpdm8uICovXG4gIHByaXZhdGUgY2xlYXJBdXRvUmVsb2FkRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkFVVE9SRUxPQURfRkxBRyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBzZXNzaW9uU3RvcmFnZSBubyBkaXNwb25pYmxlIOKAlCBuYWRhIHF1ZSBsaW1waWFyLiAqL1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHRva2VuIEZDTSBhY3R1YWwgKHNpbiBzb2xpY2l0YXIgcGVybWlzbykuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBlc3TDoSBkaXNwb25pYmxlLCBudWxsIHNpIG5vXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdG9rZW4gPSBhd2FpdCBtZXNzYWdpbmcuZ2V0VG9rZW4oKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRUb2tlbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gZ2V0VG9rZW4oKSBzdGFydCcpO1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZykge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBnZXRUb2tlbiBhYm9ydGVkOiBubyBNZXNzYWdpbmcgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcGlkS2V5ID0gdGhpcy5jb25maWcubWVzc2FnaW5nVmFwaWRLZXk7XG4gICAgaWYgKCF2YXBpZEtleSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW01lc3NhZ2luZ10gVkFQSUQga2V5IG5vIGNvbmZpZ3VyYWRhIChjb25maWcubWVzc2FnaW5nVmFwaWRLZXkpLiBGQ00gbm8gZnVuY2lvbmFyw6EuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXV0aWxpemFyIGVsIFNXIHlhIHJlZ2lzdHJhZG8gKGVuIGNvbmZpZy50cyBkdXJhbnRlIGVsIGJvb3RzdHJhcCkgZW5cbiAgICAgIC8vIGx1Z2FyIGRlIHJlLXJlZ2lzdHJhcmxvIGVuIGNhZGEgbGxhbWFkYSDigJQgcmUtcmVnaXN0cmFyIGRpc3BhcmFcbiAgICAgIC8vIHJldmFsaWRhY2lvbmVzIGRlbCBTVyBlbiBpT1MgUFdBLiBTb2xvIHJlZ2lzdHJhbW9zIHNpIG5vIGV4aXN0ZSBhw7puLlxuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigpO1xuICAgICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIFNXIHJlc29sdmVkLCB3YWl0aW5nIHJlYWR5Li4uJyk7XG4gICAgICAvLyBFc3BlcmFyIGEgcXVlIGVsIFNXIGVzdMOpIGFjdGl2bywgY29uIHRpbWVvdXQ6IGBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeWBcbiAgICAgIC8vIHB1ZWRlIG5vIHJlc29sdmVyIE5VTkNBIGVuIHVuIGNvbGQgbG9hZCAoU1cgYcO6biBubyBhY3RpdmFkbykg4oaSIHNpbiBlbFxuICAgICAgLy8gdGltZW91dCBgZ2V0VG9rZW4oKWAgc2UgY3VlbGdhIGluZGVmaW5pZGFtZW50ZS4gQ29uIGVsIHJhY2UsIHNpIGVsIFNXIG5vXG4gICAgICAvLyBxdWVkYSBsaXN0byBlbiBTV19SRUFEWV9USU1FT1VUX01TLCBlc3RhIHByb21lc2EgcmVjaGF6YSBsaW1waW8uXG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JTZXJ2aWNlV29ya2VyUmVhZHkoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBTVyByZWFkeSwgY2FsbGluZyBGaXJlYmFzZSBnZXRUb2tlbigpLi4uJyk7XG5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4obWVzc2FnaW5nLCB7XG4gICAgICAgIHZhcGlkS2V5LFxuICAgICAgICBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uOiByZWdpc3RyYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICdbTWVzc2FnaW5nXSBGaXJlYmFzZSBnZXRUb2tlbiByZXR1cm5lZDonLFxuICAgICAgICB0b2tlbiA/IGAke3Rva2VuLnNsaWNlKDAsIDE2KX3igKZgIDogJ251bGwvZW1wdHknXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFBlcnNpc3RpciBlbCB0b2tlbiBwYXJhIGhpZHJhdGFyIGVsIGVzdGFkbyBlbiBmdXR1cm9zIGNvbGQgc3RhcnRzLlxuICAgICAgdGhpcy5wZXJzaXN0VG9rZW4odG9rZW4pO1xuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE5vIHRyYWdhbW9zIGxhIGNhdXNhOiBsb2d1ZWFtb3MgZWwgZGV0YWxsZSBwYXJhIGRpYWduw7NzdGljby4gTGEgZmlybWFcbiAgICAgIC8vIHNpZ3VlIHNpZW5kbyBQcm9taXNlPHN0cmluZyB8IG51bGw+IHBhcmEgbm8gcm9tcGVyIGNhbGxlcnMuXG4gICAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGdldFRva2VuIGVycm9yOicsIHJlYXNvbiwgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VlbHZlIGVsIGBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uYCBkZWwgU1cgZGUgRkNNLlxuICAgKlxuICAgKiBFbCBTVyBgL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qc2AgeWEgc2UgcmVnaXN0cmEgdW5hIHZleiBlbiBlbCBib290c3RyYXAgZGVcbiAgICogbGEgYXBwIChgY29uZmlnLnRzYCkuIFJldXRpbGl6YW1vcyBlc2UgcmVnaXN0cm8gZW4gbHVnYXIgZGUgcmUtcmVnaXN0cmFybG9cbiAgICogZW4gY2FkYSBgZ2V0VG9rZW4oKWAg4oCUIHJlLXJlZ2lzdHJhciByZXBldGlkYW1lbnRlIGRpc3BhcmEgcmV2YWxpZGFjaW9uZXMgZGVsXG4gICAqIFNXIGVuIGlPUyBQV0EuIFNvbG8gcmVnaXN0cmFtb3MgY29tbyBmYWxsYmFjayBzaSB0b2RhdsOtYSBubyBleGlzdGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKCk6IFByb21pc2U8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuZ2V0UmVnaXN0cmF0aW9uKCcvZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzJyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gU1cgbm90IHJlZ2lzdGVyZWQgeWV0LCByZWdpc3RlcmluZyBhcyBmYWxsYmFjaycpO1xuICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzcGVyYSBhIHF1ZSBlbCBTZXJ2aWNlIFdvcmtlciBxdWVkZSBhY3Rpdm8gKGBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeWApXG4gICAqIHBlcm8gY29uIHVuIHRpbWVvdXQgZHVyby5cbiAgICpcbiAgICogYG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5YCByZXN1ZWx2ZSBjdWFuZG8gaGF5IHVuIFNXICphY3Rpdm8qLiBFbiB1blxuICAgKiBjb2xkIGxvYWQgKHByaW1lcmEgdmlzaXRhLCBTVyByZWNpw6luIHJlZ2lzdHJhZG8sIGlPUyBQV0EgcmVjacOpbiBhYmllcnRhKSBlbFxuICAgKiBTVyBwdWVkZSBxdWVkYXIgZW4gZXN0YWRvIGBpbnN0YWxsaW5nYC9gd2FpdGluZ2AgeSBgcmVhZHlgIG5vIHJlc29sdmVyIG51bmNhXG4gICAqIOKGkiBgZ2V0VG9rZW4oKWAgc2UgY3VlbGdhLiBFbCBgUHJvbWlzZS5yYWNlYCBjb250cmEgdW4gYHNldFRpbWVvdXRgIGdhcmFudGl6YVxuICAgKiBxdWUgZXN0YSBlc3BlcmEgdGVybWluYTogbyBnYW5hIGByZWFkeWAgKGNhc28gbm9ybWFsKSBvIGdhbmEgZWwgdGltZW91dCB5XG4gICAqIGxhbnphbW9zIHVuIGVycm9yIGNsYXJvIHBhcmEgcXVlIGBnZXRUb2tlbigpYCByZWNoYWNlIGVuIHZleiBkZSBjb2xnYXJzZS5cbiAgICpcbiAgICogRWwgdGltZXIgc2UgbGltcGlhIGVuIGFtYmFzIHJhbWFzIHBhcmEgbm8gZGVqYXIgdGltZXJzIGNvbGdhbmRvLlxuICAgKi9cbiAgcHJpdmF0ZSB3YWl0Rm9yU2VydmljZVdvcmtlclJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZWFkeSA9IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW01lc3NhZ2luZ10gc2VydmljZSB3b3JrZXIgbm8gcXVlZMOzIGxpc3RvIGVuICR7dGhpcy5TV19SRUFEWV9USU1FT1VUX01TIC8gMTAwMH1zYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0sIHRoaXMuU1dfUkVBRFlfVElNRU9VVF9NUyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtyZWFkeSwgdGltZW91dF0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgZWwgdG9rZW4gRkNNIGVuIGxvY2FsU3RvcmFnZSAobyBsbyBsaW1waWEgc2kgZXMgbnVsbC9lbXB0eSkuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RUb2tlbih0b2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSwgdG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSB0b2tlbiBwZXJzaXN0ZW5jZSBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhpZHJhdGEgZWwgZXN0YWRvIGRlbCB0b2tlbiBkZXNkZSBsb2NhbFN0b3JhZ2UgZW4gZWwgYXJyYW5xdWUgZGVsIHNlcnZpY2lvLlxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlVG9rZW5Gcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FjaGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHRoaXMuc2V0VG9rZW5Gcm9tU3RvcmFnZShjYWNoZWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gdG9rZW4gaHlkcmF0aW9uIGZhaWxlZDonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBlbCB0b2tlbiBGQ00gYWN0dWFsICh1bnN1YnNjcmliZSBkZSBub3RpZmljYWNpb25lcykuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgbWVzc2FnaW5nLmRlbGV0ZVRva2VuKCk7XG4gICAqIGNvbnNvbGUubG9nKCdUb2tlbiBlbGltaW5hZG8sIG5vIHJlY2liaXLDoSBtw6FzIG5vdGlmaWNhY2lvbmVzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlVG9rZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVRva2VuKG1lc3NhZ2luZyk7XG5cbiAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICB9KTtcblxuICAgICAgLy8gTGltcGlhciBlbCB0b2tlbiBwZXJzaXN0aWRvIOKAlCB5YSBubyBlc3RhbW9zIHN1c2NyaXRvcy5cbiAgICAgIHRoaXMucGVyc2lzdFRva2VuKG51bGwpO1xuXG4gICAgICAvLyBMaW1waWFyIGxpc3RlbmVyIGRlIG1lbnNhamVzXG4gICAgICBpZiAodGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVsaW1pbmFuZG8gdG9rZW4gRkNNOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2UgcHVkbyBlbGltaW5hciBlbCB0b2tlbiBkZSBub3RpZmljYWNpb25lcycpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRU5TQUpFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZSBtZW5zYWplcyByZWNpYmlkb3MgZW4gZm9yZWdyb3VuZC5cbiAgICpcbiAgICogSU1QT1JUQU5URTogTG9zIG1lbnNhamVzIGVuIGJhY2tncm91bmQgc29uIG1hbmVqYWRvcyBwb3IgZWwgU2VydmljZSBXb3JrZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBsbGVnYSB1biBtZW5zYWplIGVuIGZvcmVncm91bmRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKHBheWxvYWQgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdNZW5zYWplIHJlY2liaWRvOicsIHBheWxvYWQpO1xuICAgKiAgIC8vIE1vc3RyYXIgbm90aWZpY2FjacOzbiBjdXN0b20gbyBhY3R1YWxpemFyIFVJXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIG9uTWVzc2FnZSgpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblBheWxvYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgZWwgbGlzdGVuZXIgZGUgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZXR1cE1lc3NhZ2VMaXN0ZW5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcgfHwgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UgPSBvbk1lc3NhZ2UobWVzc2FnaW5nLCBwYXlsb2FkID0+IHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCA9IHtcbiAgICAgICAgdGl0bGU6IHBheWxvYWQubm90aWZpY2F0aW9uPy50aXRsZSxcbiAgICAgICAgYm9keTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmJvZHksXG4gICAgICAgIGltYWdlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8uaW1hZ2UsXG4gICAgICAgIGRhdGE6IHBheWxvYWQuZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgICBtZXNzYWdlSWQ6IHBheWxvYWQubWVzc2FnZUlkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5tZXNzYWdlU3ViamVjdC5uZXh0KG5vdGlmaWNhdGlvbik7XG5cbiAgICAgIC8vIFBlcnNpc3RpciBlbiBsb2NhbFN0b3JhZ2UgcGFyYSBkZWJ1Z2dpbmcgc2kgZXN0w6EgaGFiaWxpdGFkb1xuICAgICAgaWYgKHRoaXMuZGVidWdQZXJzaXN0ZW5jZSkge1xuICAgICAgICB0aGlzLnBlcnNpc3RNZXNzYWdlRm9yRGVidWcobm90aWZpY2F0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0ZSB1biBtZW5zYWplIEZDTSBlbiBsb2NhbFN0b3JhZ2UgcGFyYSBkZWJ1Z2dpbmcuXG4gICAqIFNvbG8gc2UgdXNhIGN1YW5kbyBkZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKiBNYW50aWVuZSBsb3Mgw7psdGltb3MgNTAgbWVuc2FqZXMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RNZXNzYWdlRm9yRGVidWcobWVzc2FnZTogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkRFQlVHX1NUT1JBR0VfS0VZKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gc3RvcmVkID8gSlNPTi5wYXJzZShzdG9yZWQpIDogW107XG4gICAgICBtZXNzYWdlcy51bnNoaWZ0KHsgLi4ubWVzc2FnZSwgcmVjZWl2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICAgICAgLy8gTWFudGVuZXIgc29sbyDDumx0aW1vcyA1MFxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMuc2xpY2UoMCwgNTApKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBEZWJ1ZyBwZXJzaXN0ZW5jZSBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTVEFETyBZIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGFjdHVhbCBkZWwgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICpcbiAgICogQHJldHVybnMgJ2dyYW50ZWQnIHwgJ2RlbmllZCcgfCAnZGVmYXVsdCdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwZXJtaXNzaW9uID0gbWVzc2FnaW5nLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuICAgKiBpZiAocGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAqICAgLy8gWWEgdGllbmUgcGVybWlzb1xuICAgKiB9IGVsc2UgaWYgKHBlcm1pc3Npb24gPT09ICdkZWZhdWx0Jykge1xuICAgKiAgIC8vIFB1ZWRlIHNvbGljaXRhciBwZXJtaXNvXG4gICAqIH0gZWxzZSB7XG4gICAqICAgLy8gRGVuZWdhZG8sIGRlYmUgaGFiaWxpdGFyIG1hbnVhbG1lbnRlXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBnZXRQZXJtaXNzaW9uU3RhdGUoKTogTm90aWZpY2F0aW9uUGVybWlzc2lvbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiAnZGVuaWVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gTm90aWZpY2F0aW9uLnBlcm1pc3Npb24gYXMgTm90aWZpY2F0aW9uUGVybWlzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBGQ00gZXN0w6Egc29wb3J0YWRvIGVuIGVsIG5hdmVnYWRvciBhY3R1YWwuXG4gICAqIFVzYSBsw7NnaWNhIGludGVsaWdlbnRlIHBhcmEgZXZpdGFyIGZhbHNvcyBuZWdhdGl2b3MgcG9yIHRpbWluZyBkZWwgSW5qZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgc2kgRkNNIGVzdMOhIHNvcG9ydGFkb1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmIChhd2FpdCBtZXNzYWdpbmcuaXNTdXBwb3J0ZWQoKSkge1xuICAgKiAgIC8vIFB1ZWRlIHVzYXIgbm90aWZpY2FjaW9uZXMgcHVzaFxuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIE5hdmVnYWRvciBubyBzb3BvcnRhIG8gbm8gdGllbmUgU2VydmljZSBXb3JrZXJcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGlzU3VwcG9ydGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFNpIHlhIHRlbmVtb3MgdG9rZW4gZW4gZXN0YWRvLCBjbGFyYW1lbnRlIEZDTSBmdW5jaW9uYVxuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2kgeWEgY2FsY3VsYW1vcyBzb3BvcnRlIGV4aXRvc2FtZW50ZSwgdXNhcmxvXG4gICAgaWYgKHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYWNpb25lcyBiw6FzaWNhcyDigJQgQVBJcyBkZWwgYnJvd3NlclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpIHx8ICEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpT1Mg4oCUIHNvbG8gc29wb3J0YSBwdXNoIHdlYiBjdWFuZG8gbGEgUFdBIGVzdMOhIGluc3RhbGFkYSBlbiBob21lIHNjcmVlblxuICAgIC8vIChpT1MgMTYuNCspLiBFZGdlL0Nocm9tZS9GaXJlZm94IGVuIGlPUyBjb21wYXJ0ZW4gZXN0YSBsaW1pdGFjacOzbiBwb3JxdWVcbiAgICAvLyBlc3TDoW4gb2JsaWdhZG9zIGEgdXNhciBXZWJLaXQuIFJldG9ybmFtb3MgZmFsc2UgYXF1w60gcGFyYSBxdWUgbGEgVUkgbXVlc3RyZVxuICAgIC8vIGVsIGZsdWpvIFwiaW5zdGFsYSBsYSBhcHBcIiBlbiBsdWdhciBkZSB1biBDVEEgcXVlIHZhIGEgZmFsbGFyLlxuICAgIGlmICh0aGlzLmlzSU9TV2l0aG91dFN0YW5kYWxvbmUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE5PVEE6IGRlbGliZXJhZGFtZW50ZSBOTyBjaGVxdWVhbW9zIGBnZXRNZXNzYWdpbmdJbnN0YW5jZSgpYCBhcXXDrSBwb3JxdWVcbiAgICAvLyBlbCBmYWN0b3J5IGBwcm92aWRlTWVzc2FnaW5nKCgpID0+IGdldE1lc3NhZ2luZygpKWAgZXMgbGF6eSBlbiBBbmd1bGFyXG4gICAgLy8gRmlyZSB5IHB1ZWRlIG5vIGVzdGFyIHJlc3VlbHRvIGN1YW5kbyBlc3RhIGZ1bmNpw7NuIHNlIGxsYW1hIHRlbXByYW5vXG4gICAgLy8gZW4gZWwgY2ljbG8gZGUgdmlkYS4gRXNvIGNhdXNhYmEgZmFsc29zIG5lZ2F0aXZvcy4gU2kgRkNNIHJlYWxtZW50ZSBub1xuICAgIC8vIGVzdMOhIGRpc3BvbmlibGUgKHByb3llY3RvIHNpbiBNZXNzYWdpbmcgaGFiaWxpdGFkbywgVkFQSUQgaW52w6FsaWRvKSwgZWxcbiAgICAvLyBmbG93IGRvd25zdHJlYW0gKGBnZXRUb2tlbmAvYHJlcXVlc3RQZXJtaXNzaW9uYCkgZmFsbGFyw6EgY29uIGVycm9yIHJlYWwsXG4gICAgLy8gcXVlIGVzIG1lam9yIFVYIHF1ZSB1biBcIm5vIHNvcG9ydGFkb1wiIHByZW1hdHVyby5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpT1Mgc2luIGVzdGFyIGluc3RhbGFkbyBjb21vIFBXQSBzdGFuZGFsb25lIOKAlCBwdXNoIHdlYiBubyBkaXNwb25pYmxlLlxuICAgKiBBcGxpY2EgYSBTYWZhcmkgeSBhIEVkZ2UvQ2hyb21lL0ZpcmVmb3ggZW4gaU9TICh0b2RvcyBXZWJLaXQgcG9yIG1hbmRhdG8gQXBwbGUpLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0lPU1dpdGhvdXRTdGFuZGFsb25lKCk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHVhID0gKG5hdmlnYXRvciBhcyBOYXZpZ2F0b3IpLnVzZXJBZ2VudCB8fCAnJztcbiAgICBjb25zdCBpc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KHVhKTtcbiAgICBpZiAoIWlzSU9TKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaXNTdGFuZGFsb25lID1cbiAgICAgIHdpbmRvdy5tYXRjaE1lZGlhPy4oJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyB8fFxuICAgICAgKG5hdmlnYXRvciBhcyB1bmtub3duIGFzIHsgc3RhbmRhbG9uZT86IGJvb2xlYW4gfSkuc3RhbmRhbG9uZSA9PT0gdHJ1ZTtcbiAgICByZXR1cm4gIWlzU3RhbmRhbG9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHRva2VuIGFjdHVhbCBzaW4gaGFjZXIgcmVxdWVzdC5cbiAgICpcbiAgICogQHJldHVybnMgVG9rZW4gYWxtYWNlbmFkbyBvIG51bGxcbiAgICovXG4gIGdldCBjdXJyZW50VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGVsIGVzdGFkbyBjb21wbGV0byBkZWwgc2VydmljaW8gZGUgbWVzc2FnaW5nLlxuICAgKi9cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPE1lc3NhZ2luZ1N0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8geWEgb3RvcmfDsyBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzLlxuICAgKi9cbiAgZ2V0IGhhc1Blcm1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnBlcm1pc3Npb24gPT09ICdncmFudGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRyYXRhIGVsIGVzdGFkbyBkZWwgdG9rZW4gZGVzZGUgdW4gdmFsb3IgZXh0ZXJubyAoZWo6IGxvY2FsU3RvcmFnZSkuXG4gICAqIMOadGlsIGN1YW5kbyBlbCB0b2tlbiB5YSBleGlzdGUgcGVybyBlbCBNZXNzYWdpbmdTZXJ2aWNlIG5vIGxvIHRpZW5lIGVuIG1lbW9yaWEuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiBUb2tlbiBGQ00gYSBzZXRlYXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzdG9yZWRUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmY21fdG9rZW4nKTtcbiAgICogaWYgKHN0b3JlZFRva2VuKSB7XG4gICAqICAgbWVzc2FnaW5nLnNldFRva2VuRnJvbVN0b3JhZ2Uoc3RvcmVkVG9rZW4pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc2V0VG9rZW5Gcm9tU3RvcmFnZSh0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgIHRva2VuLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHRydWUsIC8vIFNpIGhheSB0b2tlbiwgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBERUVQIExJTktJTkcgLyBOQVZFR0FDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZSBjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEVtaXRlIGN1YW5kbyBlbCB1c3VhcmlvIGhhY2UgY2xpY2sgZW4gdW5hIG5vdGlmaWNhY2nDs24gKGZvcmVncm91bmQgbyBiYWNrZ3JvdW5kKS5cbiAgICogVXNhIGVzdGUgb2JzZXJ2YWJsZSBwYXJhIG5hdmVnYXIgYSBsYSBww6FnaW5hIGNvcnJlc3BvbmRpZW50ZS5cbiAgICpcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgTm90aWZpY2F0aW9uQ2xpY2tFdmVudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIEBDb21wb25lbnQoey4uLn0pXG4gICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgKiAgIHByaXZhdGUgbWVzc2FnaW5nID0gaW5qZWN0KE1lc3NhZ2luZ1NlcnZpY2UpO1xuICAgKiAgIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAqICAgICB0aGlzLm1lc3NhZ2luZy5vbk5vdGlmaWNhdGlvbkNsaWNrKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICogICAgICAgaWYgKGV2ZW50LmFjdGlvbi5yb3V0ZSkge1xuICAgKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtldmVudC5hY3Rpb24ucm91dGVdLCB7XG4gICAqICAgICAgICAgICBxdWVyeVBhcmFtczogZXZlbnQuYWN0aW9uLnF1ZXJ5UGFyYW1zXG4gICAqICAgICAgICAgfSk7XG4gICAqICAgICAgIH1cbiAgICogICAgIH0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIG9uTm90aWZpY2F0aW9uQ2xpY2soKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25DbGlja0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhZSBsYSBhY2Npw7NuIGRlIG5hdmVnYWNpw7NuIGRlIGxvcyBkYXRvcyBkZSB1bmEgbm90aWZpY2FjacOzbi5cbiAgICpcbiAgICogQnVzY2EgY2FtcG9zIGVzcGVjw61maWNvcyBlbiBlbCBwYXlsb2FkIGRlIGRhdG9zOlxuICAgKiAtIGByb3V0ZWA6IFJ1dGEgaW50ZXJuYSBkZSBsYSBhcHAgKGVqOiAnL29yZGVycy8xMjMnKVxuICAgKiAtIGB1cmxgOiBVUkwgZXh0ZXJuYSAoZWo6ICdodHRwczovL2V4YW1wbGUuY29tJylcbiAgICogLSBgYWN0aW9uX3R5cGVgOiBUaXBvIGRlIGFjY2nDs24gcGVyc29uYWxpemFkYVxuICAgKiAtIENhbXBvcyBjb24gcHJlZmlqbyBgYWN0aW9uX2A6IERhdG9zIGFkaWNpb25hbGVzXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWQgZGUgbGEgbm90aWZpY2FjacOzblxuICAgKiBAcmV0dXJucyBBY2Npw7NuIGRlIG5hdmVnYWNpw7NuIGV4dHJhw61kYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFBheWxvYWQgZGVzZGUgZWwgYmFja2VuZDpcbiAgICogLy8geyByb3V0ZTogJy9vcmRlcnMvMTIzJywgYWN0aW9uX3R5cGU6ICd2aWV3X29yZGVyJywgYWN0aW9uX29yZGVySWQ6ICcxMjMnIH1cbiAgICpcbiAgICogY29uc3QgYWN0aW9uID0gbWVzc2FnaW5nLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvblR5cGU6ICd2aWV3X29yZGVyJywgYWN0aW9uRGF0YTogeyBvcmRlcklkOiAnMTIzJyB9IH1cbiAgICogYGBgXG4gICAqL1xuICBleHRyYWN0QWN0aW9uRnJvbURhdGEoZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBOb3RpZmljYXRpb25BY3Rpb24ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbjogTm90aWZpY2F0aW9uQWN0aW9uID0ge307XG5cbiAgICAvLyBSdXRhIGludGVybmFcbiAgICBpZiAoZGF0YVsncm91dGUnXSkge1xuICAgICAgYWN0aW9uLnJvdXRlID0gZGF0YVsncm91dGUnXTtcbiAgICB9XG5cbiAgICAvLyBVUkwgZXh0ZXJuYVxuICAgIGlmIChkYXRhWyd1cmwnXSkge1xuICAgICAgYWN0aW9uLnVybCA9IGRhdGFbJ3VybCddO1xuICAgIH1cblxuICAgIC8vIFRpcG8gZGUgYWNjacOzblxuICAgIGlmIChkYXRhWydhY3Rpb25fdHlwZSddKSB7XG4gICAgICBhY3Rpb24uYWN0aW9uVHlwZSA9IGRhdGFbJ2FjdGlvbl90eXBlJ107XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgcGFyYW1zIChwdWVkZSB2ZW5pciBjb21vIEpTT04gc3RyaW5nKVxuICAgIGlmIChkYXRhWydxdWVyeV9wYXJhbXMnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0aW9uLnF1ZXJ5UGFyYW1zID0gSlNPTi5wYXJzZShkYXRhWydxdWVyeV9wYXJhbXMnXSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2kgbm8gZXMgSlNPTiB2w6FsaWRvLCBpbnRlbnRhciBwYXJzZWFyIGNvbW8ga2V5PXZhbHVlXG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhkYXRhWydxdWVyeV9wYXJhbXMnXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGF0b3MgYWRpY2lvbmFsZXMgY29uIHByZWZpam8gYWN0aW9uX1xuICAgIGNvbnN0IGFjdGlvbkRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnYWN0aW9uXycpICYmIGtleSAhPT0gJ2FjdGlvbl90eXBlJykge1xuICAgICAgICBjb25zdCBjbGVhbktleSA9IGtleS5yZXBsYWNlKCdhY3Rpb25fJywgJycpO1xuICAgICAgICAvLyBJbnRlbnRhciBwYXJzZWFyIEpTT04gc2kgZXMgcG9zaWJsZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjdGlvbkRhdGFbY2xlYW5LZXldID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFjdGlvbkRhdGFbY2xlYW5LZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYWN0aW9uRGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aW9uLmFjdGlvbkRhdGEgPSBhY3Rpb25EYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogRW1pdGUgbWFudWFsbWVudGUgdW4gZXZlbnRvIGRlIGNsaWNrIGVuIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIMOadGlsIHBhcmEgbWFuZWphciBjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgZm9yZWdyb3VuZCBkb25kZVxuICAgKiBsYSBhcHAgZGVjaWRlIG1vc3RyYXIgdW4gYmFubmVyIGN1c3RvbS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGlmaWNhdGlvbiAtIFBheWxvYWQgZGUgbGEgbm90aWZpY2FjacOzblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG1lc3NhZ2luZy5vbk1lc3NhZ2UoKS5zdWJzY3JpYmUobm90aWZpY2F0aW9uID0+IHtcbiAgICogICAvLyBNb3N0cmFyIGJhbm5lciBjdXN0b21cbiAgICogICB0aGlzLnNob3dCYW5uZXIobm90aWZpY2F0aW9uLCAoKSA9PiB7XG4gICAqICAgICAvLyBVc3VhcmlvIGhpem8gY2xpY2sgZW4gZWwgYmFubmVyXG4gICAqICAgICBtZXNzYWdpbmcuaGFuZGxlTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uKTtcbiAgICogICB9KTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgaGFuZGxlTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25QYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25DbGlja1N1YmplY3QubmV4dCh7XG4gICAgICBub3RpZmljYXRpb24sXG4gICAgICBhY3Rpb24sXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdW5hIG5vdGlmaWNhY2nDs24gdGllbmUgYWNjacOzbiBkZSBuYXZlZ2FjacOzbi5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBkZWwgcGF5bG9hZFxuICAgKiBAcmV0dXJucyB0cnVlIHNpIHRpZW5lIHJvdXRlIG8gdXJsXG4gICAqL1xuICBoYXNOYXZpZ2F0aW9uQWN0aW9uKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhKGRhdGFbJ3JvdXRlJ10gfHwgZGF0YVsndXJsJ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlYSB1biBxdWVyeSBzdHJpbmcgZW4gdW4gb2JqZXRvLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIGlmICghcXVlcnlTdHJpbmcpIHJldHVybiBwYXJhbXM7XG5cbiAgICAvLyBSZW1vdmVyID8gaW5pY2lhbCBzaSBleGlzdGVcbiAgICBjb25zdCBjbGVhblF1ZXJ5ID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aCgnPycpID8gcXVlcnlTdHJpbmcuc2xpY2UoMSkgOiBxdWVyeVN0cmluZztcblxuICAgIGZvciAoY29uc3QgcGFpciBvZiBjbGVhblF1ZXJ5LnNwbGl0KCcmJykpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChrZXkpXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSB8fCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuIl19
|