@tiba-spark/client-shared-lib 25.4.1-141 → 25.4.1-144

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.
@@ -89,11 +89,14 @@ let FacilityState = class FacilityState {
89
89
  static isMultiPark(state) {
90
90
  return state.selected?.isMultiPark;
91
91
  }
92
- static zones(state) {
93
- return state.zones?.filter(z => z.rulesMode !== RulesMode.CALCULATE_BY_SMART_COUNTER);
92
+ static rawZones(state) {
93
+ return state.zones;
94
94
  }
95
- static smartZones(state) {
96
- return state.zones?.filter(z => z.rulesMode === RulesMode.CALCULATE_BY_SMART_COUNTER);
95
+ static zones(zones) {
96
+ return zones?.filter(z => z.rulesMode !== RulesMode.CALCULATE_BY_SMART_COUNTER);
97
+ }
98
+ static smartZones(zones) {
99
+ return zones?.filter(z => z.rulesMode === RulesMode.CALCULATE_BY_SMART_COUNTER);
97
100
  }
98
101
  static timeZone(state) {
99
102
  return state.selected.spTimeZone;
@@ -909,9 +912,12 @@ __decorate([
909
912
  ], FacilityState, "isMultiPark", null);
910
913
  __decorate([
911
914
  Selector()
915
+ ], FacilityState, "rawZones", null);
916
+ __decorate([
917
+ Selector([FacilityState.rawZones])
912
918
  ], FacilityState, "zones", null);
913
919
  __decorate([
914
- Selector()
920
+ Selector([FacilityState.rawZones])
915
921
  ], FacilityState, "smartZones", null);
916
922
  __decorate([
917
923
  Selector()
@@ -974,4 +980,4 @@ export { FacilityState };
974
980
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FacilityState, decorators: [{
975
981
  type: Injectable
976
982
  }], ctorParameters: () => [{ type: i1.Store }, { type: i2.BaseFacilityCommandsConfigService }, { type: i3.LocalStorageService }, { type: i4.FacilityMenuService }, { type: i5.FacilityRpcServiceProxy }, { type: i6.Rpc.RemoteCommandRpcServiceProxy }, { type: i5.GroupRpcServiceProxy }, { type: i5.CategoryRpcServiceProxy }, { type: i5.JobTitleRpcServiceProxy }, { type: i5.ZoneRpcServiceProxy }, { type: i5.ZRpcServiceProxy }, { type: i7.GlobalErrorService }, { type: i8.CommandNotificationService }, { type: i9.TranslateService }, { type: i10.AppConfigService }], propDecorators: { onClearFacilityDictionary: [], onSetSmartparkBasicAllAction: [], onSetSmartparkBasicAction: [], onLoadParkingLotAction: [], onLoadRemoteCommandsRefAction: [], onLoadFacilityRemoteCommandsRefAction: [], onLoadFacilityAction: [], onUnloadParkingLotAction: [], onSetDeviceRemoteCommandsMapAction: [], onSetFacilityRemoteCommandsMapAction: [], onZoneChangedAction: [], onServicesRunningStatusChangedAction: [], onFacilityChangedAction: [], onSetBasicMenuAction: [], onLoadAccountManagementGuestGroupsAction: [], onLoadReportsGuestGroupsAction: [], onLoadCategoriesAction: [], onLoadReportsJobTitlesAction: [], onLoadAccountManagementJobTitlesAction: [], onLoadReportsZonesAction: [], onLoadAccessProfileZZonesAction: [], onLoadCcMainZonesAction: [], onLoadZsAction: [], onClearGroupsAction: [], onClearCategoriesAction: [], onClearJobTitlesAction: [], onClearZonesAction: [], onClearZsAction: [], onSetSelectedParkAction: [], onClearSelectedFacilityAction: [], onClearInactiveSelectedParkAction: [], onFacilityRemoteCommandExecutedAction: [], onLoadMacroCommandsAction: [], onClearMacroCommandsAction: [] } });
977
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVySSxPQUFPLEVBQzRELFdBQVcsRUFDNUUsMEJBQTBCLEVBQ2dDLFNBQVMsRUFBRSwrQkFBK0IsRUFFckcsTUFBTSx5Q0FBeUMsQ0FB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TTtJQUROLFFBQVEsRUFBRTttQ0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzJEQUdWO0FBR007SUFETixRQUFRLEVBQUU7NkRBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtpQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3FDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7b0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTs0QkFHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3dDQUdWO0FBM0lVLGFBQWE7SUFKekIsS0FBSyxDQUFxQjtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO0tBQ1QsQ0FBQztHQUNXLGFBQWEsQ0FpOEJ6Qjs7NEZBajhCWSxhQUFhO2tCQUx6QixVQUFVOzRrQkFtSlQseUJBQXlCLE1BT3pCLDRCQUE0QixNQU81Qix5QkFBeUIsTUFLekIsc0JBQXNCLE1BMEJ0Qiw2QkFBNkIsTUFlN0IscUNBQXFDLE1BaUJyQyxvQkFBb0IsTUFnQnBCLHdCQUF3QixNQVd4QixrQ0FBa0MsTUFZbEMsb0NBQW9DLE1BWXBDLG1CQUFtQixNQW9GbkIsb0NBQW9DLE1Bc0JwQyx1QkFBdUIsTUErQnZCLG9CQUFvQixNQUtwQix3Q0FBd0MsTUFheEMsOEJBQThCLE1BYTlCLHNCQUFzQixNQVl0Qiw0QkFBNEIsTUFZNUIsc0NBQXNDLE1BYXRDLHdCQUF3QixNQWF4QiwrQkFBK0IsTUFhL0IsdUJBQXVCLE1BYXZCLGNBQWMsTUFpQ2QsbUJBQW1CLE1BT25CLHVCQUF1QixNQU92QixzQkFBc0IsTUFPdEIsa0JBQWtCLE1BT2xCLGVBQWUsTUFPZix1QkFBdUIsTUFhdkIsNkJBQTZCLE1BWTdCLGlDQUFpQyxNQWtCakMscUNBQXFDLE1BbUJyQyx5QkFBeUIsTUFXekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBScGMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5JztcbmltcG9ydCB7IEFwcE1vZHVsZSwgRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrQmFzaWNEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBDYXRlZ29yeUR0bywgQ2F0ZWdvcnlScGNTZXJ2aWNlUHJveHksIERldmljZVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvLFxuICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgRmFjaWxpdHlScGNTZXJ2aWNlUHJveHksIEdyb3VwRHRvLCBHcm91cFJwY1NlcnZpY2VQcm94eSwgSm9iVGl0bGVEdG8sXG4gIEpvYlRpdGxlUnBjU2VydmljZVByb3h5LCBNYWNyb0NvbW1hbmREdG8sIFBlcm1pc3Npb25UeXBlLCBSdWxlc01vZGUsIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8sXG4gIFpEdG8sIFpvbmVEdG8sIFpvbmVScGNTZXJ2aWNlUHJveHksIFpScGNTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjaWxpdHktY29tbWFuZHMtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2xvYmFsLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc1RydXRoeSwgTnVtYmVyTWFwLCBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb24tdHlwZS1tYXBwZXIudXRpbCc7XG5pbXBvcnQgeyBvYmplY3RLZXlzdG9Mb3dlckNhc2UgfSBmcm9tICcuLi8uLi91dGlscy90ZXh0LnV0aWwnO1xuaW1wb3J0IHsgSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbiB9IGZyb20gJy4uL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBNZW51TG9hZEFjdGlvbiB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5hY3Rpb25zJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBTZXRTbWFydFBhcmtBY3Rpb24gfSBmcm9tICcuLi9zbWFydHBhcmtzL3NtYXJ0cGFyay5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5TWVudVNlcnZpY2UgfSBmcm9tICcuL2ZhY2lsaXR5LW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1xuICBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSwgQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnksIERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSwgRmFjaWxpdHlEaWN0aW9uYXJ5LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVxufSBmcm9tICcuL2ZhY2lsaXR5LW1vZGFsJztcbmltcG9ydCB7XG4gIENsZWFyQ2F0ZWdvcmllc0FjdGlvbiwgQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24sIENsZWFyR3JvdXBzQWN0aW9uLCBDbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uLCBDbGVhckpvYlRpdGxlc0FjdGlvbixcbiAgQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uLCBDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24sIENsZWFyWm9uZXNBY3Rpb24sIENsZWFyWnNBY3Rpb24sIEZhY2lsaXR5Q2hhbmdlZEFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24sXG4gIExvYWRBY2Nlc3NQcm9maWxlWm9uZXNBY3Rpb24sIExvYWRBY2NvdW50TWFuYWdlbWVudEd1ZXN0R3JvdXBBY3Rpb24sIExvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbixcbiAgTG9hZENhdGVnb3JpZXNBY3Rpb24sIExvYWRDY01haW5ab25lc0FjdGlvbiwgTG9hZEZhY2lsaXR5QWN0aW9uLCBMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sXG4gIExvYWRQYXJraW5nTG90QWN0aW9uLCBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRSZXBvcnRzR3Vlc3RHcm91cEFjdGlvbiwgTG9hZFJlcG9ydHNKb2JUaXRsZXNBY3Rpb24sIExvYWRSZXBvcnRzWm9uZXNBY3Rpb24sXG4gIExvYWRac0FjdGlvbiwgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbiwgU2V0QmFzaWNNZW51QWN0aW9uLCBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbiwgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbixcbiAgU2V0U2VsZWN0ZWRQYXJrQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24sIFVubG9hZFBhcmtpbmdMb3RBY3Rpb24sIFpvbmVDaGFuZ2VkQWN0aW9uXG59IGZyb20gJy4vZmFjaWxpdHkuYWN0aW9ucyc7XG5cbmltcG9ydCBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8gPSBScGMuU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2lsaXR5U3RhdGVNb2RlbCB7XG4gIGd1aWQ6IHN0cmluZztcbiAgcGFya0lkOiBudW1iZXI7XG4gIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5OiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTtcbiAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bWJlcjtcbiAgc2VsZWN0ZWQ6IEZhY2lsaXR5RHRvO1xuICBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnk7XG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+O1xuICB0aWJhS2V5czogU3RyaW5nTWFwPG51bWJlcj47XG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTogRGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTogRmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gIGdyb3VwczogR3JvdXBEdG9bXTtcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlEdG9bXTtcbiAgam9iVGl0bGVzOiBKb2JUaXRsZUR0b1tdO1xuICB6b25lczogWm9uZUR0b1tdO1xuICB6OiBaRHRvW107XG4gIGFsbG93ZWRBY3Rpb25zOiBOdW1iZXJNYXA8Ym9vbGVhbj47XG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTtcbiAgbWFjcm9Db21tYW5kczogTWFjcm9Db21tYW5kRHRvW107XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBndWlkOiAnJyxcbiAgcGFya0lkOiBudWxsLFxuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeToge30sXG4gIG11bHRpUGFya1BhcmVudElEOiB1bmRlZmluZWQsXG4gIHNlbGVjdGVkOiBudWxsLFxuICBkaWN0aW9uYXJ5OiB7fSxcbiAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeToge30sXG4gIHRpYmFLZXlzOiB7fSxcbiAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IHt9LFxuICBncm91cHM6IG51bGwsXG4gIGNhdGVnb3JpZXM6IG51bGwsXG4gIGpvYlRpdGxlczogbnVsbCxcbiAgem9uZXM6IG51bGwsXG4gIHo6IG51bGwsXG4gIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IHt9LFxuICBtYWNyb0NvbW1hbmRzOiBbXVxufTtcblxuQEluamVjdGFibGUoKVxuQFN0YXRlPEZhY2lsaXR5U3RhdGVNb2RlbD4oe1xuICBuYW1lOiAnZmFjaWxpdHknLFxuICBkZWZhdWx0cyxcbn0pXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzQ29uZmlnU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5TWVudVNlcnZpY2U6IEZhY2lsaXR5TWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2VQcm94eTogRmFjaWxpdHlScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSByZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5OiBScGMuUmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdyb3VwUnBjU2VydmljZVByb3h5OiBHcm91cFJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGNhdGVnb3J5U2VydmljZVByb3h5OiBDYXRlZ29yeVJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGpvYlRpdGxlUnBjU2VydmljZVByb3h5OiBKb2JUaXRsZVJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHpvbmVScGNTZXJ2aWNlUHJveHk6IFpvbmVScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6UnBjU2VydmljZVByb3h5OiBaUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JTZXJ2aWNlOiBHbG9iYWxFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tYW5kTm90aWZpY2F0aW9uU2VydmljZTogQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZWxlY3RlZChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRmFjaWxpdHlEdG8ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNDaGlsZChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLm11bHRpUGFya1BhcmVudElEID4gMDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgZmVhdHVyZVBlcm1pc3Npb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBQZXJtaXNzaW9uVHlwZVtdIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ/LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgYWxsb3dlZEFjdGlvbnMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE51bWJlck1hcDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHN0YXRlLmFsbG93ZWRBY3Rpb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBpc011bHRpUGFyayhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ/LmlzTXVsdGlQYXJrO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB6b25lcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlICE9PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzbWFydFpvbmVzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBab25lRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS56b25lcz8uZmlsdGVyKHogPT4gei5ydWxlc01vZGUgPT09IFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfU01BUlRfQ09VTlRFUik7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVab25lKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQuc3BUaW1lWm9uZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGltZURyaWZ0KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQudGltZURyaWZ0O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgZ3VpZChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLmd1aWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHBhcmtJZChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnBhcmtJZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbXVsdGlQYXJrUGFyZW50SUQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5tdWx0aVBhcmtQYXJlbnRJRDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBmYWNpbGl0eURpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmRpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz4ge1xuICAgIHJldHVybiBzdGF0ZS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHRpYmFLZXlzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHN0YXRlLnRpYmFLZXlzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlbGVjdGVkUGFya0RldmljZVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBEZXZpY2VSZW1vdGVDb21tYW5kUmVmRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF0gPyBzdGF0ZS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlbGVjdGVkUGFya0ZhY2lsaXR5UmVtb3RlQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF0gPyBzdGF0ZS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVtzdGF0ZS5ndWlkXVtzdGF0ZS5wYXJrSWRdIDogW107XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGdyb3VwcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogR3JvdXBEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmdyb3VwcztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgY2F0ZWdvcmllcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogQ2F0ZWdvcnlEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmNhdGVnb3JpZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGpvYlRpdGxlcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogSm9iVGl0bGVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmpvYlRpdGxlcztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgeihzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuejtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbWFjcm9Db21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogTWFjcm9Db21tYW5kRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5tYWNyb0NvbW1hbmRzO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbilcbiAgb25DbGVhckZhY2lsaXR5RGljdGlvbmFyeShjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBfOiBDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnk6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24pIHtcbiAgICBjb25zdCBzbWFydFBhcmtzQXJyYXk6IFNtYXJ0cGFya0Jhc2ljRHRvW10gPSBPYmplY3QudmFsdWVzKGFjdGlvbi5zbWFydHBhcmtXcmFwcGVyPy5kYXRhPy5zbWFydFBhcmtzKTtcbiAgICBjdHguZGlzcGF0Y2gobmV3IFNldFNtYXJ0UGFya0FjdGlvbihzbWFydFBhcmtzQXJyYXksIGZhbHNlKSk7XG4gICAgcmV0dXJuIHRoaXMucG9wdWxhdGVTbWFydHBhcmtCYXNpYyhjdHgsIGFjdGlvbi5zbWFydHBhcmtXcmFwcGVyPy5kYXRhPy5zbWFydFBhcmtzKTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pXG4gIG9uU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRTbWFydHBhcmtCYXNpY0FjdGlvbikge1xuICAgIHRoaXMucG9wdWxhdGVTbWFydHBhcmtCYXNpYyhjdHgsIGFjdGlvbi5zbWFydHBhcmtXcmFwcGVyPy5kYXRhPy5zbWFydFBhcmtzKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFBhcmtpbmdMb3RBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUGFya2luZ0xvdEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRQYXJraW5nTG90QWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0gPyBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSA6IG51bGw7XG5cbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KHNlbGVjdGVkLmZlYXR1cmVQZXJtaXNzaW9ucyk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBwYXJrSWQsXG4gICAgICBndWlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IHNlbGVjdGVkLm11bHRpUGFya1BhcmVudElELFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgcmV0dXJuIGN0eC5kaXNwYXRjaChuZXcgTG9hZEZhY2lsaXR5QWN0aW9uKHBhcmtJZCwgZ3VpZCwgaXNUcnV0aHkoc2VsZWN0ZWQuaXNNdWx0aVBhcmspLCBBcHBNb2R1bGUuQ2MpKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcblxuICAgIC8vIFdlIGZldGNoIGZyb20gdGhlIHNlcnZlciBvbmx5IGlmIHdlIGRpZG4neSBmZXRjaCBiZWZvcmUgZm9yIHRoYXQgZ3VpZFxuICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmQWxsID0gY3R4LmdldFN0YXRlKCkuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF0gfHwgIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXREZXZpY2VSZW1vdGVDb21tYW5kcyhndWlkLCBwYXJrSWQpO1xuXG4gICAgICByZXR1cm4gcmVtb3RlQ29tbWFuZHNSZWYkLnBpcGUodGFwKHJlbW90ZUNvbW1hbmRzUmVmID0+IHtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcblxuICAgIC8vIFdlIGZldGNoIGZyb20gdGhlIHNlcnZlciBvbmx5IGlmIHdlIGRpZG4neSBmZXRjaCBiZWZvcmUgZm9yIHRoYXQgZ3VpZFxuICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmQWxsID0gY3R4LmdldFN0YXRlKCkuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gICAgaWYgKCFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXSB8fCAhcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWYkID0gdGhpcy5yZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LmdldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgICAgaWYgKHJlbW90ZUNvbW1hbmRzUmVmJCkge1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29tbWFuZHNSZWYkLnBpcGUodGFwKHJlbW90ZUNvbW1hbmRzUmVmID0+IHtcbiAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24ocmVtb3RlQ29tbWFuZHNSZWYuZGF0YSwgZ3VpZCwgcGFya0lkKSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRGYWNpbGl0eUFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRGYWNpbGl0eUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgZ3VpZCwgaXNTdXBlclBhcmssIGFwcE1vZHVsZSB9OiBMb2FkRmFjaWxpdHlBY3Rpb24pIHtcbiAgICBpZiAoaXNTdXBlclBhcmspIHtcbiAgICAgIGNvbnN0IGFsbEd1aWRGYWNpbGl0aWVzJCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdGllcyhndWlkLCBwYXJrSWQpO1xuICAgICAgcmV0dXJuIGFsbEd1aWRGYWNpbGl0aWVzJC5waXBlKHRhcChmYWNpbGl0aWVzTWFwID0+IHtcbiAgICAgICAgY29uc3QgZmFjaWxpdHkgPSBmYWNpbGl0aWVzTWFwLmRhdGFbZ3VpZF0uZmluZChmID0+IGYuaWQgPSBwYXJrSWQpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZhY2lsaXRpZXMoY3R4LCBndWlkLCBwYXJrSWQsIGFwcE1vZHVsZSwgZmFjaWxpdHksIGZhY2lsaXRpZXNNYXAuZGF0YSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZ1bGxGYWNpbGl0eSQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldEZhY2lsaXR5KGd1aWQsIHBhcmtJZCk7XG4gICAgICByZXR1cm4gZnVsbEZhY2lsaXR5JC5waXBlKHRhcChmYWNpbGl0eSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRmFjaWxpdGllcyhjdHgsIGd1aWQsIHBhcmtJZCwgYXBwTW9kdWxlLCBmYWNpbGl0eS5kYXRhKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKFVubG9hZFBhcmtpbmdMb3RBY3Rpb24pXG4gIG9uVW5sb2FkUGFya2luZ0xvdEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBndWlkOiAnJyxcbiAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgem9uZXM6IG51bGwsXG4gICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKVxuICBvblNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pIHtcbiAgICBjb25zdCBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gICAgaWYgKCFkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdKSB7XG4gICAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdID0ge307XG4gICAgfVxuICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF1bYWN0aW9uLnBhcmtJZF0gPSBhY3Rpb24ucmVtb3RlQ29tbWFuZHNbYWN0aW9uLmd1aWRdO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbilcbiAgb25TZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbikge1xuICAgIGNvbnN0IGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gICAgaWYgKCFmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0pIHtcbiAgICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSA9IHt9O1xuICAgIH1cbiAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF1bYWN0aW9uLnBhcmtJZF0gPSBhY3Rpb24ucmVtb3RlQ29tbWFuZHNbYWN0aW9uLmd1aWRdO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihab25lQ2hhbmdlZEFjdGlvbilcbiAgb25ab25lQ2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHpvbmUsIHBhcmtJZCB9OiBab25lQ2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ7XG4gICAgY29uc3Qgem9uZUluZGV4ID0gc2VsZWN0ZWQuem9uZXM/LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHpvbmUuaWQgJiYgaXRlbS5wYXJrSUQgPT09IHBhcmtJZCk7XG4gICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLm1vbnRobGllc09jY3VwYW5jeSArIHpvbmUudHJhbnNpZW50c09jY3VwYW5jeTtcbiAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG5cbiAgICBzd2l0Y2ggKHpvbmUucnVsZXNNb2RlKSB7XG4gICAgICBjYXNlIFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfU01BUlRfQ09VTlRFUjpcbiAgICAgICAgem9uZS5jYXBhY2l0eSA9IHpvbmUuY2FwYWNpdHk7XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgdGhpcy5oYW5kbGVTbWFydENvdW50ZXIoem9uZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfTE9PUF9ERVRFQ1RPUjpcbiAgICAgICAgem9uZS5jYXBhY2l0eSA9IHpvbmUuY2FwYWNpdHk7XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHpvbmUuY2FwYWNpdHkgPSB6b25lLmNhcGFjaXR5O1xuICAgICAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgICAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHNlbGVjdGVkLnpvbmVzW3pvbmVJbmRleF0gPSB6b25lO1xuICAgIHNlbGVjdGVkLnpvbmVzID0gY2xvbmUoc2VsZWN0ZWQuem9uZXMpO1xuXG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBndWlkID0gY3R4LmdldFN0YXRlKCkuZ3VpZDtcbiAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bc2VsZWN0ZWQuaWRdLnpvbmVzID0gc2VsZWN0ZWQuem9uZXM7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiBmYWNpbGl0eURpY3Rpb25hcnksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHpvbmVzOiBzZWxlY3RlZC56b25lcyxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNtYXJ0Q291bnRlcih6b25lOiBab25lRHRvKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh6b25lPy5zbWFydENvdW50ZXJWZWhpY2xlVHlwZUpzb24pIHtcbiAgICAgICAgY29uc3QgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2Uoem9uZS5zbWFydENvdW50ZXJWZWhpY2xlVHlwZUpzb24pO1xuICAgICAgICBjb25zdCBzbWFydENvdW50ZXJWZWhpY2xlVHlwZSA9IG9iamVjdEtleXN0b0xvd2VyQ2FzZShwYXJzZWRKc29uKTtcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc21hcnRDb3VudGVyVmVoaWNsZVR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZWQgSlNPTiBzbWFydENvdW50ZXJWZWhpY2xlVHlwZSBpcyBub3QgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gc21hcnRDb3VudGVyVmVoaWNsZVR5cGUubWFwKChzYzogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvID0gbmV3IFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bygpO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0by5jb3VudGVyID0gc2MuY291bnRlcjtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8uem9uZUlkID0gem9uZS5pZDtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8udmVoaWNsZVR5cGVJZCA9IHNjLnZlaGljbGV0eXBlaWQ7XG4gICAgICAgICAgcmV0dXJuIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bztcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh6b25lPy5zbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NKc29uKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKHpvbmUuc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzSnNvbik7XG4gICAgICAgIGNvbnN0IHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcyA9IG9iamVjdEtleXN0b0xvd2VyQ2FzZShwYXJzZWRKc29uKTtcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VkIEpTT04gc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzIGlzIG5vdCBhbiBhcnJheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzID0gc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzLm1hcCgoc2M6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8gPSBuZXcgU21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0bygpO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8uY291bnRlciA9IHNjLmNvdW50ZXI7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0by56b25lSWQgPSB6b25lLmlkO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8udmVoaWNsZUNsYXNzSWQgPSBzYy52ZWhpY2xlY2xhc3NpZDtcbiAgICAgICAgICByZXR1cm4gc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0bztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBzbWFydENvdW50ZXJKc29uOicsIGVycm9yKTtcbiAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzcyA9IFtdO1xuICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGUgPSBbXTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24pXG4gIG9uU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LFxuICAgIHsgc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkIH06IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1cyA9IHRoaXMudXBkYXRlU2VydmljZVJ1bm5pbmdTdGF0dXNGbGFncyhzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdLCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMpO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0gPSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5IH0pO1xuXG4gICAgLy8gVXBkYXRpbmcgUGFya0Nvbm5lY3Rpb25TdGF0dXMgZm9yIHBhcmtzXG4gICAgaWYgKGZhY2lsaXR5RGljdGlvbmFyeSkge1xuICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSBjbG9uZURlZXAoY3R4LmdldFN0YXRlKCkuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkpO1xuICAgICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBmYWNpbGl0eSwgc2VydmljZXNSdW5uaW5nU3RhdHVzLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgfVxuICAgICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5Q2hhbmdlZEFjdGlvbilcbiAgb25GYWNpbGl0eUNoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBmYWNpbGl0eSwgZ3VpZCB9OiBGYWNpbGl0eUNoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkRmFjaWxpdHkgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0gPyBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdIDogbnVsbDtcbiAgICBpZiAoIXNlbGVjdGVkRmFjaWxpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZWRGYWNpbGl0eSA9IHRoaXMuYXNzaWduRmFjaWxpdHkoc2VsZWN0ZWRGYWNpbGl0eSwgZmFjaWxpdHkpO1xuICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gPSBjb21wbGV0ZWRGYWNpbGl0eTtcblxuICAgIGN0eC5wYXRjaFN0YXRlKHsgZGljdGlvbmFyeTogY2xvbmVEZWVwKGZhY2lsaXR5RGljdGlvbmFyeSkgfSk7XG5cbiAgICBpZiAodGhpcy5pc1BhcmtBY3RpdmUoY3R4LCBndWlkLCBmYWNpbGl0eS5pZCkpIHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWQ6IGNvbXBsZXRlZEZhY2lsaXR5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRpbmcgUGFya0Nvbm5lY3Rpb25TdGF0dXMgZm9yIHBhcmtzXG4gICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSBjbG9uZURlZXAoY3R4LmdldFN0YXRlKCkuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkpO1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSk7XG4gICAgZm9yIChjb25zdCBmYWNpbGl0eSBvZiBmYWNpbGl0aWVzKSB7XG4gICAgICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgIH1cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0pO1xuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRCYXNpY01lbnVBY3Rpb24pXG4gIG9uU2V0QmFzaWNNZW51QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgc21hcnRwYXJrTWFwLCBhcHBNb2R1bGUgfTogU2V0QmFzaWNNZW51QWN0aW9uKSB7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbih0aGlzLnRvQmFzaWNNZW51SXRlbXMoY3R4LCBzbWFydHBhcmtNYXAsIGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnksIGFwcE1vZHVsZSksIGFwcE1vZHVsZSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWNjb3VudE1hbmFnZW1lbnRHdWVzdEdyb3VwQWN0aW9uKVxuICBvbkxvYWRBY2NvdW50TWFuYWdlbWVudEd1ZXN0R3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZEFjY291bnRNYW5hZ2VtZW50R3Vlc3RHcm91cEFjdGlvbikge1xuICAgIGNvbnN0IGdldEdyb3VwcyQgPSB0aGlzLmdyb3VwUnBjU2VydmljZVByb3h5LmdldEd1ZXN0R3JvdXAoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldEdyb3VwcyQucGlwZSh0YXAoZ3JvdXBzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3JvdXBzOiBncm91cHMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFJlcG9ydHNHdWVzdEdyb3VwQWN0aW9uKVxuICBvbkxvYWRSZXBvcnRzR3Vlc3RHcm91cHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkUmVwb3J0c0d1ZXN0R3JvdXBBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRHcm91cHMkID0gdGhpcy5ncm91cFJwY1NlcnZpY2VQcm94eS5nZXRHdWVzdEdyb3VwKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRHcm91cHMkLnBpcGUodGFwKGdyb3VwcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGdyb3VwczogZ3JvdXBzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRDYXRlZ29yaWVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZENhdGVnb3JpZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQ2F0ZWdvcmllc0FjdGlvbikge1xuICAgIGNvbnN0IGdldENhdGVnb3JpZXMkID0gdGhpcy5jYXRlZ29yeVNlcnZpY2VQcm94eS5nZXRDYXRlZ29yaWVzKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcbiAgICByZXR1cm4gZ2V0Q2F0ZWdvcmllcyQucGlwZSh0YXAoY2F0ZWdvcmllcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFJlcG9ydHNKb2JUaXRsZXNBY3Rpb24pXG4gIG9uTG9hZFJlcG9ydHNKb2JUaXRsZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkUmVwb3J0c0pvYlRpdGxlc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEpvYlRpdGxlcyQgPSB0aGlzLmpvYlRpdGxlUnBjU2VydmljZVByb3h5LmdldEpvYlRpdGxlcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgcmV0dXJuIGdldEpvYlRpdGxlcyQucGlwZSh0YXAoam9iVGl0bGVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgam9iVGl0bGVzOiBqb2JUaXRsZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY291bnRNYW5hZ2VtZW50Sm9iVGl0bGVzQWN0aW9uKVxuICBvbkxvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEpvYlRpdGxlcyQgPSB0aGlzLmpvYlRpdGxlUnBjU2VydmljZVByb3h5LmdldEpvYlRpdGxlcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Sm9iVGl0bGVzJC5waXBlKHRhcChqb2JUaXRsZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBqb2JUaXRsZXM6IGpvYlRpdGxlcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVwb3J0c1pvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFJlcG9ydHNab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRSZXBvcnRzWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVScGNTZXJ2aWNlUHJveHkuZ2V0Wm9uZXNCeVNlYXJjaFBhcmFtcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Wm9uZXMkLnBpcGUodGFwKHpvbmVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgem9uZXM6IHpvbmVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRBY2Nlc3NQcm9maWxlWm9uZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQWNjZXNzUHJvZmlsZVpab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2Nlc3NQcm9maWxlWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVScGNTZXJ2aWNlUHJveHkuZ2V0Wm9uZXNCeVNlYXJjaFBhcmFtcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Wm9uZXMkLnBpcGUodGFwKHpvbmVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgem9uZXM6IHpvbmVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRDY01haW5ab25lc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRDY01haW5ab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRDY01haW5ab25lc0FjdGlvbikge1xuICAgIGNvbnN0IGdldFpvbmVzJCA9IHRoaXMuem9uZVJwY1NlcnZpY2VQcm94eS5nZXRab25lc0J5U2VhcmNoUGFyYW1zKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFpzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFpzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFpzQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgejogbnVsbCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcE1vZHVsZTogQXBwTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBsZXQgZ2V0WnMkOiBPYnNlcnZhYmxlPFJwYy5aRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgYXBwTW9kdWxlID09PSBBcHBNb2R1bGUuQ2M6XG4gICAgICAgIGdldFpzJCA9IHRoaXMuelJwY1NlcnZpY2VQcm94eS5nZXRDY1pzKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgYXBwTW9kdWxlID09PSBBcHBNb2R1bGUuUmVwb3J0czpcbiAgICAgICAgZ2V0WnMkID0gdGhpcy56UnBjU2VydmljZVByb3h5LmdldFJlcG9ydHNacyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiBcbiAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgYXBwbW9kdWxlIGZvciB6c1wiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRacyQucGlwZSh0YXAoeiA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHo6IHouZGF0YSxcbiAgICAgIH0pO1xuICAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyR3JvdXBzQWN0aW9uKVxuICBvbkNsZWFyR3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBncm91cHM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyQ2F0ZWdvcmllc0FjdGlvbilcbiAgb25DbGVhckNhdGVnb3JpZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGNhdGVnb3JpZXM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFySm9iVGl0bGVzQWN0aW9uKVxuICBvbkNsZWFySm9iVGl0bGVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBqb2JUaXRsZXM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyWm9uZXNBY3Rpb24pXG4gIG9uQ2xlYXJab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgem9uZXM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyWnNBY3Rpb24pXG4gIG9uQ2xlYXJac0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgejogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKVxuICBvblNldFNlbGVjdGVkUGFya0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGd1aWQsIGZhY2lsaXR5IH06IFNldFNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShmYWNpbGl0eT8uZmVhdHVyZVBlcm1pc3Npb25zKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBndWlkLFxuICAgICAgcGFya0lkOiBmYWNpbGl0eT8uaWQsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogZmFjaWxpdHk/Lm11bHRpUGFya1BhcmVudElELFxuICAgICAgc2VsZWN0ZWQ6IGZhY2lsaXR5LFxuICAgICAgem9uZXM6IGZhY2lsaXR5Py56b25lcyxcbiAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbilcbiAgb25DbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyB9OiBDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBndWlkOiAnJyxcbiAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKVxuICBvbkNsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBDbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcblxuICAgIC8vIElmIHRoZSBzZWxlY3RlZCBmYWNpbGl0eSBpcyBJbmFjdGl2ZSBhbmQgbm90IGEgU3VwZXJwYXJrLCB3ZSBkZXNlbGVjdFxuICAgIC8vIFRoaXMgbWVhbiB3ZSB3b24ndCBjYXJyeSBhbiBJbmFjdGl2ZSBwYXJrIHRvIHRoZSBuZXh0IG1vZHVsZSBhcyBzZWxlY3RlZFxuICAgIGlmICghc2VsZWN0ZWQ/LmFjdGl2ZSAmJiAhc2VsZWN0ZWQ/LmlzTXVsdGlQYXJrKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGd1aWQ6ICcnLFxuICAgICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICAgIG11bHRpUGFya1BhcmVudElEOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgICAgem9uZXM6IG51bGwsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCB9OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbikge1xuICAgIGNvbnN0IGZhY2lsaXR5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeVtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5ndWlkXVtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5wYXJrSWRdO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uVHlwZUtleSA9IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXlbRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXNbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQudHlwZV1dO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzOiBbeyB2YWx1ZTogZmFjaWxpdHkubmFtZSwgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLmJvZHkgfV0sXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChvcGVyYXRpb25UeXBlS2V5KVxuICAgIH07XG5cbiAgICBpZiAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQudHlwZSA9PT0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuU2V0QWN0aXZlUmF0ZSkge1xuICAgICAgdGhpcy5wcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWcpO1xuICAgIH1cblxuICAgIG9mKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50KS5waXBlKHN3aXRjaE1hcChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCA9PiB7XG4gICAgICByZXR1cm4gZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc3VjY2VzcyA/IG9mKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MpIDogdGhyb3dFcnJvcignRmFpbGVkIGV4ZWN1dGluZyBjb21tYW5kJyk7XG4gICAgfSksIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheShjb25maWcpKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkTWFjcm9Db21tYW5kc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgZ3VpZCB9OiBMb2FkTWFjcm9Db21tYW5kc0FjdGlvbikge1xuICAgIGNvbnN0IG1hY3JvQ29tbWFuZHMkID0gdGhpcy5yZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LmdldE1hY3JvQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgIHJldHVybiBtYWNyb0NvbW1hbmRzJC5waXBlKHRhcChtYWNyb0NvbW1hbmRzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbWFjcm9Db21tYW5kczogbWFjcm9Db21tYW5kcy5kYXRhXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbilcbiAgb25DbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIG1hY3JvQ29tbWFuZHM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0aWVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIsIGFwcE1vZHVsZTogQXBwTW9kdWxlLFxuICAgIGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgZmFjaWxpdGllc01hcD86IFN0cmluZ01hcDxGYWNpbGl0eUR0b1tdPikge1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBub3dNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIGlmIChmYWNpbGl0aWVzTWFwKSB7XG4gICAgICBmYWNpbGl0aWVzTWFwW2d1aWRdLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGYuY2xvdWRJZCA9IGYuY2xvdWRJZCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5jbG91ZElkO1xuICAgICAgICBmLmZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGYucGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0ucGVybWlzc2lvbnM7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0sIGYpO1xuICAgICAgICByZXR1cm4gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhY2lsaXR5LmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLmNsb3VkSWQ7XG4gICAgICBmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgIGZhY2lsaXR5LnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5wZXJtaXNzaW9ucztcbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdID0gdGhpcy51cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBmYWNpbGl0eSk7XG4gICAgfVxuXG4gICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSB0aGlzLmdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5LCBub3dNb21lbnQpO1xuICAgIHRoaXMucGF0Y2hEaWZmRGljdGluYXJ5VG9TdG9yZShjdHgsIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KTtcbiAgICB0aGlzLnBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4LCBmYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBhcHBNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKHN0b3JlZEZhY2lsaXR5OiBGYWNpbGl0eUR0bywgaW5jb21pbmdGYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSAhaW5jb21pbmdGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgcmV0dXJuIGluY29taW5nRmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGFwcE1vZHVsZTogQXBwTW9kdWxlKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeSxcbiAgICB9KTtcblxuICAgIGlmIChhcHBNb2R1bGUgPT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgICAgem9uZXM6IGZhY2lsaXR5LnpvbmVzLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgbm93TW9tZW50OiBtb21lbnQuTW9tZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gbm93TW9tZW50LnR6KGZhY2lsaXR5LnNwVGltZVpvbmUpLmRpZmYodGhpcy5zeW5jU2VydmVyRGF0ZUdsb2JhbFdvcmxkVGltZVpvbmUoZmFjaWxpdHkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5OiBGYWNpbGl0eUR0bykge1xuICAgIC8vIGZpeCBmb3Igc2VydmVycyB0aGF0IG5vdCBzeW5jIHRvIGdsb2JhbCB3b3JsZCBjbG9ja1xuICAgIGxldCBzZXJ2ZXJEYXRlVGltZTogc3RyaW5nID0gZmFjaWxpdHkuc2VydmVyRGF0ZVRpbWVbJ19pJ107XG4gICAgaWYgKCFzZXJ2ZXJEYXRlVGltZS5lbmRzV2l0aCgnKzAwOjAwJykpIHtcbiAgICAgIHNlcnZlckRhdGVUaW1lID0gc2VydmVyRGF0ZVRpbWUuc2xpY2UoMCwgc2VydmVyRGF0ZVRpbWUuaW5kZXhPZignLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbWVudC50eihzZXJ2ZXJEYXRlVGltZSwgZmFjaWxpdHkuc3BUaW1lWm9uZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3MoY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byk6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICByZXR1cm4gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25GYWNpbGl0eShzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKTogRmFjaWxpdHlEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBsZXQgY3VycmVudEZhY2lsaXR5ID0gbmV3IEZhY2lsaXR5RHRvKHN0b3JlZEZhY2lsaXR5KTtcbiAgICBjdXJyZW50RmFjaWxpdHkubmFtZSA9IGluY29taW5nRmFjaWxpdHkubmFtZTtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNMUFJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNdWx0aVBhcmsgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTXVsdGlQYXJrO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50aW1lRHJpZnQgPSBpbmNvbWluZ0ZhY2lsaXR5LnRpbWVEcmlmdDtcbiAgICBjdXJyZW50RmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlcjtcbiAgICBjdXJyZW50RmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyID0gaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlclBvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5LmFjdGl2ZSA9IGluY29taW5nRmFjaWxpdHkuYWN0aXZlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50b3RhbFNwYWNlID0gaW5jb21pbmdGYWNpbGl0eS50b3RhbFNwYWNlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBjdXJyZW50RmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkRGF0ZVRpbWVVdGMoKSB7XG4gICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgcmV0dXJuIG1vbWVudC51dGMoKS5zdWJ0cmFjdChjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSwgJ21pbGxpc2Vjb25kcycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0Jhc2ljTWVudUl0ZW1zKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgdGliYUtleXMgPSBjdHguZ2V0U3RhdGUoKS50aWJhS2V5cztcbiAgICBjb25zdCBtZW51SXRlbXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgY29uc3QgdGliYUtleSA9IHRpYmFLZXlzW2d1aWRdO1xuICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5jcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrTWFwW2d1aWRdLCBndWlkLCB0aWJhS2V5LCBmYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGlzUGFya0FjdGl2ZSA9IChjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PlxuICAgIGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkPy5pZCA9PT0gcGFya0lkICYmIGN0eC5nZXRTdGF0ZSgpLmd1aWQgPT09IGd1aWQ7XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrQmFzaWM6IFNtYXJ0cGFya0Jhc2ljRHRvLCBndWlkOiBzdHJpbmcsIHRpYmFLZXk6IG51bWJlciwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgc21hcnRwYXJrQmFzaWMuZmFjaWxpdGllcy5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICBpZiAobG90Lm11bHRpUGFya1BhcmVudElEID4gMCkge1xuICAgICAgICAvLyBkbyBub3QgcHVzaCBjaGlsZHJlbnMgdG8gbWVudSBpdGVtcyBhcnJheVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmNyZWF0ZU1lbnUoZ3VpZCwgdGliYUtleSwgc21hcnRwYXJrQmFzaWMsIGxvdCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpO1xuICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPik6IHZvaWQge1xuICAgIC8vIFdlIGRvbnQgcnVuIG1lbnUgdXBkYXRlIGlmIHdlIGFyZSBub3QgaW4gQ0NcbiAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBpZiAoY3VycmVudE1vZHVsZSAhPT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG5cbiAgICBmb3IgKGNvbnN0IFtndWlkLCBsb3RzTWFwXSBvZiBPYmplY3QuZW50cmllcyhmYWNpbGl0eURpY3Rpb25hcnkpKSB7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gICAgICAgIGlmIChmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgICBtZW51SXRlbSA9IG1lbnVJdGVtc1xuICAgICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQpPy5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbmQoc3ViSXRlbSA9PiBzdWJJdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBpdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVudUl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBiYWRnZUNsYXNzID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmdldEJhZGdlUHJpb3JpdHkoZ3VpZCwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHksIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgICAgbWVudUl0ZW0uaGFzQmFkZ2UgPSBiYWRnZUNsYXNzICE9PSBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzLkNvbm5lY3RlZDtcbiAgICAgICAgICBtZW51SXRlbS5iYWRnZUNsYXNzID0gYmFkZ2VDbGFzcztcbiAgICAgICAgICBtZW51SXRlbS5uYW1lID0gZmFjaWxpdHkubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbihbLi4ubWVudUl0ZW1zXSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPiA9IHt9O1xuICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwOiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLnNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwW2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMucmVkdWNlKChmYWNpbGl0aWVzLCBsb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFya0Nvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBsb3QsIHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgIGZhY2lsaXRpZXNbbG90LmlkXSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICBzdGFydERhdGU6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXJ0RGF0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmFjaWxpdGllcztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KTogeyBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTsgfSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkgPSB7fTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgbG90IG9mIHNtYXJ0cGFya01hcFtndWlkXS5mYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvbnN0IGNsb3QgPSBuZXcgRmFjaWxpdHlEdG8oKTtcbiAgICAgICAgY2xvdC5pZCA9IGxvdC5pZDtcbiAgICAgICAgY2xvdC5jbG91ZElkID0gbG90LmNsb3VkSWQ7XG4gICAgICAgIGNsb3QuYWN0aXZlID0gbG90LmFjdGl2ZTtcbiAgICAgICAgY2xvdC5mZWF0dXJlUGVybWlzc2lvbnMgPSBsb3QuZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgICBjbG90LnBlcm1pc3Npb25zID0gbG90LnBlcm1pc3Npb25zO1xuICAgICAgICBjbG90Lm5hbWUgPSBsb3QubmFtZTtcbiAgICAgICAgY2xvdC5zaXRlQ29kZSA9IGxvdC5zaXRlQ29kZTtcbiAgICAgICAgY2xvdC5tdWx0aVBhcmtQYXJlbnRJRCA9IGxvdC5tdWx0aVBhcmtQYXJlbnRJRDtcbiAgICAgICAgY2xvdC5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gbG90LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gbG90LmlzQ3JlZGl0U2VydmVyRW5hYmxlZDtcbiAgICAgICAgY2xvdC5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IGxvdC5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzTFBSQ29ubmVjdGVkID0gbG90LmlzTFBSQ29ubmVjdGVkO1xuICAgICAgICBjbG90LmlzTFBSRW5hYmxlZCA9IGxvdC5pc0xQUkVuYWJsZWQ7XG4gICAgICAgIGNsb3QuaXNUaWNrZXRMZXNzRW5hYmxlZCA9IGxvdC5pc1RpY2tldExlc3NFbmFibGVkO1xuICAgICAgICBjbG90LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNCYXNpYyA9IGxvdC5pc0Jhc2ljO1xuICAgICAgICBjbG90LmlzTXVsdGlQYXJrID0gbG90LmlzTXVsdGlQYXJrO1xuICAgICAgICBjbG90LnRpbWVEcmlmdCA9IGxvdC50aW1lRHJpZnQ7XG4gICAgICAgIGNsb3Quc3BUaW1lWm9uZSA9IGxvdC5zcFRpbWVab25lO1xuICAgICAgICBjbG90LnNlcnZlckRhdGVUaW1lID0gbG90LnNlcnZlckRhdGVUaW1lO1xuICAgICAgICBjbG90LnRvdGFsU3BhY2UgPSBsb3QudG90YWxTcGFjZTtcbiAgICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2xvdC5pZF0gPSBjbG90O1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGlmZiBvZiAwIGZvciBpbml0aWFsIHNldHVwXG4gICAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZVNtYXJ0cGFya0Jhc2ljKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0UGFya3M6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4pIHtcbiAgICAvLyBrZWVwIGRlZmF1bHQgdmFsdWVzIHdoZW4gbmF2aWdhdGUgdG8gY29tbWFuZCBjZW50ZXIgZm9yd2FyZCBhbmQgYmFjay5cbiAgICBjb25zdCB7IGd1aWQsIHBhcmtJZCwgbXVsdGlQYXJrUGFyZW50SUQsIHNlbGVjdGVkIH0gPSBjdHguZ2V0U3RhdGUoKTtcbiAgICBkZWZhdWx0cy5ndWlkID0gZ3VpZDtcbiAgICBkZWZhdWx0cy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgIGRlZmF1bHRzLnBhcmtJZCA9IHBhcmtJZDtcbiAgICBkZWZhdWx0cy5tdWx0aVBhcmtQYXJlbnRJRCA9IG11bHRpUGFya1BhcmVudElEO1xuXG4gICAgY3R4LnNldFN0YXRlKGRlZmF1bHRzKTtcblxuICAgIGNvbnN0IHRpYmFLZXlzOiBTdHJpbmdNYXA8bnVtYmVyPiA9IE9iamVjdC5rZXlzKHNtYXJ0UGFya3MpLnJlZHVjZSgoa2V5cywgZ3VpZCwgaW5kZXgpID0+IHtcbiAgICAgIGtleXNbZ3VpZF0gPSBpbmRleDtcbiAgICAgIHJldHVybiBrZXlzO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IHsgZGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfSA9IHRoaXMuY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0UGFya3MpO1xuXG4gICAgY29uc3Qgc3RhdGVVcGRhdGVzOiBQYXJ0aWFsPEZhY2lsaXR5U3RhdGVNb2RlbD4gPSB7XG4gICAgICB0aWJhS2V5cyxcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSxcbiAgICB9O1xuXG4gICAgaWYgKCFkaWN0aW9uYXJ5W2d1aWRdIHx8ICFkaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVVcGRhdGVzLCB7XG4gICAgICAgIGd1aWQ6ICcnLFxuICAgICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICAgIG11bHRpUGFya1BhcmVudElEOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgICAgem9uZXM6IG51bGwsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjdHgucGF0Y2hTdGF0ZShzdGF0ZVVwZGF0ZXMpO1xuXG4gICAgLy91c2VzIGZhY2lsaXR5IGRpY3Rpb25hcnkgZnJvbSBzdG9yZSwgdGhlcmVmb3JlIHBsYWNlZCBhZnRlclxuICAgIGNvbnN0IHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfSA9IHRoaXMuZ2V0U21hcnRwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzbWFydFBhcmtzLCBkaWN0aW9uYXJ5KTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5OiBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0R5bmFtaWNQcmljaW5nU2V0QWN0aXZlUmF0ZShmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudDogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQsIGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcDogTnVtYmVyTWFwPER5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvPiA9IEpTT04ucGFyc2UoXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OKVxuICAgICkgPz8ge307XG5cbiAgICBjb25zdCBkcGM6IER5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvID0gZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnNvdXJjZUlkZW50aWZpZXJdO1xuICAgIGlmIChkcGMpIHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5OiBGYWNpbGl0eUR0byA9IG51bGw7XG4gICAgICBjb25maWcuZHVyYXRpb24gPSA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgICBjb25maWcubWVzc2FnZXMgPSB0aGlzLmZhY2lsaXR5Q29tbWFuZHNDb25maWdTZXJ2aWNlLmdldENvbW1hbmROb3RpZmljYXRpb25Db25maWdNZXNzYWdlcyhcbiAgICAgICAgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuU2V0QWN0aXZlUmF0ZSxcbiAgICAgICAgZmFjaWxpdHksXG4gICAgICAgIGRwY1xuICAgICAgKTtcblxuICAgICAgLy8gQ2xvc2UgZHluYW1pYyBwcmljaW5nIG5vdGlmaWNhdGlvblxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8gPSBuZXcgTm90aWZpY2F0aW9uRHRvKCk7XG4gICAgICBub3RpZmljYXRpb24udHlwZSA9IE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgICBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24gPSBkcGM7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKG5vdGlmaWNhdGlvbiwgZHBjLmd1aWQpKTtcblxuICAgICAgZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50Lmd1aWRdID0gbnVsbDtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFxuICAgICAgICBEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXApXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
983
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVySSxPQUFPLEVBQzRELFdBQVcsRUFDNUUsMEJBQTBCLEVBQ2dDLFNBQVMsRUFBRSwrQkFBK0IsRUFFckcsTUFBTSx5Q0FBeUMsQ0FB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QVd6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lLCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgRmFjaWxpdHlSZW1vdGVDb21tYW5kc0xvY2FsaXphdGlvbktleSB9IGZyb20gJy4uLy4uL2VudW1zL2ZhY2lsaXR5LXJlbW90ZS1jb21tYW5kcy5lbnVtJztcbmltcG9ydCB7IFBhcmtDb25uZWN0aW9uU3RhdHVzQ2xhc3MgfSBmcm9tICcuLi8uLi9lbnVtcy9wcmlvcml0eS1saW5rLXN0YXR1cy5lbnVtJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51LWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJwYyB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHknO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBTbWFydHBhcmtCYXNpY0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7XG4gIENhdGVnb3J5RHRvLCBDYXRlZ29yeVJwY1NlcnZpY2VQcm94eSwgRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0bywgRmFjaWxpdHlEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG8sXG4gIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLCBGYWNpbGl0eVJwY1NlcnZpY2VQcm94eSwgR3JvdXBEdG8sIEdyb3VwUnBjU2VydmljZVByb3h5LCBKb2JUaXRsZUR0byxcbiAgSm9iVGl0bGVScGNTZXJ2aWNlUHJveHksIE1hY3JvQ29tbWFuZER0bywgUGVybWlzc2lvblR5cGUsIFJ1bGVzTW9kZSwgU21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0byxcbiAgWkR0bywgWm9uZUR0bywgWm9uZVJwY1NlcnZpY2VQcm94eSwgWlJwY1NlcnZpY2VQcm94eVxufSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L3JwYy1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWNpbGl0eS1jb21tYW5kcy1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzVHJ1dGh5LCBOdW1iZXJNYXAsIFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbi10eXBlLW1hcHBlci51dGlsJztcbmltcG9ydCB7IG9iamVjdEtleXN0b0xvd2VyQ2FzZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RleHQudXRpbCc7XG5pbXBvcnQgeyBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uIH0gZnJvbSAnLi4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IE1lbnVMb2FkQWN0aW9uIH0gZnJvbSAnLi4vc2lkZW5hdi9zaWRlbmF2LmFjdGlvbnMnO1xuaW1wb3J0IHsgU2lkZW5hdlN0YXRlIH0gZnJvbSAnLi4vc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IFNldFNtYXJ0UGFya0FjdGlvbiB9IGZyb20gJy4uL3NtYXJ0cGFya3Mvc21hcnRwYXJrLmFjdGlvbnMnO1xuaW1wb3J0IHsgRmFjaWxpdHlNZW51U2VydmljZSB9IGZyb20gJy4vZmFjaWxpdHktbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LCBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSwgRGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LCBGYWNpbGl0eURpY3Rpb25hcnksIEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5XG59IGZyb20gJy4vZmFjaWxpdHktbW9kYWwnO1xuaW1wb3J0IHtcbiAgQ2xlYXJDYXRlZ29yaWVzQWN0aW9uLCBDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbiwgQ2xlYXJHcm91cHNBY3Rpb24sIENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24sIENsZWFySm9iVGl0bGVzQWN0aW9uLFxuICBDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24sIENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbiwgQ2xlYXJab25lc0FjdGlvbiwgQ2xlYXJac0FjdGlvbiwgRmFjaWxpdHlDaGFuZ2VkQWN0aW9uLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbixcbiAgTG9hZEFjY2Vzc1Byb2ZpbGVab25lc0FjdGlvbiwgTG9hZEFjY291bnRNYW5hZ2VtZW50R3Vlc3RHcm91cEFjdGlvbiwgTG9hZEFjY291bnRNYW5hZ2VtZW50Sm9iVGl0bGVzQWN0aW9uLFxuICBMb2FkQ2F0ZWdvcmllc0FjdGlvbiwgTG9hZENjTWFpblpvbmVzQWN0aW9uLCBMb2FkRmFjaWxpdHlBY3Rpb24sIExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCBMb2FkTWFjcm9Db21tYW5kc0FjdGlvbixcbiAgTG9hZFBhcmtpbmdMb3RBY3Rpb24sIExvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgTG9hZFJlcG9ydHNHdWVzdEdyb3VwQWN0aW9uLCBMb2FkUmVwb3J0c0pvYlRpdGxlc0FjdGlvbiwgTG9hZFJlcG9ydHNab25lc0FjdGlvbixcbiAgTG9hZFpzQWN0aW9uLCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uLCBTZXRCYXNpY01lbnVBY3Rpb24sIFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uLCBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uLFxuICBTZXRTZWxlY3RlZFBhcmtBY3Rpb24sIFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbiwgVW5sb2FkUGFya2luZ0xvdEFjdGlvbiwgWm9uZUNoYW5nZWRBY3Rpb25cbn0gZnJvbSAnLi9mYWNpbGl0eS5hY3Rpb25zJztcblxuaW1wb3J0IFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0byA9IFJwYy5TbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG87XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFjaWxpdHlTdGF0ZU1vZGVsIHtcbiAgZ3VpZDogc3RyaW5nO1xuICBwYXJrSWQ6IG51bWJlcjtcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5O1xuICBtdWx0aVBhcmtQYXJlbnRJRDogbnVtYmVyO1xuICBzZWxlY3RlZDogRmFjaWxpdHlEdG87XG4gIGRpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeTtcbiAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz47XG4gIHRpYmFLZXlzOiBTdHJpbmdNYXA8bnVtYmVyPjtcbiAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZ3JvdXBzOiBHcm91cER0b1tdO1xuICBjYXRlZ29yaWVzOiBDYXRlZ29yeUR0b1tdO1xuICBqb2JUaXRsZXM6IEpvYlRpdGxlRHRvW107XG4gIHpvbmVzOiBab25lRHRvW107XG4gIHo6IFpEdG9bXTtcbiAgYWxsb3dlZEFjdGlvbnM6IE51bWJlck1hcDxib29sZWFuPjtcbiAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICBtYWNyb0NvbW1hbmRzOiBNYWNyb0NvbW1hbmREdG9bXTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGd1aWQ6ICcnLFxuICBwYXJrSWQ6IG51bGwsXG4gIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5OiB7fSxcbiAgbXVsdGlQYXJrUGFyZW50SUQ6IHVuZGVmaW5lZCxcbiAgc2VsZWN0ZWQ6IG51bGwsXG4gIGRpY3Rpb25hcnk6IHt9LFxuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiB7fSxcbiAgdGliYUtleXM6IHt9LFxuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IHt9LFxuICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGdyb3VwczogbnVsbCxcbiAgY2F0ZWdvcmllczogbnVsbCxcbiAgam9iVGl0bGVzOiBudWxsLFxuICB6b25lczogbnVsbCxcbiAgejogbnVsbCxcbiAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeToge30sXG4gIG1hY3JvQ29tbWFuZHM6IFtdXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8RmFjaWxpdHlTdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdmYWNpbGl0eScsXG4gIGRlZmF1bHRzLFxufSlcbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVN0YXRlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5Q29tbWFuZHNDb25maWdTZXJ2aWNlOiBCYXNlRmFjaWxpdHlDb21tYW5kc0NvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlNZW51U2VydmljZTogRmFjaWxpdHlNZW51U2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5U2VydmljZVByb3h5OiBGYWNpbGl0eVJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHk6IFJwYy5SZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgZ3JvdXBScGNTZXJ2aWNlUHJveHk6IEdyb3VwUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgY2F0ZWdvcnlTZXJ2aWNlUHJveHk6IENhdGVnb3J5UnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgam9iVGl0bGVScGNTZXJ2aWNlUHJveHk6IEpvYlRpdGxlUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgem9uZVJwY1NlcnZpY2VQcm94eTogWm9uZVJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHpScGNTZXJ2aWNlUHJveHk6IFpScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBnbG9iYWxFcnJvclNlcnZpY2U6IEdsb2JhbEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlOiBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlbGVjdGVkKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eUR0byB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBpc0NoaWxkKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQubXVsdGlQYXJrUGFyZW50SUQgPiAwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBmZWF0dXJlUGVybWlzc2lvbnMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFBlcm1pc3Npb25UeXBlW10ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZD8uZmVhdHVyZVBlcm1pc3Npb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhbGxvd2VkQWN0aW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogTnVtYmVyTWFwPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gc3RhdGUuYWxsb3dlZEFjdGlvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzTXVsdGlQYXJrKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZD8uaXNNdWx0aVBhcms7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHJhd1pvbmVzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBab25lRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS56b25lcztcbiAgfVxuXG4gIEBTZWxlY3RvcihbRmFjaWxpdHlTdGF0ZS5yYXdab25lc10pXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoem9uZXM6IFpvbmVEdG9bXSk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSAhPT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcihbRmFjaWxpdHlTdGF0ZS5yYXdab25lc10pXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRab25lcyh6b25lczogWm9uZUR0b1tdKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlID09PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZhY2lsaXR5RGljdGlvbmFyeShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRmFjaWxpdHlEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuZGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGliYUtleXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxudW1iZXI+IHtcbiAgICByZXR1cm4gc3RhdGUudGliYUtleXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlbGVjdGVkUGFya0RldmljZVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBEZXZpY2VSZW1vdGVDb21tYW5kUmVmRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF0gPyBzdGF0ZS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHkuZ2V0RGV2aWNlUmVtb3RlQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgICAgcmV0dXJuIHJlbW90ZUNvbW1hbmRzUmVmJC5waXBlKHRhcChyZW1vdGVDb21tYW5kc1JlZiA9PiB7XG4gICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24ocmVtb3RlQ29tbWFuZHNSZWYuZGF0YSwgZ3VpZCwgcGFya0lkKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCB0aWJhS2V5SW5kZXggfTogTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF0gfHwgIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICAgIGlmIChyZW1vdGVDb21tYW5kc1JlZiQpIHtcbiAgICAgICAgcmV0dXJuIHJlbW90ZUNvbW1hbmRzUmVmJC5waXBlKHRhcChyZW1vdGVDb21tYW5kc1JlZiA9PiB7XG4gICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkRmFjaWxpdHlBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQsIGlzU3VwZXJQYXJrLCBhcHBNb2R1bGUgfTogTG9hZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgaWYgKGlzU3VwZXJQYXJrKSB7XG4gICAgICBjb25zdCBhbGxHdWlkRmFjaWxpdGllcyQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldEZhY2lsaXRpZXMoZ3VpZCwgcGFya0lkKTtcbiAgICAgIHJldHVybiBhbGxHdWlkRmFjaWxpdGllcyQucGlwZSh0YXAoZmFjaWxpdGllc01hcCA9PiB7XG4gICAgICAgIGNvbnN0IGZhY2lsaXR5ID0gZmFjaWxpdGllc01hcC5kYXRhW2d1aWRdLmZpbmQoZiA9PiBmLmlkID0gcGFya0lkKTtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LCBmYWNpbGl0aWVzTWFwLmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsRmFjaWxpdHkkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0eShndWlkLCBwYXJrSWQpO1xuICAgICAgcmV0dXJuIGZ1bGxGYWNpbGl0eSQucGlwZSh0YXAoZmFjaWxpdHkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZhY2lsaXRpZXMoY3R4LCBndWlkLCBwYXJrSWQsIGFwcE1vZHVsZSwgZmFjaWxpdHkuZGF0YSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihVbmxvYWRQYXJraW5nTG90QWN0aW9uKVxuICBvblVubG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBVbmxvYWRQYXJraW5nTG90QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbilcbiAgb25TZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSA9IHt9O1xuICAgIH1cbiAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdKSB7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oWm9uZUNoYW5nZWRBY3Rpb24pXG4gIG9uWm9uZUNoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyB6b25lLCBwYXJrSWQgfTogWm9uZUNoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuICAgIGNvbnN0IHpvbmVJbmRleCA9IHNlbGVjdGVkLnpvbmVzPy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB6b25lLmlkICYmIGl0ZW0ucGFya0lEID09PSBwYXJrSWQpO1xuICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5tb250aGxpZXNPY2N1cGFuY3kgKyB6b25lLnRyYW5zaWVudHNPY2N1cGFuY3k7XG4gICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuXG4gICAgc3dpdGNoICh6b25lLnJ1bGVzTW9kZSkge1xuICAgICAgY2FzZSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVI6XG4gICAgICAgIHpvbmUuY2FwYWNpdHkgPSB6b25lLmNhcGFjaXR5O1xuICAgICAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubG9vcENvdW50O1xuICAgICAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG4gICAgICAgIHRoaXMuaGFuZGxlU21hcnRDb3VudGVyKHpvbmUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX0xPT1BfREVURUNUT1I6XG4gICAgICAgIHpvbmUuY2FwYWNpdHkgPSB6b25lLmNhcGFjaXR5O1xuICAgICAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubG9vcENvdW50O1xuICAgICAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB6b25lLmNhcGFjaXR5ID0gem9uZS5jYXBhY2l0eTtcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLm1vbnRobGllc09jY3VwYW5jeSArIHpvbmUudHJhbnNpZW50c09jY3VwYW5jeTtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzZWxlY3RlZC56b25lc1t6b25lSW5kZXhdID0gem9uZTtcbiAgICBzZWxlY3RlZC56b25lcyA9IGNsb25lKHNlbGVjdGVkLnpvbmVzKTtcblxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3QgZ3VpZCA9IGN0eC5nZXRTdGF0ZSgpLmd1aWQ7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3NlbGVjdGVkLmlkXS56b25lcyA9IHNlbGVjdGVkLnpvbmVzO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTbWFydENvdW50ZXIoem9uZTogWm9uZUR0bykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKHpvbmUuc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKTtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgPSBvYmplY3RLZXlzdG9Mb3dlckNhc2UocGFyc2VkSnNvbik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VkIEpTT04gc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZSA9IHNtYXJ0Q291bnRlclZlaGljbGVUeXBlLm1hcCgoc2M6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0byA9IG5ldyBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8oKTtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8uY291bnRlciA9IHNjLmNvdW50ZXI7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLnpvbmVJZCA9IHpvbmUuaWQ7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLnZlaGljbGVUeXBlSWQgPSBzYy52ZWhpY2xldHlwZWlkO1xuICAgICAgICAgIHJldHVybiBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG87XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzSnNvbikge1xuICAgICAgICBjb25zdCBwYXJzZWRKc29uID0gSlNPTi5wYXJzZSh6b25lLnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pO1xuICAgICAgICBjb25zdCBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgPSBvYmplY3RLZXlzdG9Mb3dlckNhc2UocGFyc2VkSnNvbik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlZCBKU09OIHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcyBpcyBub3QgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzcyA9IHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcy5tYXAoKHNjOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvID0gbmV3IFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8oKTtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLmNvdW50ZXIgPSBzYy5jb3VudGVyO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8uem9uZUlkID0gem9uZS5pZDtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLnZlaGljbGVDbGFzc0lkID0gc2MudmVoaWNsZWNsYXNzaWQ7XG4gICAgICAgICAgcmV0dXJuIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG87XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcGFyc2Ugc21hcnRDb3VudGVySnNvbjonLCBlcnJvcik7XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBbXTtcbiAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gW107XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKVxuICBvblNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPixcbiAgICB7IHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCB9OiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3Moc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzKTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGlmIChmYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHksIHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgIH1cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eUNoYW5nZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHksIGd1aWQgfTogRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZWxlY3RlZEZhY2lsaXR5ID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA6IG51bGw7XG4gICAgaWYgKCFzZWxlY3RlZEZhY2lsaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkRmFjaWxpdHkgPSB0aGlzLmFzc2lnbkZhY2lsaXR5KHNlbGVjdGVkRmFjaWxpdHksIGZhY2lsaXR5KTtcbiAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gY29tcGxldGVkRmFjaWxpdHk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGRpY3Rpb25hcnk6IGNsb25lRGVlcChmYWNpbGl0eURpY3Rpb25hcnkpIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNQYXJrQWN0aXZlKGN0eCwgZ3VpZCwgZmFjaWxpdHkuaWQpKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBjb21wbGV0ZWRGYWNpbGl0eSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0QmFzaWNNZW51QWN0aW9uKVxuICBvblNldEJhc2ljTWVudUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHNtYXJ0cGFya01hcCwgYXBwTW9kdWxlIH06IFNldEJhc2ljTWVudUFjdGlvbikge1xuICAgIGN0eC5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24odGhpcy50b0Jhc2ljTWVudUl0ZW1zKGN0eCwgc21hcnRwYXJrTWFwLCBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5LCBhcHBNb2R1bGUpLCBhcHBNb2R1bGUpKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY291bnRNYW5hZ2VtZW50R3Vlc3RHcm91cEFjdGlvbilcbiAgb25Mb2FkQWNjb3VudE1hbmFnZW1lbnRHdWVzdEdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2NvdW50TWFuYWdlbWVudEd1ZXN0R3JvdXBBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRHcm91cHMkID0gdGhpcy5ncm91cFJwY1NlcnZpY2VQcm94eS5nZXRHdWVzdEdyb3VwKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRHcm91cHMkLnBpcGUodGFwKGdyb3VwcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGdyb3VwczogZ3JvdXBzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZXBvcnRzR3Vlc3RHcm91cEFjdGlvbilcbiAgb25Mb2FkUmVwb3J0c0d1ZXN0R3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFJlcG9ydHNHdWVzdEdyb3VwQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0R3JvdXBzJCA9IHRoaXMuZ3JvdXBScGNTZXJ2aWNlUHJveHkuZ2V0R3Vlc3RHcm91cChhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0R3JvdXBzJC5waXBlKHRhcChncm91cHMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBncm91cHM6IGdyb3Vwcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQ2F0ZWdvcmllc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRDYXRlZ29yaWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZENhdGVnb3JpZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRDYXRlZ29yaWVzJCA9IHRoaXMuY2F0ZWdvcnlTZXJ2aWNlUHJveHkuZ2V0Q2F0ZWdvcmllcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgcmV0dXJuIGdldENhdGVnb3JpZXMkLnBpcGUodGFwKGNhdGVnb3JpZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZXBvcnRzSm9iVGl0bGVzQWN0aW9uKVxuICBvbkxvYWRSZXBvcnRzSm9iVGl0bGVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFJlcG9ydHNKb2JUaXRsZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRKb2JUaXRsZXMkID0gdGhpcy5qb2JUaXRsZVJwY1NlcnZpY2VQcm94eS5nZXRKb2JUaXRsZXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuICAgIHJldHVybiBnZXRKb2JUaXRsZXMkLnBpcGUodGFwKGpvYlRpdGxlcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGpvYlRpdGxlczogam9iVGl0bGVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbilcbiAgb25Mb2FkQWNjb3VudE1hbmFnZW1lbnRKb2JUaXRsZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQWNjb3VudE1hbmFnZW1lbnRKb2JUaXRsZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRKb2JUaXRsZXMkID0gdGhpcy5qb2JUaXRsZVJwY1NlcnZpY2VQcm94eS5nZXRKb2JUaXRsZXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldEpvYlRpdGxlcyQucGlwZSh0YXAoam9iVGl0bGVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgam9iVGl0bGVzOiBqb2JUaXRsZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFJlcG9ydHNab25lc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRSZXBvcnRzWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkUmVwb3J0c1pvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEFjY2Vzc1Byb2ZpbGVaWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQ2NNYWluWm9uZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQ2NNYWluWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQ2NNYWluWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVScGNTZXJ2aWNlUHJveHkuZ2V0Wm9uZXNCeVNlYXJjaFBhcmFtcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Wm9uZXMkLnBpcGUodGFwKHpvbmVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgem9uZXM6IHpvbmVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRac0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRac0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRac0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcHBNb2R1bGU6IEFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgbGV0IGdldFpzJDogT2JzZXJ2YWJsZTxScGMuWkR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGFwcE1vZHVsZSA9PT0gQXBwTW9kdWxlLkNjOlxuICAgICAgICBnZXRacyQgPSB0aGlzLnpScGNTZXJ2aWNlUHJveHkuZ2V0Q2NacyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGFwcE1vZHVsZSA9PT0gQXBwTW9kdWxlLlJlcG9ydHM6XG4gICAgICAgIGdldFpzJCA9IHRoaXMuelJwY1NlcnZpY2VQcm94eS5nZXRSZXBvcnRzWnMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDogXG4gICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIGFwcG1vZHVsZSBmb3IgenNcIik7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0WnMkLnBpcGUodGFwKHogPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6OiB6LmRhdGEsXG4gICAgICB9KTtcbiAgICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckdyb3Vwc0FjdGlvbilcbiAgb25DbGVhckdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3JvdXBzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckNhdGVnb3JpZXNBY3Rpb24pXG4gIG9uQ2xlYXJDYXRlZ29yaWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjYXRlZ29yaWVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckpvYlRpdGxlc0FjdGlvbilcbiAgb25DbGVhckpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgam9iVGl0bGVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpvbmVzQWN0aW9uKVxuICBvbkNsZWFyWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpzQWN0aW9uKVxuICBvbkNsZWFyWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25TZXRTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBndWlkLCBmYWNpbGl0eSB9OiBTZXRTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHk/LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZCxcbiAgICAgIHBhcmtJZDogZmFjaWxpdHk/LmlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Py5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgIHpvbmVzOiBmYWNpbGl0eT8uem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgfTogQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgem9uZXM6IG51bGwsXG4gICAgICBhbGxvd2VkQWN0aW9uczoge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25DbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ7XG5cbiAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZmFjaWxpdHkgaXMgSW5hY3RpdmUgYW5kIG5vdCBhIFN1cGVycGFyaywgd2UgZGVzZWxlY3RcbiAgICAvLyBUaGlzIG1lYW4gd2Ugd29uJ3QgY2FycnkgYW4gSW5hY3RpdmUgcGFyayB0byB0aGUgbmV4dCBtb2R1bGUgYXMgc2VsZWN0ZWRcbiAgICBpZiAoIXNlbGVjdGVkPy5hY3RpdmUgJiYgIXNlbGVjdGVkPy5pc011bHRpUGFyaykge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKVxuICBvbkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgfTogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnlbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF1bZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQucGFya0lkXTtcblxuICAgIGNvbnN0IG9wZXJhdGlvblR5cGVLZXkgPSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTG9jYWxpemF0aW9uS2V5W0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGVdXTtcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XG4gICAgICBtZXNzYWdlczogW3sgdmFsdWU6IGZhY2lsaXR5Lm5hbWUsIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy5ib2R5IH1dLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQob3BlcmF0aW9uVHlwZUtleSlcbiAgICB9O1xuXG4gICAgaWYgKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGUgPT09IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0R5bmFtaWNQcmljaW5nU2V0QWN0aXZlUmF0ZShmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCkucGlwZShzd2l0Y2hNYXAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MgPyBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzKSA6IHRocm93RXJyb3IoJ0ZhaWxlZCBleGVjdXRpbmcgY29tbWFuZCcpO1xuICAgIH0pLCB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLmRpc3BsYXkoY29uZmlnKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQgfTogTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24pIHtcbiAgICBjb25zdCBtYWNyb0NvbW1hbmRzJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXRNYWNyb0NvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICByZXR1cm4gbWFjcm9Db21tYW5kcyQucGlwZSh0YXAobWFjcm9Db21tYW5kcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG1hY3JvQ29tbWFuZHM6IG1hY3JvQ29tbWFuZHMuZGF0YVxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24pXG4gIG9uQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBtYWNyb0NvbW1hbmRzOiBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdGllcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSxcbiAgICBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGZhY2lsaXRpZXNNYXA/OiBTdHJpbmdNYXA8RmFjaWxpdHlEdG9bXT4pIHtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgbm93TW9tZW50ID0gbW9tZW50KCk7XG5cbiAgICBpZiAoZmFjaWxpdGllc01hcCkge1xuICAgICAgZmFjaWxpdGllc01hcFtndWlkXS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBmLmNsb3VkSWQgPSBmLmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uY2xvdWRJZDtcbiAgICAgICAgZi5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgICBmLnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLnBlcm1pc3Npb25zO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLCBmKTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0eS5jbG91ZElkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5jbG91ZElkO1xuICAgICAgZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eS5wZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0ucGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgZmFjaWxpdHkpO1xuICAgIH1cblxuICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gdGhpcy5nZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eSwgbm93TW9tZW50KTtcbiAgICB0aGlzLnBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgdGhpcy5wYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgYXBwTW9kdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKSB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIGluY29taW5nRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBpbmNvbWluZ0ZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGRpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgfSk7XG5cbiAgICBpZiAoYXBwTW9kdWxlID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICAgIHpvbmVzOiBmYWNpbGl0eS56b25lcyxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Lm11bHRpUGFya1BhcmVudElELFxuICAgICAgICBhbGxvd2VkQWN0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eTogRmFjaWxpdHlEdG8sIG5vd01vbWVudDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vd01vbWVudC50eihmYWNpbGl0eS5zcFRpbWVab25lKS5kaWZmKHRoaXMuc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5KSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZXJ2ZXJEYXRlR2xvYmFsV29ybGRUaW1lWm9uZShmYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICAvLyBmaXggZm9yIHNlcnZlcnMgdGhhdCBub3Qgc3luYyB0byBnbG9iYWwgd29ybGQgY2xvY2tcbiAgICBsZXQgc2VydmVyRGF0ZVRpbWU6IHN0cmluZyA9IGZhY2lsaXR5LnNlcnZlckRhdGVUaW1lWydfaSddO1xuICAgIGlmICghc2VydmVyRGF0ZVRpbWUuZW5kc1dpdGgoJyswMDowMCcpKSB7XG4gICAgICBzZXJ2ZXJEYXRlVGltZSA9IHNlcnZlckRhdGVUaW1lLnNsaWNlKDAsIHNlcnZlckRhdGVUaW1lLmluZGV4T2YoJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQudHooc2VydmVyRGF0ZVRpbWUsIGZhY2lsaXR5LnNwVGltZVpvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU21hcnRQYXJrQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDbG91ZENvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgcmV0dXJuIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduRmFjaWxpdHkoc3RvcmVkRmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBpbmNvbWluZ0ZhY2lsaXR5OiBGYWNpbGl0eUR0byk6IEZhY2lsaXR5RHRvIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgbGV0IGN1cnJlbnRGYWNpbGl0eSA9IG5ldyBGYWNpbGl0eUR0byhzdG9yZWRGYWNpbGl0eSk7XG4gICAgY3VycmVudEZhY2lsaXR5Lm5hbWUgPSBpbmNvbWluZ0ZhY2lsaXR5Lm5hbWU7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTXVsdGlQYXJrID0gaW5jb21pbmdGYWNpbGl0eS5pc011bHRpUGFyaztcbiAgICBjdXJyZW50RmFjaWxpdHkudGltZURyaWZ0ID0gaW5jb21pbmdGYWNpbGl0eS50aW1lRHJpZnQ7XG4gICAgY3VycmVudEZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXIgPSBpbmNvbWluZ0ZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5hY3RpdmUgPSBpbmNvbWluZ0ZhY2lsaXR5LmFjdGl2ZTtcbiAgICBjdXJyZW50RmFjaWxpdHkudG90YWxTcGFjZSA9IGluY29taW5nRmFjaWxpdHkudG90YWxTcGFjZTtcbiAgICBjdXJyZW50RmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9ICFpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICByZXR1cm4gY3VycmVudEZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZERhdGVUaW1lVXRjKCkge1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIHJldHVybiBtb21lbnQudXRjKCkuc3VidHJhY3QoY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0sICdtaWxsaXNlY29uZHMnKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9CYXNpY01lbnVJdGVtcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IHRpYmFLZXlzID0gY3R4LmdldFN0YXRlKCkudGliYUtleXM7XG4gICAgY29uc3QgbWVudUl0ZW1zID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIGNvbnN0IHRpYmFLZXkgPSB0aWJhS2V5c1tndWlkXTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKC4uLnRoaXMuY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya01hcFtndWlkXSwgZ3VpZCwgdGliYUtleSwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhcmtBY3RpdmUgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZD8uaWQgPT09IHBhcmtJZCAmJiBjdHguZ2V0U3RhdGUoKS5ndWlkID09PSBndWlkO1xuXG4gIHByaXZhdGUgY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya0Jhc2ljOiBTbWFydHBhcmtCYXNpY0R0bywgZ3VpZDogc3RyaW5nLCB0aWJhS2V5OiBudW1iZXIsIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHNtYXJ0cGFya0Jhc2ljLmZhY2lsaXRpZXMuZm9yRWFjaChsb3QgPT4ge1xuICAgICAgaWYgKGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgLy8gZG8gbm90IHB1c2ggY2hpbGRyZW5zIHRvIG1lbnUgaXRlbXMgYXJyYXlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5jcmVhdGVNZW51KGd1aWQsIHRpYmFLZXksIHNtYXJ0cGFya0Jhc2ljLCBsb3QsIGZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlKTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICAvLyBXZSBkb250IHJ1biBtZW51IHVwZGF0ZSBpZiB3ZSBhcmUgbm90IGluIENDXG4gICAgY29uc3QgY3VycmVudE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgaWYgKGN1cnJlbnRNb2R1bGUgIT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUubWVudUl0ZW1zKTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuXG4gICAgZm9yIChjb25zdCBbZ3VpZCwgbG90c01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZmFjaWxpdHlEaWN0aW9uYXJ5KSkge1xuICAgICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMobG90c01hcCk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgbGV0IG1lbnVJdGVtOiBNZW51SXRlbTtcblxuICAgICAgICBpZiAoZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQgPiAwKSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXNcbiAgICAgICAgICAgIC5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkKT8uY2hpbGRyZW5cbiAgICAgICAgICAgIC5maW5kKHN1Ykl0ZW0gPT4gc3ViSXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lbnVJdGVtID0gbWVudUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQgJiYgaXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtKSB7XG4gICAgICAgICAgY29uc3QgYmFkZ2VDbGFzcyA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5nZXRCYWRnZVByaW9yaXR5KGd1aWQsIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5LCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICAgIG1lbnVJdGVtLmhhc0JhZGdlID0gYmFkZ2VDbGFzcyAhPT0gUGFya0Nvbm5lY3Rpb25TdGF0dXNDbGFzcy5Db25uZWN0ZWQ7XG4gICAgICAgICAgbWVudUl0ZW0uYmFkZ2VDbGFzcyA9IGJhZGdlQ2xhc3M7XG4gICAgICAgICAgbWVudUl0ZW0ubmFtZSA9IGZhY2lsaXR5Lm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24oWy4uLm1lbnVJdGVtc10sIEFwcE1vZHVsZS5DYykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U21hcnRwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz4gPSB7fTtcbiAgICBjb25zdCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcDogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gICAgICBwYXJrQ29ubmVjdGlvblN0YXR1c01hcFtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5mYWNpbGl0aWVzLnJlZHVjZSgoZmFjaWxpdGllcywgbG90KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgbG90LCBzbWFydHBhcmtNYXBbZ3VpZF0uc2VydmljZXNSdW5uaW5nU3RhdHVzLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICBmYWNpbGl0aWVzW2xvdC5pZF0gPSB7XG4gICAgICAgICAgc3RhdHVzOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgc3RhcnREYXRlOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGFydERhdGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPik6IHsgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7IH0ge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5ID0ge307XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID0ge307XG4gICAgICBmb3IgKGNvbnN0IGxvdCBvZiBzbWFydHBhcmtNYXBbZ3VpZF0uZmFjaWxpdGllcykge1xuICAgICAgICBjb25zdCBjbG90ID0gbmV3IEZhY2lsaXR5RHRvKCk7XG4gICAgICAgIGNsb3QuaWQgPSBsb3QuaWQ7XG4gICAgICAgIGNsb3QuY2xvdWRJZCA9IGxvdC5jbG91ZElkO1xuICAgICAgICBjbG90LmFjdGl2ZSA9IGxvdC5hY3RpdmU7XG4gICAgICAgIGNsb3QuZmVhdHVyZVBlcm1pc3Npb25zID0gbG90LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5wZXJtaXNzaW9ucyA9IGxvdC5wZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5uYW1lID0gbG90Lm5hbWU7XG4gICAgICAgIGNsb3Quc2l0ZUNvZGUgPSBsb3Quc2l0ZUNvZGU7XG4gICAgICAgIGNsb3QubXVsdGlQYXJrUGFyZW50SUQgPSBsb3QubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGNsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGxvdC5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGxvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGNsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0xQUkNvbm5lY3RlZCA9IGxvdC5pc0xQUkNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5pc0xQUkVuYWJsZWQgPSBsb3QuaXNMUFJFbmFibGVkO1xuICAgICAgICBjbG90LmlzVGlja2V0TGVzc0VuYWJsZWQgPSBsb3QuaXNUaWNrZXRMZXNzRW5hYmxlZDtcbiAgICAgICAgY2xvdC5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQmFzaWMgPSBsb3QuaXNCYXNpYztcbiAgICAgICAgY2xvdC5pc011bHRpUGFyayA9IGxvdC5pc011bHRpUGFyaztcbiAgICAgICAgY2xvdC50aW1lRHJpZnQgPSBsb3QudGltZURyaWZ0O1xuICAgICAgICBjbG90LnNwVGltZVpvbmUgPSBsb3Quc3BUaW1lWm9uZTtcbiAgICAgICAgY2xvdC5zZXJ2ZXJEYXRlVGltZSA9IGxvdC5zZXJ2ZXJEYXRlVGltZTtcbiAgICAgICAgY2xvdC50b3RhbFNwYWNlID0gbG90LnRvdGFsU3BhY2U7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtsb3QuaWRdID0gY2xvdDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpZmYgb2YgMCBmb3IgaW5pdGlhbCBzZXR1cFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTbWFydHBhcmtCYXNpYyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydFBhcmtzOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KSB7XG4gICAgLy8ga2VlcCBkZWZhdWx0IHZhbHVlcyB3aGVuIG5hdmlnYXRlIHRvIGNvbW1hbmQgY2VudGVyIGZvcndhcmQgYW5kIGJhY2suXG4gICAgY29uc3QgeyBndWlkLCBwYXJrSWQsIG11bHRpUGFya1BhcmVudElELCBzZWxlY3RlZCB9ID0gY3R4LmdldFN0YXRlKCk7XG4gICAgZGVmYXVsdHMuZ3VpZCA9IGd1aWQ7XG4gICAgZGVmYXVsdHMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICBkZWZhdWx0cy5wYXJrSWQgPSBwYXJrSWQ7XG4gICAgZGVmYXVsdHMubXVsdGlQYXJrUGFyZW50SUQgPSBtdWx0aVBhcmtQYXJlbnRJRDtcblxuICAgIGN0eC5zZXRTdGF0ZShkZWZhdWx0cyk7XG5cbiAgICBjb25zdCB0aWJhS2V5czogU3RyaW5nTWFwPG51bWJlcj4gPSBPYmplY3Qua2V5cyhzbWFydFBhcmtzKS5yZWR1Y2UoKGtleXMsIGd1aWQsIGluZGV4KSA9PiB7XG4gICAgICBrZXlzW2d1aWRdID0gaW5kZXg7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCB7IGRpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH0gPSB0aGlzLmNvbnZlcnRUb0ZhY2lsaXR5RGljdGlvbmFyeShzbWFydFBhcmtzKTtcblxuICAgIGNvbnN0IHN0YXRlVXBkYXRlczogUGFydGlhbDxGYWNpbGl0eVN0YXRlTW9kZWw+ID0ge1xuICAgICAgdGliYUtleXMsXG4gICAgICBkaWN0aW9uYXJ5LFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfTtcblxuICAgIGlmICghZGljdGlvbmFyeVtndWlkXSB8fCAhZGljdGlvbmFyeVtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlVXBkYXRlcywge1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoc3RhdGVVcGRhdGVzKTtcblxuICAgIC8vdXNlcyBmYWNpbGl0eSBkaWN0aW9uYXJ5IGZyb20gc3RvcmUsIHRoZXJlZm9yZSBwbGFjZWQgYWZ0ZXJcbiAgICBjb25zdCB7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0gPSB0aGlzLmdldFNtYXJ0cGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc21hcnRQYXJrcywgZGljdGlvbmFyeSk7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXA6IE51bWJlck1hcDxEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bz4gPSBKU09OLnBhcnNlKFxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTilcbiAgICApID8/IHt9O1xuXG4gICAgY29uc3QgZHBjOiBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zb3VyY2VJZGVudGlmaWVyXTtcbiAgICBpZiAoZHBjKSB7XG4gICAgICBjb25zdCBmYWNpbGl0eTogRmFjaWxpdHlEdG8gPSBudWxsO1xuICAgICAgY29uZmlnLmR1cmF0aW9uID0gNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTO1xuICAgICAgY29uZmlnLm1lc3NhZ2VzID0gdGhpcy5mYWNpbGl0eUNvbW1hbmRzQ29uZmlnU2VydmljZS5nZXRDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnTWVzc2FnZXMoXG4gICAgICAgIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsXG4gICAgICAgIGZhY2lsaXR5LFxuICAgICAgICBkcGNcbiAgICAgICk7XG5cbiAgICAgIC8vIENsb3NlIGR5bmFtaWMgcHJpY2luZyBub3RpZmljYXRpb25cbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvID0gbmV3IE5vdGlmaWNhdGlvbkR0bygpO1xuICAgICAgbm90aWZpY2F0aW9uLnR5cGUgPSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uID0gZHBjO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb24sIGRwYy5ndWlkKSk7XG5cbiAgICAgIGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5ndWlkXSA9IG51bGw7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShcbiAgICAgICAgRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -106778,11 +106778,14 @@ let FacilityState = class FacilityState {
106778
106778
  static isMultiPark(state) {
106779
106779
  return state.selected?.isMultiPark;
106780
106780
  }
106781
- static zones(state) {
106782
- return state.zones?.filter(z => z.rulesMode !== RulesMode.CALCULATE_BY_SMART_COUNTER);
106781
+ static rawZones(state) {
106782
+ return state.zones;
106783
+ }
106784
+ static zones(zones) {
106785
+ return zones?.filter(z => z.rulesMode !== RulesMode.CALCULATE_BY_SMART_COUNTER);
106783
106786
  }
106784
- static smartZones(state) {
106785
- return state.zones?.filter(z => z.rulesMode === RulesMode.CALCULATE_BY_SMART_COUNTER);
106787
+ static smartZones(zones) {
106788
+ return zones?.filter(z => z.rulesMode === RulesMode.CALCULATE_BY_SMART_COUNTER);
106786
106789
  }
106787
106790
  static timeZone(state) {
106788
106791
  return state.selected.spTimeZone;
@@ -107598,9 +107601,12 @@ __decorate([
107598
107601
  ], FacilityState, "isMultiPark", null);
107599
107602
  __decorate([
107600
107603
  Selector()
107604
+ ], FacilityState, "rawZones", null);
107605
+ __decorate([
107606
+ Selector([FacilityState.rawZones])
107601
107607
  ], FacilityState, "zones", null);
107602
107608
  __decorate([
107603
- Selector()
107609
+ Selector([FacilityState.rawZones])
107604
107610
  ], FacilityState, "smartZones", null);
107605
107611
  __decorate([
107606
107612
  Selector()