@sunbird-cb/cbp-ai 0.1.36 → 0.1.38
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/esm2022/lib/components/approval-request-form/approval-request-form.component.mjs +5 -2
- package/esm2022/lib/components/designation-approval-request-form/designation-approval-request-form.component.mjs +9 -3
- package/esm2022/lib/components/list-popup/list-popup.component.mjs +2 -2
- package/esm2022/lib/components/review-request/review-request.component.mjs +4 -3
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +3 -3
- package/esm2022/lib/components/view-cbp-plan/view-cbp-plan.component.mjs +11 -2
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +3 -2
- package/esm2022/lib/modules/shared/services/shared.service.mjs +1 -1
- package/fesm2022/sunbird-cb-cbp-ai.mjs +31 -11
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/approval-request-form/approval-request-form.component.d.ts.map +1 -1
- package/lib/components/designation-approval-request-form/designation-approval-request-form.component.d.ts.map +1 -1
- package/lib/components/review-request/review-request.component.d.ts.map +1 -1
- package/lib/components/view-cbp-plan/view-cbp-plan.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/lib/modules/shared/services/shared.service.d.ts +1 -0
- package/lib/modules/shared/services/shared.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.38.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.36.tgz +0 -0
|
@@ -965,4 +965,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
965
965
|
type: HostListener,
|
|
966
966
|
args: ['window:resize', ['$event']]
|
|
967
967
|
}] } });
|
|
968
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxZQUFZO0FBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7O0FBRXBDLCtFQUErRTtBQUUvRSxNQUFNLGNBQWMsR0FBRztJQUNyQixhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLG9CQUFvQixFQUFFLDBCQUEwQjtJQUNoRCxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsa0JBQWtCLEVBQUUsd0JBQXdCO0lBQzVDLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6QyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7SUFDbEQsZ0JBQWdCLEVBQUUseUNBQXlDO0lBQzNELG1CQUFtQixFQUFFLHVDQUF1QztJQUM1RCxjQUFjLEVBQUUsMkNBQTJDO0lBQzNELGdDQUFnQyxFQUFFLDZDQUE2QztJQUMvRSwyQ0FBMkMsRUFBRSw2Q0FBNkM7SUFDMUYsbUJBQW1CLEVBQUUsZ0NBQWdDO0lBQ3JELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxZQUFZLEVBQUUsaUNBQWlDO0lBQy9DLFdBQVcsRUFBRSw0QkFBNEI7SUFDekMsY0FBYyxFQUFFLDRCQUE0QjtJQUM1QyxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsNEJBQTRCLEVBQUUsMkNBQTJDO0lBQ3pFLHFCQUFx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RTtZQUMxQixPQUFPLFFBQVEsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQU87UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUN6RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDMUIsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxPQUFPO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDbkgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzFCLE9BQU8sUUFBUSxDQUFBO1FBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDUCxDQUFDOytHQW4vQlUsYUFBYTttSEFBYixhQUFhLGNBSFosTUFBTTs7NEZBR1AsYUFBYTtrQkFKekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7MkhBZ0JDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbi8vSW5qZWN0YWJsZVxuaW1wb3J0IHsgSG9zdExpc3RlbmVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSW5pdFNlcnZpY2UgfSBmcm9tICcuL2luaXQuc2VydmljZSc7XG4vLyBpbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tICcuLi8uLi8uLi8uLi9hc3NldHMvanNvbmZpbGVzL2NvbmZpZ3VyYXRpb25zLmpzb24nXG5cbmNvbnN0IEFQSV9FTkRfUE9JTlRTID0ge1xuICBGRVRDSF9DT1VSU0VTOiAnYXBpL3YxL2NvdXJzZS92Mi9leHBsb3JlJyxcbiAgRkVUQ0hfUE9TVEFMX0NPVVJTRVM6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBGRVRDSF9SQUlMV0FZX0NPVVJTRVM6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBGRVRDSF9IQUxMX09GX0ZBTUU6ICdhcGkvdjEvaGFsbG9mZmFtZS9yZWFkJyxcbiAgTkxXX0ZPUk1fUkVBRDogJ2FwaXMvdjEvc3RhdGljL2Zvcm0vdjEvcmVhZCcsXG4gIEZFVENIX1RFTkRFUlM6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBHRVRfU1RBVEVfQ0VOVEVSOiAnY2JwLXRwYy1haS9hcGkvdjEvc3RhdGUtY2VudGVyJyxcbiAgR0VUX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YzL3JvbGUtbWFwcGluZy9nZW5lcmF0ZScsXG4gIERFTEVURV9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvZGVsZXRlJyxcbiAgR0VUX0RFUEFSVE1FTlQ6ICdjYnAtdHBjLWFpL2FwaS92MS9kZXBhcnRtZW50L3N0YXRlLWNlbnRlcicsXG4gIEdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3N0YXRlLWNlbnRlcicsXG4gIEdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSX0RFUEFSVE1FTlQ6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvc3RhdGUtY2VudGVyJyxcbiAgVVBEQVRFX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZycsXG4gIEdFVF9SRUNPTU1FTkRFRF9DT1VSU0U6ICdjYnAtdHBjLWFpL2FwaS92MS8nLFxuICBTQVZFX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbi9zYXZlJyxcbiAgR0VUX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIFVQREFURV9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBJR09UX1NVR0dFU1RFRF9DT1VSU0U6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBTQVZFX0NPVVJTRV9TVUdHRVNURURfQ09VUlNFOiAnY2JwLXRwYy1haS9hcGkvdjEvY291cnNlL3N1Z2dlc3Rpb25zL3NhdmUnLFxuICBTVUdHRVNURURfQ09VUlNFX0xJU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9jb3Vyc2Uvc3VnZ2VzdGlvbnMnLFxuICBBRERfREVTSUdOQVRJT046ICdjYnAtdHBjLWFpL2FwaS92Mi9yb2xlLW1hcHBpbmcvYWRkLWRlc2lnbmF0aW9uJyxcbiAgTE9HSU46ICdjYnAtdHBjLWFpL2FwaS92MS9hdXRoL2xvZ2luJyxcbiAgTE9HT1VUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXV0aC9sb2dvdXQnLFxuICBERUxFVEVfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUjogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZycsXG4gIEFERF9VU0VSX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS91c2VyLWFkZGVkLWNvdXJzZXMnLFxuICBHRVRfVVNFUl9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvdXNlci1hZGRlZC1jb3Vyc2VzL3JvbGUtbWFwcGluZycsXG4gIEdFVF9VU0VSX1NFTEVDVEVEX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIFVQTE9BRF9ET0NVTUVOVDogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgR0VUX0RPQ1VNRU5UUzogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgREVMRVRFX0ZJTEU6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIFRSSUdHRVJfRklMRV9TVU1NQVJZOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBET1dOTE9BRF9GSUxFOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBERUxFVEVfU1VNTUFSWTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgR0VUX1VTRVJfUFJPRklMRTogJ2NicC10cGMtYWkvYXBpL3YxL3VzZXJzL21lJyxcbiAgR0VUX1VTRVJfUkVDT01NRU5FRF9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY291cnNlLXJlY29tbWVuZGF0aW9ucycsXG4gIERPV05MT0FEX1BERjogJ2NicC10cGMtYWkvYXBpL3YxL3JlcG9ydHMvY2JwLXBsYW4vZG93bmxvYWQnLFxuICBET1dOTE9BRF9QREZfQUNCUDogJ2NicC10cGMtYWkvYXBpL3YxL3JlcG9ydHMvYWNicC1wbGFuL2Rvd25sb2FkJyxcbiAgQ0VOVEVSX0JBU0VEX01JTklTVFJZOiAnY2JwLXRwYy1haS9hcGkvdjEvZGVwYXJ0bWVudC9zdGF0ZS1jZW50ZXInLFxuICBET1dOTE9BRF9DT1VSU0VfUkVDT01NRU5EQVRJT046ICdjYnAtdHBjLWFpL2FwaS92MS9yZXBvcnRzL2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvZG93bmxvYWQnLFxuICBERUxFVEVfQ09VUlNFX1JFQ09NTUVOREFUSU9OOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBVUERBVEVfREVTSUdOQVRJT05fSElFUkFSQ0hZOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3Jlb3JkZXInLFxuICBTRUFSQ0hfUFVCTElDX0RFU0lHTkFUSU9OOiAnYXBpcy9wdWJsaWMvdjgvZGVzaWduYXRpb24vc2VhcmNoJyxcbiAgREFTSEJPQVJEX0FETUlOOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL2NicC1kYXNoYm9hcmQtbWV0cmljcycsXG4gIEdBUF9BTkFMWVNJU19BRE1JTjogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9nYXAtYW5hbHlzaXMnLFxuICBEQVNIQk9BUkRfUFVCTElDOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL215LWRhc2hib2FyZC1tZXRyaWNzJyxcbiAgR0FQX0FOQUxZU0lTX1BVQkxJQzogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9teS1nYXAtYW5hbHlzaXMnLFxuICBNQVRDSEVEX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9tYXRjaC1kZXNpZ25hdGlvbnMnLFxuICBHRVRfQVBQUk9WQUxfUkVRVUVTVFM6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cy9saXN0JyxcbiAgU0VBUkNIX1BVQkxJQ19NRE86ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cy9tZG8tYWRtaW5zJyxcbiAgU0FWRV9BUFBST1ZBTF9SRVFVRVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvc2VuZCcsXG4gIFZJRVdfQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzJyxcbiAgUkVWT0tFX0FQUFJPVkFMX1JFUVVFU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cycsXG4gIFNBVkVfREVTSUdOQVRJT05fQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2Rlc2lnbmF0aW9uLWFwcHJvdmFsL2NyZWF0ZScsXG4gIFZJRVdfTURPX0FQUFJPVkFMX1JFUVVFU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9yZWFkJyxcbiAgQVBQUk9WRV9BTkRfUFVCTElTSF9NRE9fQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3B1Ymxpc2gnLFxuICBSRUpFQ1RfQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3JlamVjdCcsXG4gIFJFSkVDVF9JVEVNX0FQUFJPVkFMX1JFUVVFU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9pdGVtcy9yZWplY3QnLFxuICBNRE9fREVTSUdOQVRJT05fU0VBUkNIOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9kZXNpZ25hdGlvbi9zZWFyY2gnLFxuICBNRE9fQUREX1VTRVJfQ09VUlNFOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvY291cnNlL2FkZCcsXG4gIE1ET19TVUdHRVNURURfQ09VUlNFX0xJU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL2NvdXJzZS9zdWdnZXN0aW9ucycsXG4gIE1ET19ST0xFX01BUFBJTkdfVVBEQVRFOidhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9pdGVtcy91cGRhdGUnXG5cbn1cblxuXG5cbi8vIEBEaXJlY3RpdmUoKVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBTaGFyZWRTZXJ2aWNlIHtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnkgPSB7fVxuICBiYXNlVXJsOiBzdHJpbmdcbiAgY29uZmlnRGV0YWlsczogYW55XG4gIG1kb0Jhc2VVcmw6IGFueVxuICBtZG9Db25maWdEZXRhaWxzOiBhbnlcbiAgc2NyZWVuV2lkdGg6IG51bWJlcjtcbiAgaGVhZGVyczogYW55XG4gIHN1bW1hcnlUcmlnZ2VyRXhlY3V0ZWQgPSBuZXcgU3ViamVjdCgpXG4gIGxvZ2luU3VjY2VzcyA9IG5ldyBTdWJqZWN0KClcbiAgY2hlY2tSb2xlTWFwcGluZ0Zvcm1WYWxpZGF0aW9uID0gbmV3IFN1YmplY3QoKVxuICB1cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeVN1YmplY3QgPSBuZXcgU3ViamVjdCgpXG4gIGZyb21NZG9Qb3J0YWwgPSBmYWxzZVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQpIHtcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBpbml0U3ZjOiBJbml0U2VydmljZSxcbiAgKSB7XG4gICAgaWYgKGluaXRTdmMgJiYgdGhpcy5pbml0U3ZjLmJhc2VVcmwgJiYgdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmluaXRTdmMnLCB0aGlzLmluaXRTdmMpXG4gICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmluaXRTdmMuYmFzZVVybFxuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb25maURldGFpbHMoKVxuICAgIH1cbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICB9XG5cbiAgc2V0Q29uZmlEZXRhaWxzKGNvbmZpZ0RldGFpbHM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoY29uZmlnRGV0YWlscykge1xuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gY29uZmlnRGV0YWlsc1xuICAgICAgdGhpcy5iYXNlVXJsID0gY29uZmlnRGV0YWlscy5wb3J0YWxVUkxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRDb25maWdEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IHJlc3BvbnNlXG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHJlc3BvbnNlLnBvcnRhbFVSTFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgZ2V0Q29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ0RldGFpbHM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldENvbmZpZ0RldGFpbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbicpO1xuICB9XG5cblxuXG4gIGdldGNvdXJzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRQb3N0YWxjb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUE9TVEFMX0NPVVJTRVN9YClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRlRmVhdHVyZUNvdXJzZXMocmVzcG9uc2UucmVzdWx0LmNvbnRlbnQpXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJhaWx3YXljb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUkFJTFdBWV9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRIYWxsT2ZGYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX0hBTExfT0ZfRkFNRX1gLCBudWxsKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBmb3JtYXRlRmVhdHVyZUNvdXJzZXMoZmVhdHVyZUNvdXJzZXM6IGFueSkge1xuICAgIGNvbnN0IGZvcm1hdGVkRmVhdHVyZUNvdXJzZXMgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZE5ld3Nyb29tID0gW107XG4gICAgY29uc3QgZm9ybWF0ZWRQaG90b2dhbGxhcnkgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZFRlc3RpbW9uaWFsID0gW107XG4gICAgaWYgKGZlYXR1cmVDb3Vyc2VzKSB7XG4gICAgICBmZWF0dXJlQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICAgIGlmIChjb3Vyc2UucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgcG9zdGVySW1hZ2U6IGNvdXJzZS5wb3N0ZXJJbWFnZSxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogY291cnNlLm9yZ2FuaXNhdGlvblswXSA/IGNvdXJzZS5vcmdhbmlzYXRpb25bMF0gOiAnS2FybWF5b2dpIEJoYXJhdCcsXG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjcmVhdG9yTG9nbzogY291cnNlLmNyZWF0b3JMb2dvIHx8ICcnLFxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMudGltZUNvbnZlcnQoY291cnNlLmR1cmF0aW9uKSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRGZWF0dXJlQ291cnNlcy5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnTmV3c3Jvb20nKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZE5ld3Nyb29tLnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291cnNlLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdQaG90byBHYWxsZXJ5Jykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZFBob3RvZ2FsbGFyeS5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVzdGltb25pYWxzJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YCxcbiAgICAgICAgICAgIG1pbWVUeXBlOiBjb3Vyc2UubWltZVR5cGUsXG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgYXJ0aWZhY3RVcmw6IGNvdXJzZS5hcnRpZmFjdFVybCxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRUZXN0aW1vbmlhbC5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY291cnNlOiBmb3JtYXRlZEZlYXR1cmVDb3Vyc2VzLCBuZXdzcm9vbTogZm9ybWF0ZWROZXdzcm9vbSwgZ2FsbGFyeTogZm9ybWF0ZWRQaG90b2dhbGxhcnksIHRlc3RpbW9uaWxzOiBmb3JtYXRlZFRlc3RpbW9uaWFsIH1cbiAgfVxuXG4gIHRpbWVDb252ZXJ0KGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgIHZhciBudW0gPSBkdXJhdGlvbjtcbiAgICAgIHZhciBob3VycyA9IChudW0gLyAzNjAwKTtcbiAgICAgIHZhciByaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzKTtcbiAgICAgIHZhciBtaW51dGVzID0gKGhvdXJzIC0gcmhvdXJzKSAqIDYwO1xuICAgICAgdmFyIHJtaW51dGVzID0gTWF0aC5yb3VuZChtaW51dGVzKTtcbiAgICAgIGlmIChybWludXRlcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmhvdXJzICsgXCJoXCI7XG4gICAgICB9IGVsc2UgaWYgKHJob3VycyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcm1pbnV0ZXMgKyBcIm1cIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHJob3VycyArIFwiaCBcIiArIHJtaW51dGVzICsgXCJtXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGdldENsaWVudExpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoJy4vYXNzZXRzL2pzb25maWxlcy9jbGllbnQtbGlzdC5qc29uJyk7XG4gIH1cblxuICBnZXRUZW5kZXJzKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcInRlbmRlclwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiRGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXROb3RpZmljYXRpb25zKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcIm5vdGlmaWNhdGlvblwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiZGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgZ2V0Rm9ybVJlYWREYXRhKHJlcTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTkxXX0ZPUk1fUkVBRH1gLCByZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG5cbiAgZ2V0TWluaXN0cnlEYXRhKG1pbmlzdHJ5VHlwZSkge1xuICAgIGxldCBzdWJfb3JnX3R5cGUgPSAnJ1xuICAgIGlmIChtaW5pc3RyeVR5cGUgPT0gJ21pbmlzdHJ5Jykge1xuICAgICAgc3ViX29yZ190eXBlID0gJ21pbmlzdHJ5J1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJfb3JnX3R5cGUgPSAnc3RhdGUnXG4gICAgfVxuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5iYXNlVXJsJywgdGhpcy5iYXNlVXJsKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9TVEFURV9DRU5URVJ9Lz9zdWJfb3JnX3R5cGU9JHtzdWJfb3JnX3R5cGV9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdlbmVyYXRlUm9sZU1hcHBpbmcocmVxQm9keSwgZmlsZXM/OiBGaWxlIHwgRmlsZVtdKSB7XG4gICAgY29uc29sZS5sb2coJ3JlcUJvZHktLScsIHJlcUJvZHkpO1xuICAgIGNvbnNvbGUubG9nKCdmaWxlcy0tLScsIGZpbGVzKVxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgZmllbGRzXG4gICAgaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5zdGF0ZV9jZW50ZXJfbmFtZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfbmFtZScsIHJlcUJvZHkuc3RhdGVfY2VudGVyX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5LmRlcGFydG1lbnRfaWQpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIHJlcUJvZHkuZGVwYXJ0bWVudF9pZCk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuZGVwYXJ0bWVudF9uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfbmFtZScsIHJlcUJvZHkuZGVwYXJ0bWVudF9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5pbnN0cnVjdGlvbikge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdpbnN0cnVjdGlvbicsIHJlcUJvZHkuaW5zdHJ1Y3Rpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IGNicERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicpIHx8ICd7fScpO1xuICAgIGNvbnN0IG9yZ1R5cGUgPVxuICAgICAgY2JwRGF0YT8ubWluaXN0cnk/LnNiT3JnVHlwZSB8fFxuICAgICAgY2JwRGF0YT8ub3JnX3R5cGUgfHxcbiAgICAgICcnO1xuICAgIGlmIChvcmdUeXBlKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ190eXBlJywgb3JnVHlwZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIG11bHRpcGxlIG9yIHNpbmdsZSBmaWxlXG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWxlcykpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2luZ2xlIGZpbGVcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZXMsIGZpbGVzLm5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlYnVnIEZvcm1EYXRhIGNvbnRlbnRcbiAgICBjb25zb2xlLmxvZyhcIkZvcm1EYXRhIGNvbnRlbnRzOlwiKTtcbiAgICBmb3JtRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06IEZJTEUgLT4gJHt2YWx1ZS5uYW1lfSAoJHt2YWx1ZS5zaXplfSBieXRlcylgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR31gLCBmb3JtRGF0YSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSkpO1xuICB9XG5cblxuXG4gIGdldERlcGFydG1lbnRMaXN0KG1pbmlzdHJ5SWQpIHtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ERVBBUlRNRU5UfS8ke21pbmlzdHJ5SWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlcihzdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0vJHtzdGF0ZV9jZW50ZXJfaWR9P2xvYWRfY2JwX3BsYW5zPXRydWVgLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgaWYgKGRlcGFydG1lbnRfaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfS9kZXBhcnRtZW50LyR7ZGVwYXJ0bWVudF9pZH0/bG9hZF9jYnBfcGxhbnM9dHJ1ZWAsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfT9sb2FkX2NicF9wbGFucz10cnVlYCwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIHVwZGF0ZVJvbGVNYXBwaW5nKHJvbGVfbWFwcGluZ19pZCwgcmVxQm9keSkge1xuICAgICBpZiAodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5NRE9fUk9MRV9NQVBQSU5HX1VQREFURX1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfUk9MRV9NQVBQSU5HfS8ke3JvbGVfbWFwcGluZ19pZH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVJvbGVNYXBwaW5nKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ST0xFX01BUFBJTkd9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICByb2xlX21hcHBpbmdfaWQ6IHJvbGVfbWFwcGluZ19pZFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUkVDT01NRU5ERURfQ09VUlNFfS9jb3Vyc2UtcmVjb21tZW5kYXRpb25zL2dlbmVyYXRlYCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhyb2xlTWFwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9SRUNPTU1FTkRFRF9DT1VSU0V9L2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvcm9sZS1tYXBwaW5nLyR7cm9sZU1hcElkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9DT1VSU0VTfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgdXBkYXRlQ291cnNlKHJlcUJvZHksIGNicF9wbGFuX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX0NPVVJTRVN9LyR7Y2JwX3BsYW5faWR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldENvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfQ09VUlNFU30/cm9sZV9tYXBwaW5nX2lkPSR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRJR09UU3VnZ2VzdGVkQ291cnNlcyhyZXFCb2R5KSB7XG4gICAgLy8gVXNlIHRoZSByZXFCb2R5IHBhcmFtZXRlciBwYXNzZWQgZnJvbSB0aGUgY29tcG9uZW50XG4gICAgLy8gSWYgbm8gcmVxQm9keSBpcyBwcm92aWRlZCwgdXNlIGRlZmF1bHQgc3RydWN0dXJlXG4gICAgbGV0IHJlcSA9IHJlcUJvZHkgfHwge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcInByaW1hcnlDYXRlZ29yeVwiOiBbXCJDb3Vyc2VcIl0sXG4gICAgICAgICAgXCJzdGF0dXNcIjogW1wiTGl2ZVwiXSxcbiAgICAgICAgICBcImNvdXJzZUNhdGVnb3J5XCI6IFtcIkNvdXJzZVwiXVxuICAgICAgICB9LFxuICAgICAgICBcImZpZWxkc1wiOiBbXCJwb3N0ZXJJbWFnZVwiLCBcImRlc2NyaXB0aW9uXCIsIFwibmFtZVwiXSxcbiAgICAgICAgXCJsaW1pdFwiOiAxMixcbiAgICAgICAgXCJvZmZzZXRcIjogMFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnZ2V0SUdPVFN1Z2dlc3RlZENvdXJzZXMgZmluYWwgcmVxdWVzdDonLCBKU09OLnN0cmluZ2lmeShyZXEsIG51bGwsIDIpKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0U3VnZ2VzdGVkQ291cnNlcyhyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlU3VnZ2VzdGVkQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9DT1VSU0VfU1VHR0VTVEVEX0NPVVJTRX1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkRGVzaWduYXRpb24ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5BRERfREVTSUdOQVRJT059YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHBlcmZvcm1Mb2dpbihyZXFCb2R5KSB7XG4gICAgY29uc3QgYm9keSA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ3VzZXJuYW1lJywgcmVxQm9keS51c2VybmFtZSlcbiAgICAgIC5zZXQoJ3Bhc3N3b3JkJywgcmVxQm9keS5wYXNzd29yZCk7XG4gICAgY29uc29sZS5sb2coJ2luIGxvZ2luIHVhdCcpXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTE9HSU59YCwgYm9keS50b1N0cmluZygpLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9nb3V0KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5MT0dPVVR9YCwgJycsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZXRDQlBQbGFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLmNicFBsYW5GaW5hbE9iaikpXG4gIH1cblxuICBnZXRDQlBQbGFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxldCBjYnBQbGFuRmluYWxPYmogPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonKSlcbiAgICByZXR1cm4gY2JwUGxhbkZpbmFsT2JqXG4gIH1cblxuICBjaGVja0lmTG9naW4oKSB7XG4gICAgbGV0IGZsYWcgPSBmYWxzZVxuICAgIGxldCBsb2dpbkRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJylcbiAgICBpZiAobG9naW5EYXRhICYmIEpTT04ucGFyc2UobG9naW5EYXRhKVsnYWNjZXNzX3Rva2VuJ10pIHtcbiAgICAgIGZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWcgPSBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gZmxhZ1xuICB9XG5cbiAgZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHVybCA9ICcnXG4gICAgaWYgKGRlcGFydG1lbnRfaWQgJiYgZGVwYXJ0bWVudF9pZCAhPT0gJ251bGwnICYmIGRlcGFydG1lbnRfaWQgIT09ICd1bmRlZmluZWQnICYmIGRlcGFydG1lbnRfaWQgIT09IHVuZGVmaW5lZCAmJiBkZXBhcnRtZW50X2lkICE9PSBudWxsKSB7XG4gICAgICB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZkZXBhcnRtZW50X2lkPSR7ZGVwYXJ0bWVudF9pZH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9YFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4odXJsLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkVXNlckNvdXJzZShyZXFCb2R5KSB7XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX0FERF9VU0VSX0NPVVJTRX1gKVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkFERF9VU0VSX0NPVVJTRVN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIGdldFVzZXJDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfQ09VUlNFU30vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldENvbXBldGVuY3lKc29uKCkge1xuICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS9hc3NldHMvanNvbmZpbGVzL2NvbXBldGVuY2llcy5qc29uYClcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0vdHJhaW5pbmctcGxhLWFpL2Fzc2V0cy9qc29uZmlsZXMvY29tcGV0ZW5jaWVzLmpzb25gLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICAgIC8vIHRoaXMuaHR0cC5nZXQ8YW55W10+KCcvYXNzZXRzL2pzb25maWxlcy9jb21wZXRlbmNpZXMuanNvbicpXG4gIH1cblxuICBjb252ZXJ0KHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFzZWNvbmRzIHx8IHNlY29uZHMgPD0gMCkge1xuICAgICAgcmV0dXJuICdOL0EnO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsU2Vjb25kcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XG5cbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICAvLyBGb3IgZHVyYXRpb25zIHdpdGggaG91cnMsIHNob3cgaG91cnMgYW5kIG1pbnV0ZXMgKGUuZy4sIFwiM2ggMTBtXCIpXG4gICAgICBpZiAobWludXRlcyA+IDApIHtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzfW1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfWhgO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWludXRlcyA+IDApIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgdW5kZXIgYW4gaG91ciwgc2hvdyBtaW51dGVzIGFuZCBzZWNvbmRzIChlLmcuLCBcIjU4bSAzc1wiKVxuICAgICAgaWYgKHJlbWFpbmluZ1NlY29uZHMgPiAwKSB7XG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfW0gJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgdW5kZXIgYSBtaW51dGUsIHNob3cgc2Vjb25kcyBvbmx5XG4gICAgICByZXR1cm4gYCR7cmVtYWluaW5nU2Vjb25kc31zYDtcbiAgICB9XG4gIH1cblxuICBnZXRVc2VyUHJvZmlsZSgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9QUk9GSUxFfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRVc2VyUmVjb21tZW5kYXRpb25Db3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfU0VMRUNURURfQ09VUlNFU30/cm9sZV9tYXBwaW5nX2lkPSR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBkb3dubG9hZFBkZihzdGF0ZV9jZW50ZXJfaWQ6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgY29udGV4dCA9PT0gJ2FjYnAnXG4gICAgICAgID8gQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGX0FDQlBcbiAgICAgICAgOiBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREY7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZW5kcG9pbnR9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0qJmxhbmd1YWdlPSR7bGFuZ3VhZ2V9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgICAgY29uc29sZS5sb2coJ2NvbnRlbnREaXNwb3NpdGlvbicsIHJlcy5oZWFkZXJzKVxuICAgICAgbGV0IGZpbGVuYW1lID0gYENCUF9SZXBvcnRfJHtzdGF0ZV9jZW50ZXJfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSk7XG4gIH1cblxuICBkb3dubG9hZFBkZkZvckRlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGVuZHBvaW50ID1cbiAgICAgIGNvbnRleHQgPT09ICdhY2JwJ1xuICAgICAgICA/IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERl9BQ0JQXG4gICAgICAgIDogQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke2VuZHBvaW50fT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9JmRlcGFydG1lbnRfaWQ9JHtkZXBhcnRtZW50X2lkfSZsYW5ndWFnZT0ke2xhbmd1YWdlfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjb250ZW50RGlzcG9zaXRpb24nLCByZXMuaGVhZGVycylcbiAgICAgIGxldCBmaWxlbmFtZSA9IGBDQlBfUmVwb3J0XyR7c3RhdGVfY2VudGVyX2lkfV8ke2RlcGFydG1lbnRfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDZW50ZXJCYXNlZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgLy8gbGV0IHJlcUJvZHkgPSB7IFwicmVxdWVzdFwiOiB7IFwiZmlsdGVyc1wiOiB7IFwic3RhdHVzXCI6IDEsIFwibWluaXN0cnlPclN0YXRlVHlwZVwiOiBcIm1pbmlzdHJ5XCIsIFwibWluaXN0cnlPclN0YXRlSWRcIjogc3RhdGVfY2VudGVyX2lkfSwgXCJzb3J0X2J5XCI6IHsgXCJjcmVhdGVkRGF0ZVwiOiBcImRlc2NcIiB9LCBcImxpbWl0XCI6IDk5OTksIFwib2Zmc2V0XCI6IDAsIFwiZmllbGRzXCI6IFtcImlkZW50aWZpZXJcIiwgXCJvcmdOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJwYXJlbnRPcmdOYW1lXCIsIFwibWluaXN0cnlPclN0YXRlSWRcIiwgXCJtaW5pc3RyeU9yU3RhdGVUeXBlXCIsIFwibWluaXN0cnlPclN0YXRlTmFtZVwiLCBcInNiT3JnU3ViVHlwZVwiXSB9IH1cbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5DRU5URVJfQkFTRURfTUlOSVNUUll9LyR7c3RhdGVfY2VudGVyX2lkfT9saW1pdD05OTk5Jm9mZnNldD0wJnN1Yl9vcmdfdHlwZT1taW5pc3RyeWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuXG4gIGRvd25sb2FkUGRmRm9yQ291cnNlUmVjb21tZW5kYXRpb24oc3RhdGVfY2VudGVyX2lkKSB7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9DT1VSU0VfUkVDT01NRU5EQVRJT059P3JvbGVfbWFwcGluZ19pZD0ke3N0YXRlX2NlbnRlcl9pZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgICBsZXQgZmlsZW5hbWUgPSBgQ09VUlNFX1JFQ09NTUVOREFUSU9OX1JlcG9ydF8ke3N0YXRlX2NlbnRlcl9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwbG9hZERvY3VtZW50KHJlcUJvZHksIGZpbGU/OiBGaWxlKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIC8vICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgZmllbGRzXG4gICAgLy8gaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAocmVxQm9keS5kZXBhcnRtZW50X2lkKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfaWQnLCByZXFCb2R5LmRlcGFydG1lbnRfaWQpO1xuICAgIC8vIH1cblxuXG5cbiAgICAvLyBpZihyZXFCb2R5LmRvY3VtZW50TmFtZSkge1xuICAgIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkb2N1bWVudF9uYW1lJywgcmVxQm9keS5kb2N1bWVudE5hbWUpO1xuICAgIC8vIH1cbiAgICAvLyBBZGQgZmlsZSBpZiBwcm92aWRlZFxuICAgIC8vIGlmIChmaWxlKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBMT0FEX0RPQ1VNRU5UfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRVcGxvYWRlZERvY3VtZW50cyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHJlcUJvZHkpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldChrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfRE9DVU1FTlRTfWAsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBwYXJhbXNcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGUoZmlsZUlkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX0ZJTEV9LyR7ZmlsZUlkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB0cmlnZ2VyRmlsZVN1bW1hcnkoZmlsZUlkKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIC8vIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfRklMRX0vJHtmaWxlSWR9L3N1bW1hcnlgLCB7fSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRvd25sb2FkRmlsZShmaWxlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9GSUxFfS8ke2ZpbGVJZH0vZG93bmxvYWRgLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVN1bW1hcnkoZmlsZUlkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX1NVTU1BUll9LyR7ZmlsZUlkfS9zdW1tYXJ5YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZVJlY29tbWVuZGVkQ291cnNlKHJvbGVNYXBwaW5nSWQ6IHN0cmluZywgY291cnNlSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oXG4gICAgICBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfQ09VUlNFX1JFQ09NTUVOREFUSU9OfS8ke3JvbGVNYXBwaW5nSWR9L2NvdXJzZS8ke2NvdXJzZUlkZW50aWZpZXJ9YCxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIGdldENicFBsYW5zV2l0aFNlbGVjdGVkQ291cnNlcygpOiBhbnlbXSB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5jYnBQbGFuRmluYWxPYmo7XG5cbiAgICByZXR1cm4gc291cmNlPy5yb2xlX21hcHBpbmdfZ2VuZXJhdGlvblxuICAgICAgPy5mbGF0TWFwKChyb2xlOiBhbnkpID0+IHJvbGUuY2JwX3BsYW5zIHx8IFtdKVxuICAgICAgPy5maWx0ZXIoXG4gICAgICAgIChwbGFuOiBhbnkpID0+XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShwbGFuLnNlbGVjdGVkX2NvdXJzZXMpICYmXG4gICAgICAgICAgcGxhbi5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aCA+IDBcbiAgICAgICkgfHwgW107XG4gIH1cblxuICBnZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVycykge1xuICAgIFxuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcImlkZW50aWZpZXJcIjogaWRlbnRpZmllcnMsXG5cblxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcbiAgICAgICAgICAgIFwiTGl2ZVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZpZWxkc1wiOiBbXG4gICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICAgIFwiaWRlbnRpZmllclwiLFxuICAgICAgICAgIFwiYXZnUmF0aW5nXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJsaW1pdFwiOiAxMDAwLFxuICAgICAgICBcIm9mZnNldFwiOiAwLFxuICAgICAgICBcInNvcnRfYnlcIjoge31cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX1NVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICB9XG5cbiAgdXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHkocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ERVNJR05BVElPTl9ISUVSQVJDSFl9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcUJvZHkpIHtcbiAgICBpZiAodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX0RFU0lHTkFUSU9OX1NFQVJDSH1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNFQVJDSF9QVUJMSUNfREVTSUdOQVRJT059YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIGdldERhc2hib2FyZEFkbWluKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREFTSEJPQVJEX0FETUlOfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRHYXBBbmFseXNpc0FkbWluKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0FQX0FOQUxZU0lTX0FETUlOfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRQdWJsaWMocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5EQVNIQk9BUkRfUFVCTElDfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRHYXBBbmFseXNpc1B1YmxpYyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdBUF9BTkFMWVNJU19QVUJMSUN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldE1hdGNoZWRSb2xlTWFwcGluZyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLk1BVENIRURfUk9MRV9NQVBQSU5HfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRBcHByb3ZhbFJlcXVlc3RzKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfQVBQUk9WQUxfUkVRVUVTVFN9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVBcHByb3ZhbFJlcXVlc3QocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNlYXJjaFB1YmxpY21kbyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNFQVJDSF9QVUJMSUNfTURPfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB2aWV3QXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVklFV19BUFBST1ZBTF9SRVFVRVNUfS8ke3JlcXVlc3RfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHZpZXdNRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3RfaWQpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuVklFV19NRE9fQVBQUk9WQUxfUkVRVUVTVH0vJHtyZXF1ZXN0X2lkfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGFwcHJvdmVBbmRQdWJsaXNoTURPQXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0KSB7XG4gICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5BUFBST1ZFX0FORF9QVUJMSVNIX01ET19BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHJlamVjdE1ET0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdCkge1xuICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuUkVKRUNUX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxdWVzdClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcmVqZWN0SXRlbU1ET0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdCkge1xuICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuUkVKRUNUX0lURU1fQVBQUk9WQUxfUkVRVUVTVH1gLCByZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICByZXZva2VBcHByb3ZhbFJlcXVlc3QocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5SRVZPS0VfQVBQUk9WQUxfUkVRVUVTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2F2ZURlc2lnbmF0aW9uQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9ERVNJR05BVElPTl9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxufVxuXG4iXX0=
|
|
968
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxZQUFZO0FBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7O0FBRXBDLCtFQUErRTtBQUUvRSxNQUFNLGNBQWMsR0FBRztJQUNyQixhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLG9CQUFvQixFQUFFLDBCQUEwQjtJQUNoRCxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsa0JBQWtCLEVBQUUsd0JBQXdCO0lBQzVDLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6QyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7SUFDbEQsZ0JBQWdCLEVBQUUseUNBQXlDO0lBQzNELG1CQUFtQixFQUFFLHVDQUF1QztJQUM1RCxjQUFjLEVBQUUsMkNBQTJDO0lBQzNELGdDQUFnQyxFQUFFLDZDQUE2QztJQUMvRSwyQ0FBMkMsRUFBRSw2Q0FBNkM7SUFDMUYsbUJBQW1CLEVBQUUsZ0NBQWdDO0lBQ3JELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxZQUFZLEVBQUUsaUNBQWlDO0lBQy9DLFdBQVcsRUFBRSw0QkFBNEI7SUFDekMsY0FBYyxFQUFFLDRCQUE0QjtJQUM1QyxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsNEJBQTRCLEVBQUUsMkNBQTJDO0lBQ3pFLHFCQUFx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RTtZQUMxQixPQUFPLFFBQVEsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQU87UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUN6RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDMUIsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxPQUFPO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDbkgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzFCLE9BQU8sUUFBUSxDQUFBO1FBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDUCxDQUFDOytHQXAvQlUsYUFBYTttSEFBYixhQUFhLGNBSFosTUFBTTs7NEZBR1AsYUFBYTtrQkFKekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7MkhBaUJDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbi8vSW5qZWN0YWJsZVxuaW1wb3J0IHsgSG9zdExpc3RlbmVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSW5pdFNlcnZpY2UgfSBmcm9tICcuL2luaXQuc2VydmljZSc7XG4vLyBpbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tICcuLi8uLi8uLi8uLi9hc3NldHMvanNvbmZpbGVzL2NvbmZpZ3VyYXRpb25zLmpzb24nXG5cbmNvbnN0IEFQSV9FTkRfUE9JTlRTID0ge1xuICBGRVRDSF9DT1VSU0VTOiAnYXBpL3YxL2NvdXJzZS92Mi9leHBsb3JlJyxcbiAgRkVUQ0hfUE9TVEFMX0NPVVJTRVM6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBGRVRDSF9SQUlMV0FZX0NPVVJTRVM6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBGRVRDSF9IQUxMX09GX0ZBTUU6ICdhcGkvdjEvaGFsbG9mZmFtZS9yZWFkJyxcbiAgTkxXX0ZPUk1fUkVBRDogJ2FwaXMvdjEvc3RhdGljL2Zvcm0vdjEvcmVhZCcsXG4gIEZFVENIX1RFTkRFUlM6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBHRVRfU1RBVEVfQ0VOVEVSOiAnY2JwLXRwYy1haS9hcGkvdjEvc3RhdGUtY2VudGVyJyxcbiAgR0VUX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YzL3JvbGUtbWFwcGluZy9nZW5lcmF0ZScsXG4gIERFTEVURV9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvZGVsZXRlJyxcbiAgR0VUX0RFUEFSVE1FTlQ6ICdjYnAtdHBjLWFpL2FwaS92MS9kZXBhcnRtZW50L3N0YXRlLWNlbnRlcicsXG4gIEdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3N0YXRlLWNlbnRlcicsXG4gIEdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSX0RFUEFSVE1FTlQ6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvc3RhdGUtY2VudGVyJyxcbiAgVVBEQVRFX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZycsXG4gIEdFVF9SRUNPTU1FTkRFRF9DT1VSU0U6ICdjYnAtdHBjLWFpL2FwaS92MS8nLFxuICBTQVZFX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbi9zYXZlJyxcbiAgR0VUX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIFVQREFURV9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBJR09UX1NVR0dFU1RFRF9DT1VSU0U6ICdhcGkvdjEvY29udGVudC92MS9zZWFyY2gnLFxuICBTQVZFX0NPVVJTRV9TVUdHRVNURURfQ09VUlNFOiAnY2JwLXRwYy1haS9hcGkvdjEvY291cnNlL3N1Z2dlc3Rpb25zL3NhdmUnLFxuICBTVUdHRVNURURfQ09VUlNFX0xJU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9jb3Vyc2Uvc3VnZ2VzdGlvbnMnLFxuICBBRERfREVTSUdOQVRJT046ICdjYnAtdHBjLWFpL2FwaS92Mi9yb2xlLW1hcHBpbmcvYWRkLWRlc2lnbmF0aW9uJyxcbiAgTE9HSU46ICdjYnAtdHBjLWFpL2FwaS92MS9hdXRoL2xvZ2luJyxcbiAgTE9HT1VUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXV0aC9sb2dvdXQnLFxuICBERUxFVEVfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUjogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZycsXG4gIEFERF9VU0VSX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS91c2VyLWFkZGVkLWNvdXJzZXMnLFxuICBHRVRfVVNFUl9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvdXNlci1hZGRlZC1jb3Vyc2VzL3JvbGUtbWFwcGluZycsXG4gIEdFVF9VU0VSX1NFTEVDVEVEX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIFVQTE9BRF9ET0NVTUVOVDogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgR0VUX0RPQ1VNRU5UUzogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgREVMRVRFX0ZJTEU6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIFRSSUdHRVJfRklMRV9TVU1NQVJZOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBET1dOTE9BRF9GSUxFOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBERUxFVEVfU1VNTUFSWTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgR0VUX1VTRVJfUFJPRklMRTogJ2NicC10cGMtYWkvYXBpL3YxL3VzZXJzL21lJyxcbiAgR0VUX1VTRVJfUkVDT01NRU5FRF9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY291cnNlLXJlY29tbWVuZGF0aW9ucycsXG4gIERPV05MT0FEX1BERjogJ2NicC10cGMtYWkvYXBpL3YxL3JlcG9ydHMvY2JwLXBsYW4vZG93bmxvYWQnLFxuICBET1dOTE9BRF9QREZfQUNCUDogJ2NicC10cGMtYWkvYXBpL3YxL3JlcG9ydHMvYWNicC1wbGFuL2Rvd25sb2FkJyxcbiAgQ0VOVEVSX0JBU0VEX01JTklTVFJZOiAnY2JwLXRwYy1haS9hcGkvdjEvZGVwYXJ0bWVudC9zdGF0ZS1jZW50ZXInLFxuICBET1dOTE9BRF9DT1VSU0VfUkVDT01NRU5EQVRJT046ICdjYnAtdHBjLWFpL2FwaS92MS9yZXBvcnRzL2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvZG93bmxvYWQnLFxuICBERUxFVEVfQ09VUlNFX1JFQ09NTUVOREFUSU9OOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBVUERBVEVfREVTSUdOQVRJT05fSElFUkFSQ0hZOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3Jlb3JkZXInLFxuICBTRUFSQ0hfUFVCTElDX0RFU0lHTkFUSU9OOiAnYXBpcy9wdWJsaWMvdjgvZGVzaWduYXRpb24vc2VhcmNoJyxcbiAgREFTSEJPQVJEX0FETUlOOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL2NicC1kYXNoYm9hcmQtbWV0cmljcycsXG4gIEdBUF9BTkFMWVNJU19BRE1JTjogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9nYXAtYW5hbHlzaXMnLFxuICBEQVNIQk9BUkRfUFVCTElDOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL215LWRhc2hib2FyZC1tZXRyaWNzJyxcbiAgR0FQX0FOQUxZU0lTX1BVQkxJQzogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9teS1nYXAtYW5hbHlzaXMnLFxuICBNQVRDSEVEX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9tYXRjaC1kZXNpZ25hdGlvbnMnLFxuICBHRVRfQVBQUk9WQUxfUkVRVUVTVFM6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cy9saXN0JyxcbiAgU0VBUkNIX1BVQkxJQ19NRE86ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cy9tZG8tYWRtaW5zJyxcbiAgU0FWRV9BUFBST1ZBTF9SRVFVRVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvc2VuZCcsXG4gIFZJRVdfQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzJyxcbiAgUkVWT0tFX0FQUFJPVkFMX1JFUVVFU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cycsXG4gIFNBVkVfREVTSUdOQVRJT05fQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2Rlc2lnbmF0aW9uLWFwcHJvdmFsL2NyZWF0ZScsXG4gIFZJRVdfTURPX0FQUFJPVkFMX1JFUVVFU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9yZWFkJyxcbiAgQVBQUk9WRV9BTkRfUFVCTElTSF9NRE9fQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3B1Ymxpc2gnLFxuICBSRUpFQ1RfQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3JlamVjdCcsXG4gIFJFSkVDVF9JVEVNX0FQUFJPVkFMX1JFUVVFU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9pdGVtcy9yZWplY3QnLFxuICBNRE9fREVTSUdOQVRJT05fU0VBUkNIOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9kZXNpZ25hdGlvbi9zZWFyY2gnLFxuICBNRE9fQUREX1VTRVJfQ09VUlNFOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvY291cnNlL2FkZCcsXG4gIE1ET19TVUdHRVNURURfQ09VUlNFX0xJU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL2NvdXJzZS9zdWdnZXN0aW9ucycsXG4gIE1ET19ST0xFX01BUFBJTkdfVVBEQVRFOidhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9pdGVtcy91cGRhdGUnXG5cbn1cblxuXG5cbi8vIEBEaXJlY3RpdmUoKVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBTaGFyZWRTZXJ2aWNlIHtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnkgPSB7fVxuICBiYXNlVXJsOiBzdHJpbmdcbiAgY29uZmlnRGV0YWlsczogYW55XG4gIG1kb0Jhc2VVcmw6IGFueVxuICBtZG9Db25maWdEZXRhaWxzOiBhbnlcbiAgc2NyZWVuV2lkdGg6IG51bWJlcjtcbiAgaGVhZGVyczogYW55XG4gIHN1bW1hcnlUcmlnZ2VyRXhlY3V0ZWQgPSBuZXcgU3ViamVjdCgpXG4gIGxvZ2luU3VjY2VzcyA9IG5ldyBTdWJqZWN0KClcbiAgY2hlY2tSb2xlTWFwcGluZ0Zvcm1WYWxpZGF0aW9uID0gbmV3IFN1YmplY3QoKVxuICB1cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeVN1YmplY3QgPSBuZXcgU3ViamVjdCgpXG4gIGZyb21NZG9Qb3J0YWwgPSBmYWxzZVxuICByZXF1ZXN0RGF0YTphbnlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50KSB7XG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgaW5pdFN2YzogSW5pdFNlcnZpY2UsXG4gICkge1xuICAgIGlmIChpbml0U3ZjICYmIHRoaXMuaW5pdFN2Yy5iYXNlVXJsICYmIHRoaXMuaW5pdFN2Yy5jb25maWdEZXRhaWxzKSB7XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5pbml0U3ZjJywgdGhpcy5pbml0U3ZjKVxuICAgICAgdGhpcy5iYXNlVXJsID0gdGhpcy5pbml0U3ZjLmJhc2VVcmxcbiAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IHRoaXMuaW5pdFN2Yy5jb25maWdEZXRhaWxzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Q29uZmlEZXRhaWxzKClcbiAgICB9XG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgfVxuXG4gIHNldENvbmZpRGV0YWlscyhjb25maWdEZXRhaWxzOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IGNvbmZpZ0RldGFpbHNcbiAgICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZ0RldGFpbHMucG9ydGFsVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0Q29uZmlnRGV0YWlscygpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZ0RldGFpbHMgPSByZXNwb25zZVxuICAgICAgICB0aGlzLmJhc2VVcmwgPSByZXNwb25zZS5wb3J0YWxVUkxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGdldENvbmZpZygpIHtcbiAgICBpZiAodGhpcy5jb25maWdEZXRhaWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWdEZXRhaWxzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRDb25maWdEZXRhaWxzKCk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KCdhc3NldHMvanNvbmZpbGVzL2NvbmZpZ3VyYXRpb25zLmpzb24nKTtcbiAgfVxuXG5cblxuICBnZXRjb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfQ09VUlNFU31gKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGVGZWF0dXJlQ291cnNlcyhyZXNwb25zZS5yZXN1bHQuY29udGVudClcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0UG9zdGFsY291cnNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX1BPU1RBTF9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSYWlsd2F5Y291cnNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX1JBSUxXQVlfQ09VUlNFU31gKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGVGZWF0dXJlQ291cnNlcyhyZXNwb25zZS5yZXN1bHQuY29udGVudClcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0SGFsbE9mRmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9IQUxMX09GX0ZBTUV9YCwgbnVsbClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKGZlYXR1cmVDb3Vyc2VzOiBhbnkpIHtcbiAgICBjb25zdCBmb3JtYXRlZEZlYXR1cmVDb3Vyc2VzID0gW107XG4gICAgY29uc3QgZm9ybWF0ZWROZXdzcm9vbSA9IFtdO1xuICAgIGNvbnN0IGZvcm1hdGVkUGhvdG9nYWxsYXJ5ID0gW107XG4gICAgY29uc3QgZm9ybWF0ZWRUZXN0aW1vbmlhbCA9IFtdO1xuICAgIGlmIChmZWF0dXJlQ291cnNlcykge1xuICAgICAgZmVhdHVyZUNvdXJzZXMuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgICBpZiAoY291cnNlLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZScpIHtcbiAgICAgICAgICBjb25zdCBmb3JtYXRlZENvdXJzZSA9IHtcbiAgICAgICAgICAgIHBvc3RlckltYWdlOiBjb3Vyc2UucG9zdGVySW1hZ2UsXG4gICAgICAgICAgICBvcmdhbmlzYXRpb246IGNvdXJzZS5vcmdhbmlzYXRpb25bMF0gPyBjb3Vyc2Uub3JnYW5pc2F0aW9uWzBdIDogJ0thcm1heW9naSBCaGFyYXQnLFxuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY3JlYXRvckxvZ286IGNvdXJzZS5jcmVhdG9yTG9nbyB8fCAnJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLnRpbWVDb252ZXJ0KGNvdXJzZS5kdXJhdGlvbiksXG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1hdGVkRmVhdHVyZUNvdXJzZXMucHVzaChmb3JtYXRlZENvdXJzZSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb3Vyc2UucmVzb3VyY2VDYXRlZ29yeSA9PT0gJ05ld3Nyb29tJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgcG9zdGVySW1hZ2U6IGNvdXJzZS5wb3N0ZXJJbWFnZSxcbiAgICAgICAgICAgIG5hbWU6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvdXJzZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNvdXJzZS5pZGVudGlmaWVyLFxuICAgICAgICAgICAgYWx0OiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGNsb3VkU3RvcmFnZUtleTogYCR7dGhpcy5iYXNlVXJsfWFzc2V0cy9wdWJsaWMvJHtjb3Vyc2UuY2xvdWRTdG9yYWdlS2V5fWBcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWROZXdzcm9vbS5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnUGhvdG8gR2FsbGVyeScpIHtcbiAgICAgICAgICBjb25zdCBmb3JtYXRlZENvdXJzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvdXJzZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNvdXJzZS5pZGVudGlmaWVyLFxuICAgICAgICAgICAgYWx0OiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGNsb3VkU3RvcmFnZUtleTogYCR7dGhpcy5iYXNlVXJsfWFzc2V0cy9wdWJsaWMvJHtjb3Vyc2UuY2xvdWRTdG9yYWdlS2V5fWBcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRQaG90b2dhbGxhcnkucHVzaChmb3JtYXRlZENvdXJzZSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb3Vyc2UucmVzb3VyY2VDYXRlZ29yeSA9PT0gJ1Rlc3RpbW9uaWFscycpIHtcbiAgICAgICAgICBjb25zdCBmb3JtYXRlZENvdXJzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvdXJzZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNvdXJzZS5pZGVudGlmaWVyLFxuICAgICAgICAgICAgYWx0OiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGNsb3VkU3RvcmFnZUtleTogYCR7dGhpcy5iYXNlVXJsfWFzc2V0cy9wdWJsaWMvJHtjb3Vyc2UuY2xvdWRTdG9yYWdlS2V5fWAsXG4gICAgICAgICAgICBtaW1lVHlwZTogY291cnNlLm1pbWVUeXBlLFxuICAgICAgICAgICAgcG9zdGVySW1hZ2U6IGNvdXJzZS5wb3N0ZXJJbWFnZSxcbiAgICAgICAgICAgIGFydGlmYWN0VXJsOiBjb3Vyc2UuYXJ0aWZhY3RVcmwsXG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1hdGVkVGVzdGltb25pYWwucHVzaChmb3JtYXRlZENvdXJzZSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IGNvdXJzZTogZm9ybWF0ZWRGZWF0dXJlQ291cnNlcywgbmV3c3Jvb206IGZvcm1hdGVkTmV3c3Jvb20sIGdhbGxhcnk6IGZvcm1hdGVkUGhvdG9nYWxsYXJ5LCB0ZXN0aW1vbmlsczogZm9ybWF0ZWRUZXN0aW1vbmlhbCB9XG4gIH1cblxuICB0aW1lQ29udmVydChkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgbnVtID0gZHVyYXRpb247XG4gICAgICB2YXIgaG91cnMgPSAobnVtIC8gMzYwMCk7XG4gICAgICB2YXIgcmhvdXJzID0gTWF0aC5mbG9vcihob3Vycyk7XG4gICAgICB2YXIgbWludXRlcyA9IChob3VycyAtIHJob3VycykgKiA2MDtcbiAgICAgIHZhciBybWludXRlcyA9IE1hdGgucm91bmQobWludXRlcyk7XG4gICAgICBpZiAocm1pbnV0ZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJob3VycyArIFwiaFwiO1xuICAgICAgfSBlbHNlIGlmIChyaG91cnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJtaW51dGVzICsgXCJtXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiByaG91cnMgKyBcImggXCIgKyBybWludXRlcyArIFwibVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBnZXRDbGllbnRMaXN0KCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KCcuL2Fzc2V0cy9qc29uZmlsZXMvY2xpZW50LWxpc3QuanNvbicpO1xuICB9XG5cbiAgZ2V0VGVuZGVycygpIHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBbXCJ0ZW5kZXJcIl0sXG4gICAgICAgICAgc3RhdHVzOiB7IFwiIT1cIjogXCJSZXRpcmVkXCIgfVxuICAgICAgICB9LFxuICAgICAgICBmYWNldHM6IFtcIm1pbWVUeXBlXCJdLFxuICAgICAgICBzb3J0Qnk6IHsgY3JlYXRlZE9uOiBcIkRlc2NcIiB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX1RFTkRFUlN9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Tm90aWZpY2F0aW9ucygpIHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBbXCJub3RpZmljYXRpb25cIl0sXG4gICAgICAgICAgc3RhdHVzOiB7IFwiIT1cIjogXCJSZXRpcmVkXCIgfVxuICAgICAgICB9LFxuICAgICAgICBmYWNldHM6IFtcIm1pbWVUeXBlXCJdLFxuICAgICAgICBzb3J0Qnk6IHsgY3JlYXRlZE9uOiBcImRlc2NcIiB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX1RFTkRFUlN9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG4gIGdldEZvcm1SZWFkRGF0YShyZXE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLk5MV19GT1JNX1JFQUR9YCwgcmVxKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuXG4gIGdldE1pbmlzdHJ5RGF0YShtaW5pc3RyeVR5cGUpIHtcbiAgICBsZXQgc3ViX29yZ190eXBlID0gJydcbiAgICBpZiAobWluaXN0cnlUeXBlID09ICdtaW5pc3RyeScpIHtcbiAgICAgIHN1Yl9vcmdfdHlwZSA9ICdtaW5pc3RyeSdcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViX29yZ190eXBlID0gJ3N0YXRlJ1xuICAgIH1cbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgY29uc29sZS5sb2coJ3N0b3JhZ2VEYXRhLS0nLCBzdG9yYWdlRGF0YSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuYmFzZVVybCcsIHRoaXMuYmFzZVVybClcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfU1RBVEVfQ0VOVEVSfS8/c3ViX29yZ190eXBlPSR7c3ViX29yZ190eXBlfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZW5lcmF0ZVJvbGVNYXBwaW5nKHJlcUJvZHksIGZpbGVzPzogRmlsZSB8IEZpbGVbXSkge1xuICAgIGNvbnNvbGUubG9nKCdyZXFCb2R5LS0nLCByZXFCb2R5KTtcbiAgICBjb25zb2xlLmxvZygnZmlsZXMtLS0nLCBmaWxlcylcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgLy8gQWRkIHJlcXVpcmVkIGZpZWxkc1xuICAgIGlmIChyZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfaWQnLCByZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX25hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX25hbWUnLCByZXFCb2R5LnN0YXRlX2NlbnRlcl9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5kZXBhcnRtZW50X2lkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfaWQnLCByZXFCb2R5LmRlcGFydG1lbnRfaWQpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5LmRlcGFydG1lbnRfbmFtZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50X25hbWUnLCByZXFCb2R5LmRlcGFydG1lbnRfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuaW5zdHJ1Y3Rpb24pIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCByZXFCb2R5Lmluc3RydWN0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYnBEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonKSB8fCAne30nKTtcbiAgICBjb25zdCBvcmdUeXBlID1cbiAgICAgIGNicERhdGE/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgfHxcbiAgICAgIGNicERhdGE/Lm9yZ190eXBlIHx8XG4gICAgICAnJztcbiAgICBpZiAob3JnVHlwZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdvcmdfdHlwZScsIG9yZ1R5cGUpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBvciBzaW5nbGUgZmlsZVxuICAgIGlmIChmaWxlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpbmdsZSBmaWxlXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGVzLCBmaWxlcy5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWJ1ZyBGb3JtRGF0YSBjb250ZW50XG4gICAgY29uc29sZS5sb2coXCJGb3JtRGF0YSBjb250ZW50czpcIik7XG4gICAgZm9ybURhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtrZXl9OiBGSUxFIC0+ICR7dmFsdWUubmFtZX0gKCR7dmFsdWUuc2l6ZX0gYnl0ZXMpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtrZXl9OiAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkd9YCwgZm9ybURhdGEsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pKTtcbiAgfVxuXG5cblxuICBnZXREZXBhcnRtZW50TGlzdChtaW5pc3RyeUlkKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfREVQQVJUTUVOVH0vJHttaW5pc3RyeUlkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXIoc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfT9sb2FkX2NicF9wbGFucz10cnVlYCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGlmIChkZXBhcnRtZW50X2lkKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfS8ke3N0YXRlX2NlbnRlcl9pZH0vZGVwYXJ0bWVudC8ke2RlcGFydG1lbnRfaWR9P2xvYWRfY2JwX3BsYW5zPXRydWVgLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfS8ke3N0YXRlX2NlbnRlcl9pZH0/bG9hZF9jYnBfcGxhbnM9dHJ1ZWAsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gIH1cblxuICB1cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcUJvZHkpIHtcbiAgICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX1JPTEVfTUFQUElOR19VUERBVEV9YCwgcmVxQm9keSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX1JPTEVfTUFQUElOR30vJHtyb2xlX21hcHBpbmdfaWR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBkZWxldGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfUk9MRV9NQVBQSU5HfS8ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgcm9sZV9tYXBwaW5nX2lkOiByb2xlX21hcHBpbmdfaWRcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JFQ09NTUVOREVEX0NPVVJTRX0vY291cnNlLXJlY29tbWVuZGF0aW9ucy9nZW5lcmF0ZWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBkZWxldGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMocm9sZU1hcElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUkVDT01NRU5ERURfQ09VUlNFfS9jb3Vyc2UtcmVjb21tZW5kYXRpb25zL3JvbGUtbWFwcGluZy8ke3JvbGVNYXBJZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2F2ZUNvdXJzZShyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNBVkVfQ09VUlNFU31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG4gIHVwZGF0ZUNvdXJzZShyZXFCb2R5LCBjYnBfcGxhbl9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9DT1VSU0VTfS8ke2NicF9wbGFuX2lkfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX0NPVVJTRVN9P3JvbGVfbWFwcGluZ19pZD0ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0SUdPVFN1Z2dlc3RlZENvdXJzZXMocmVxQm9keSkge1xuICAgIC8vIFVzZSB0aGUgcmVxQm9keSBwYXJhbWV0ZXIgcGFzc2VkIGZyb20gdGhlIGNvbXBvbmVudFxuICAgIC8vIElmIG5vIHJlcUJvZHkgaXMgcHJvdmlkZWQsIHVzZSBkZWZhdWx0IHN0cnVjdHVyZVxuICAgIGxldCByZXEgPSByZXFCb2R5IHx8IHtcbiAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgXCJwcmltYXJ5Q2F0ZWdvcnlcIjogW1wiQ291cnNlXCJdLFxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcIkxpdmVcIl0sXG4gICAgICAgICAgXCJjb3Vyc2VDYXRlZ29yeVwiOiBbXCJDb3Vyc2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWVsZHNcIjogW1wicG9zdGVySW1hZ2VcIiwgXCJkZXNjcmlwdGlvblwiLCBcIm5hbWVcIl0sXG4gICAgICAgIFwibGltaXRcIjogMTIsXG4gICAgICAgIFwib2Zmc2V0XCI6IDBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ2dldElHT1RTdWdnZXN0ZWRDb3Vyc2VzIGZpbmFsIHJlcXVlc3Q6JywgSlNPTi5zdHJpbmdpZnkocmVxLCBudWxsLCAyKSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU1VHR0VTVEVEX0NPVVJTRV9MSVNUfWAsIHJlcSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFN1Z2dlc3RlZENvdXJzZXMocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU1VHR0VTVEVEX0NPVVJTRV9MSVNUfS8ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2F2ZVN1Z2dlc3RlZENvdXJzZShyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNBVkVfQ09VUlNFX1NVR0dFU1RFRF9DT1VSU0V9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGFkZERlc2lnbmF0aW9uKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuQUREX0RFU0lHTkFUSU9OfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBwZXJmb3JtTG9naW4ocmVxQm9keSkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCd1c2VybmFtZScsIHJlcUJvZHkudXNlcm5hbWUpXG4gICAgICAuc2V0KCdwYXNzd29yZCcsIHJlcUJvZHkucGFzc3dvcmQpO1xuICAgIGNvbnNvbGUubG9nKCdpbiBsb2dpbiB1YXQnKVxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkxPR0lOfWAsIGJvZHkudG9TdHJpbmcoKSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGxvZ291dCgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTE9HT1VUfWAsICcnLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2V0Q0JQUGxhbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5jYnBQbGFuRmluYWxPYmopKVxuICB9XG5cbiAgZ2V0Q0JQUGxhbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBsZXQgY2JwUGxhbkZpbmFsT2JqID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJykpXG4gICAgcmV0dXJuIGNicFBsYW5GaW5hbE9ialxuICB9XG5cbiAgY2hlY2tJZkxvZ2luKCkge1xuICAgIGxldCBmbGFnID0gZmFsc2VcbiAgICBsZXQgbG9naW5EYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpXG4gICAgaWYgKGxvZ2luRGF0YSAmJiBKU09OLnBhcnNlKGxvZ2luRGF0YSlbJ2FjY2Vzc190b2tlbiddKSB7XG4gICAgICBmbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnID0gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIGZsYWdcbiAgfVxuXG4gIGRlbGV0ZVJvbGVNYXBwaW5nQnlTdGF0ZUFuZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGxldCB1cmwgPSAnJ1xuICAgIGlmIChkZXBhcnRtZW50X2lkICYmIGRlcGFydG1lbnRfaWQgIT09ICdudWxsJyAmJiBkZXBhcnRtZW50X2lkICE9PSAndW5kZWZpbmVkJyAmJiBkZXBhcnRtZW50X2lkICE9PSB1bmRlZmluZWQgJiYgZGVwYXJ0bWVudF9pZCAhPT0gbnVsbCkge1xuICAgICAgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0mZGVwYXJ0bWVudF9pZD0ke2RlcGFydG1lbnRfaWR9YFxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfWBcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KHVybCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGFkZFVzZXJDb3Vyc2UocmVxQm9keSkge1xuICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19BRERfVVNFUl9DT1VSU0V9YClcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5BRERfVVNFUl9DT1VSU0VTfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gIH1cblxuICBnZXRVc2VyQ291cnNlKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9VU0VSX0NPVVJTRVN9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRDb21wZXRlbmN5SnNvbigpIHtcbiAgICBpZiAodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vYXNzZXRzL2pzb25maWxlcy9jb21wZXRlbmNpZXMuanNvbmApXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9L3RyYWluaW5nLXBsYS1haS9hc3NldHMvanNvbmZpbGVzL2NvbXBldGVuY2llcy5qc29uYCwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgICAvLyB0aGlzLmh0dHAuZ2V0PGFueVtdPignL2Fzc2V0cy9qc29uZmlsZXMvY29tcGV0ZW5jaWVzLmpzb24nKVxuICB9XG5cbiAgY29udmVydChzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghc2Vjb25kcyB8fCBzZWNvbmRzIDw9IDApIHtcbiAgICAgIHJldHVybiAnTi9BJztcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbFNlY29uZHMgPSBNYXRoLmZsb29yKHNlY29uZHMpO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAzNjAwKTtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodG90YWxTZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3QgcmVtYWluaW5nU2Vjb25kcyA9IHRvdGFsU2Vjb25kcyAlIDYwO1xuXG4gICAgaWYgKGhvdXJzID4gMCkge1xuICAgICAgLy8gRm9yIGR1cmF0aW9ucyB3aXRoIGhvdXJzLCBzaG93IGhvdXJzIGFuZCBtaW51dGVzIChlLmcuLCBcIjNoIDEwbVwiKVxuICAgICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICAgIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlc31tYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHtob3Vyc31oYDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICAvLyBGb3IgZHVyYXRpb25zIHVuZGVyIGFuIGhvdXIsIHNob3cgbWludXRlcyBhbmQgc2Vjb25kcyAoZS5nLiwgXCI1OG0gM3NcIilcbiAgICAgIGlmIChyZW1haW5pbmdTZWNvbmRzID4gMCkge1xuICAgICAgICByZXR1cm4gYCR7bWludXRlc31tICR7cmVtYWluaW5nU2Vjb25kc31zYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfW1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgZHVyYXRpb25zIHVuZGVyIGEgbWludXRlLCBzaG93IHNlY29uZHMgb25seVxuICAgICAgcmV0dXJuIGAke3JlbWFpbmluZ1NlY29uZHN9c2A7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlclByb2ZpbGUoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfUFJPRklMRX1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0VXNlclJlY29tbWVuZGF0aW9uQ291cnNlKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9VU0VSX1NFTEVDVEVEX0NPVVJTRVN9P3JvbGVfbWFwcGluZ19pZD0ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZG93bmxvYWRQZGYoc3RhdGVfY2VudGVyX2lkOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGVuZHBvaW50ID1cbiAgICAgIGNvbnRleHQgPT09ICdhY2JwJ1xuICAgICAgICA/IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERl9BQ0JQXG4gICAgICAgIDogQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke2VuZHBvaW50fT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9KiZsYW5ndWFnZT0ke2xhbmd1YWdlfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjb250ZW50RGlzcG9zaXRpb24nLCByZXMuaGVhZGVycylcbiAgICAgIGxldCBmaWxlbmFtZSA9IGBDQlBfUmVwb3J0XyR7c3RhdGVfY2VudGVyX2lkfS5wZGZgO1xuXG4gICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uLm1hdGNoKC9maWxlbmFtZT1cIj8oW15cIl0rKVwiPy8pO1xuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIGJsb2IgVVJMIGFuZCBkb3dubG9hZFxuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuYm9keV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gICAgICBjb25zdCBkb3dubG9hZFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gZG93bmxvYWRVcmw7XG4gICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBhLmNsaWNrKCk7XG5cbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZG93bmxvYWRVcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgZG93bmxvYWRQZGZGb3JEZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZDogc3RyaW5nLCBjb250ZXh0OiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9XG4gICAgICBjb250ZXh0ID09PSAnYWNicCdcbiAgICAgICAgPyBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREZfQUNCUFxuICAgICAgICA6IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtlbmRwb2ludH0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZkZXBhcnRtZW50X2lkPSR7ZGVwYXJ0bWVudF9pZH0mbGFuZ3VhZ2U9JHtsYW5ndWFnZX1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgICBjb25zb2xlLmxvZygnY29udGVudERpc3Bvc2l0aW9uJywgcmVzLmhlYWRlcnMpXG4gICAgICBsZXQgZmlsZW5hbWUgPSBgQ0JQX1JlcG9ydF8ke3N0YXRlX2NlbnRlcl9pZH1fJHtkZXBhcnRtZW50X2lkfS5wZGZgO1xuXG4gICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uLm1hdGNoKC9maWxlbmFtZT1cIj8oW15cIl0rKVwiPy8pO1xuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIGJsb2IgVVJMIGFuZCBkb3dubG9hZFxuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuYm9keV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gICAgICBjb25zdCBkb3dubG9hZFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gZG93bmxvYWRVcmw7XG4gICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBhLmNsaWNrKCk7XG5cbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZG93bmxvYWRVcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VudGVyQmFzZWREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCkge1xuICAgIC8vIGxldCByZXFCb2R5ID0geyBcInJlcXVlc3RcIjogeyBcImZpbHRlcnNcIjogeyBcInN0YXR1c1wiOiAxLCBcIm1pbmlzdHJ5T3JTdGF0ZVR5cGVcIjogXCJtaW5pc3RyeVwiLCBcIm1pbmlzdHJ5T3JTdGF0ZUlkXCI6IHN0YXRlX2NlbnRlcl9pZH0sIFwic29ydF9ieVwiOiB7IFwiY3JlYXRlZERhdGVcIjogXCJkZXNjXCIgfSwgXCJsaW1pdFwiOiA5OTk5LCBcIm9mZnNldFwiOiAwLCBcImZpZWxkc1wiOiBbXCJpZGVudGlmaWVyXCIsIFwib3JnTmFtZVwiLCBcImRlc2NyaXB0aW9uXCIsIFwicGFyZW50T3JnTmFtZVwiLCBcIm1pbmlzdHJ5T3JTdGF0ZUlkXCIsIFwibWluaXN0cnlPclN0YXRlVHlwZVwiLCBcIm1pbmlzdHJ5T3JTdGF0ZU5hbWVcIiwgXCJzYk9yZ1N1YlR5cGVcIl0gfSB9XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuQ0VOVEVSX0JBU0VEX01JTklTVFJZfS8ke3N0YXRlX2NlbnRlcl9pZH0/bGltaXQ9OTk5OSZvZmZzZXQ9MCZzdWJfb3JnX3R5cGU9bWluaXN0cnlgLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cblxuICBkb3dubG9hZFBkZkZvckNvdXJzZVJlY29tbWVuZGF0aW9uKHN0YXRlX2NlbnRlcl9pZCkge1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRE9XTkxPQURfQ09VUlNFX1JFQ09NTUVOREFUSU9OfT9yb2xlX21hcHBpbmdfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgICAgbGV0IGZpbGVuYW1lID0gYENPVVJTRV9SRUNPTU1FTkRBVElPTl9SZXBvcnRfJHtzdGF0ZV9jZW50ZXJfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGxvYWREb2N1bWVudChyZXFCb2R5LCBmaWxlPzogRmlsZSkge1xuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICAvLyAgY29uc29sZS5sb2coJ3N0b3JhZ2VEYXRhLS0nLCBzdG9yYWdlRGF0YSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgLy8gQWRkIHJlcXVpcmVkIGZpZWxkc1xuICAgIC8vIGlmIChyZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCkge1xuICAgIC8vICAgZm9ybURhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfaWQnLCByZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCk7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKHJlcUJvZHkuZGVwYXJ0bWVudF9pZCkge1xuICAgIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgcmVxQm9keS5kZXBhcnRtZW50X2lkKTtcbiAgICAvLyB9XG5cblxuXG4gICAgLy8gaWYocmVxQm9keS5kb2N1bWVudE5hbWUpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRfbmFtZScsIHJlcUJvZHkuZG9jdW1lbnROYW1lKTtcbiAgICAvLyB9XG4gICAgLy8gQWRkIGZpbGUgaWYgcHJvdmlkZWRcbiAgICAvLyBpZiAoZmlsZSkge1xuICAgIC8vICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG4gICAgLy8gfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQTE9BRF9ET0NVTUVOVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0VXBsb2FkZWREb2N1bWVudHMocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICBPYmplY3QuZW50cmllcyhyZXFCb2R5KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX0RPQ1VNRU5UU31gLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgcGFyYW1zXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVGaWxlKGZpbGVJZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9GSUxFfS8ke2ZpbGVJZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgdHJpZ2dlckZpbGVTdW1tYXJ5KGZpbGVJZCkge1xuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICAvLyBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX0ZJTEV9LyR7ZmlsZUlkfS9zdW1tYXJ5YCwge30sIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBkb3dubG9hZEZpbGUoZmlsZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJsb2I+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRE9XTkxPQURfRklMRX0vJHtmaWxlSWR9L2Rvd25sb2FkYCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVTdW1tYXJ5KGZpbGVJZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9TVU1NQVJZfS8ke2ZpbGVJZH0vc3VtbWFyeWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBkZWxldGVSZWNvbW1lbmRlZENvdXJzZShyb2xlTWFwcGluZ0lkOiBzdHJpbmcsIGNvdXJzZUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KFxuICAgICAgYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX0NPVVJTRV9SRUNPTU1FTkRBVElPTn0vJHtyb2xlTWFwcGluZ0lkfS9jb3Vyc2UvJHtjb3Vyc2VJZGVudGlmaWVyfWAsXG4gICAgICB7IGhlYWRlcnMgfVxuICAgICk7XG4gIH1cblxuICBnZXRDYnBQbGFuc1dpdGhTZWxlY3RlZENvdXJzZXMoKTogYW55W10ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY2JwUGxhbkZpbmFsT2JqO1xuXG4gICAgcmV0dXJuIHNvdXJjZT8ucm9sZV9tYXBwaW5nX2dlbmVyYXRpb25cbiAgICAgID8uZmxhdE1hcCgocm9sZTogYW55KSA9PiByb2xlLmNicF9wbGFucyB8fCBbXSlcbiAgICAgID8uZmlsdGVyKFxuICAgICAgICAocGxhbjogYW55KSA9PlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkocGxhbi5zZWxlY3RlZF9jb3Vyc2VzKSAmJlxuICAgICAgICAgIHBsYW4uc2VsZWN0ZWRfY291cnNlcy5sZW5ndGggPiAwXG4gICAgICApIHx8IFtdO1xuICB9XG5cbiAgZ2V0QWRkaXRpb25hbFBhcmFtZXRlcmZvclN1Z2dlc3RlZENvdXJzZXMoaWRlbnRpZmllcnMpIHtcbiAgICBcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgXCJpZGVudGlmaWVyXCI6IGlkZW50aWZpZXJzLFxuXG5cbiAgICAgICAgICBcInN0YXR1c1wiOiBbXG4gICAgICAgICAgICBcIkxpdmVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWVsZHNcIjogW1xuICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgIFwibGFuZ3VhZ2VcIixcbiAgICAgICAgICBcImlkZW50aWZpZXJcIixcbiAgICAgICAgICBcImF2Z1JhdGluZ1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwibGltaXRcIjogMTAwMCxcbiAgICAgICAgXCJvZmZzZXRcIjogMCxcbiAgICAgICAgXCJzb3J0X2J5XCI6IHt9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxQm9keSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIHVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfREVTSUdOQVRJT05fSElFUkFSQ0hZfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZWFyY2hQdWJsaWNEZXNpZ25hdGlvbihyZXFCb2R5KSB7XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19ERVNJR05BVElPTl9TRUFSQ0h9YCwgcmVxQm9keSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUFVCTElDX0RFU0lHTkFUSU9OfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gIH1cblxuICBnZXREYXNoYm9hcmRBZG1pbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRBU0hCT0FSRF9BRE1JTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkR2FwQW5hbHlzaXNBZG1pbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdBUF9BTkFMWVNJU19BRE1JTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkUHVibGljKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREFTSEJPQVJEX1BVQkxJQ31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkR2FwQW5hbHlzaXNQdWJsaWMocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HQVBfQU5BTFlTSVNfUFVCTElDfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRNYXRjaGVkUm9sZU1hcHBpbmcocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5NQVRDSEVEX1JPTEVfTUFQUElOR31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0QXBwcm92YWxSZXF1ZXN0cyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX0FQUFJPVkFMX1JFUVVFU1RTfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZWFyY2hQdWJsaWNtZG8ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUFVCTElDX01ET31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgdmlld0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdF9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlZJRVdfQVBQUk9WQUxfUkVRVUVTVH0vJHtyZXF1ZXN0X2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB2aWV3TURPQXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0X2lkKSB7XG4gICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlZJRVdfTURPX0FQUFJPVkFMX1JFUVVFU1R9LyR7cmVxdWVzdF9pZH1gKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBhcHByb3ZlQW5kUHVibGlzaE1ET0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdCkge1xuICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuQVBQUk9WRV9BTkRfUFVCTElTSF9NRE9fQVBQUk9WQUxfUkVRVUVTVH1gLCByZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICByZWplY3RNRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3QpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlJFSkVDVF9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHJlamVjdEl0ZW1NRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3QpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlJFSkVDVF9JVEVNX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxdWVzdClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcmV2b2tlQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuUkVWT0tFX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVEZXNpZ25hdGlvbkFwcHJvdmFsUmVxdWVzdChyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNBVkVfREVTSUdOQVRJT05fQVBQUk9WQUxfUkVRVUVTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbn1cblxuIl19
|