studiokit-scaffolding-js 7.0.14-alpha.1 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/ActionList.d.ts +2 -2
- package/lib/components/ActionList.js +166 -87
- package/lib/components/AlertDialog.d.ts +3 -3
- package/lib/components/AlertDialog.js +133 -18
- package/lib/components/AlertWithIcon.js +93 -52
- package/lib/components/ConnectedModal.d.ts +1 -2
- package/lib/components/ConnectedModal.js +41 -35
- package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
- package/lib/components/Dropdowns/GroupsDropdown.js +69 -82
- package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
- package/lib/components/Dropdowns/ManagedNavDropdown.js +96 -108
- package/lib/components/Dropdowns/UserDropdown.js +109 -70
- package/lib/components/Dropdowns/index.js +27 -11
- package/lib/components/EntityOwnerList.d.ts +3 -3
- package/lib/components/EntityOwnerList.js +52 -60
- package/lib/components/Error.js +107 -27
- package/lib/components/ErrorBoundary.js +133 -94
- package/lib/components/ErrorMessage.d.ts +2 -2
- package/lib/components/ErrorMessage.js +44 -14
- package/lib/components/Forms/DateField.d.ts +2 -2
- package/lib/components/Forms/DateField.js +63 -95
- package/lib/components/Forms/TimeField.d.ts +2 -2
- package/lib/components/Forms/TimeField.js +84 -108
- package/lib/components/Forms/index.js +27 -13
- package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
- package/lib/components/Groups/CreateEditCopySaveButtons.js +102 -14
- package/lib/components/Groups/ExternalGroups/Attach.d.ts +6 -7
- package/lib/components/Groups/ExternalGroups/Attach.js +213 -188
- package/lib/components/Groups/ExternalGroups/Table.js +183 -76
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +5 -1
- package/lib/components/Groups/RosterSyncInfo.js +140 -49
- package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
- package/lib/components/HOC/AccessibleAppComponent.js +96 -119
- package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
- package/lib/components/HOC/ActivityRequiredComponent.js +72 -86
- package/lib/components/HOC/AsyncComponent.d.ts +9 -9
- package/lib/components/HOC/AsyncComponent.js +53 -129
- package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
- package/lib/components/HOC/AuthenticatedComponent.js +59 -96
- package/lib/components/HOC/CollectionComponent.d.ts +12 -12
- package/lib/components/HOC/CollectionComponent.js +161 -161
- package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
- package/lib/components/HOC/CollectionFirstItemComponent.js +49 -91
- package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
- package/lib/components/HOC/CollectionItemComponent.js +159 -158
- package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
- package/lib/components/HOC/ConnectedModalComponent.js +96 -126
- package/lib/components/HOC/DataDependentComponent.d.ts +3 -55
- package/lib/components/HOC/DataDependentComponent.js +30 -79
- package/lib/components/HOC/EntityComponent.d.ts +13 -13
- package/lib/components/HOC/EntityComponent.js +63 -101
- package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
- package/lib/components/HOC/FullscreenModalComponent.js +145 -165
- package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
- package/lib/components/HOC/GroupActivityRequiredComponent.js +32 -31
- package/lib/components/HOC/GuidComponent.d.ts +1 -1
- package/lib/components/HOC/GuidComponent.js +25 -64
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +28 -29
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +36 -59
- package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
- package/lib/components/HOC/ModelErrorRedirectComponent.js +40 -83
- package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
- package/lib/components/HOC/SearchPersistorComponent.js +243 -216
- package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
- package/lib/components/HOC/UnauthenticatedComponent.js +37 -82
- package/lib/components/HOC/UserComponent.d.ts +1 -1
- package/lib/components/HOC/UserComponent.js +12 -11
- package/lib/components/Icons/IconAlphaList.js +34 -20
- package/lib/components/Icons/IconExternalUser.js +34 -20
- package/lib/components/Icons/IconImpersonation.js +34 -20
- package/lib/components/Icons/IconStopImpersonating.js +34 -20
- package/lib/components/Icons/IconTable.js +35 -21
- package/lib/components/Icons/IconTableDeleteCol.js +34 -20
- package/lib/components/Icons/IconTableDeleteRow.js +34 -20
- package/lib/components/Icons/IconTableInsertCol.js +34 -20
- package/lib/components/Icons/IconTableInsertRow.js +34 -20
- package/lib/components/Impersonation/Button.d.ts +2 -2
- package/lib/components/Impersonation/Button.js +76 -56
- package/lib/components/Impersonation/Link.d.ts +2 -2
- package/lib/components/Impersonation/Link.js +76 -53
- package/lib/components/Impersonation/UserDetail.d.ts +2 -2
- package/lib/components/Impersonation/UserDetail.js +64 -15
- package/lib/components/Loading.js +27 -21
- package/lib/components/LockDownBrowser/Check.js +194 -107
- package/lib/components/LockDownBrowser/ExitButton.js +27 -14
- package/lib/components/LockDownBrowser/Launch.js +70 -85
- package/lib/components/Lti/Confirm.js +152 -33
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +4 -2
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +170 -78
- package/lib/components/Lti/Launch.js +105 -49
- package/lib/components/Lti/LaunchGroup.js +85 -39
- package/lib/components/ManageTable.d.ts +1 -2
- package/lib/components/ManageTable.js +309 -104
- package/lib/components/ManageTableNoDataComponent.js +42 -22
- package/lib/components/NewVersionAlert.d.ts +2 -2
- package/lib/components/NewVersionAlert.js +82 -91
- package/lib/components/NotFound.js +87 -28
- package/lib/components/Notifications.d.ts +4 -4
- package/lib/components/Notifications.js +187 -169
- package/lib/components/PaginationNextButton.js +33 -21
- package/lib/components/PaginationPreviousButton.js +33 -21
- package/lib/components/Quill/CustomToolbar.d.ts +2 -2
- package/lib/components/Quill/CustomToolbar.js +432 -257
- package/lib/components/Quill/Formats/Image.d.ts +10 -25
- package/lib/components/Quill/Formats/Image.js +76 -82
- package/lib/components/Quill/Formats/List.d.ts +6 -3
- package/lib/components/Quill/Formats/List.js +50 -72
- package/lib/components/Quill/Formats/Video.d.ts +2 -1
- package/lib/components/Quill/Formats/Video.js +29 -43
- package/lib/components/Quill/ImageDropModule.d.ts +1 -1
- package/lib/components/Quill/ImageDropModule.js +142 -115
- package/lib/components/Quill/ImageWarning.d.ts +2 -2
- package/lib/components/Quill/ImageWarning.js +45 -32
- package/lib/components/Quill/ImageWithAltTextModal.d.ts +0 -1
- package/lib/components/Quill/ImageWithAltTextModal.js +425 -141
- package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
- package/lib/components/Quill/Specs/CustomImageSpec.js +37 -45
- package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
- package/lib/components/Quill/Specs/CustomVideoSpec.js +27 -36
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +2 -1
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +100 -116
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +53 -66
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +54 -67
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +225 -241
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +82 -99
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +76 -87
- package/lib/components/Quill/TableModule/constants.js +45 -41
- package/lib/components/Quill/TableModule/index.css +25 -25
- package/lib/components/Quill/TableModule/index.d.ts +14 -5
- package/lib/components/Quill/TableModule/index.js +373 -313
- package/lib/components/Quill/TableModule/utils.js +45 -45
- package/lib/components/Quill/accessibilityFix.d.ts +0 -1
- package/lib/components/Quill/accessibilityFix.js +222 -238
- package/lib/components/Quill/index.js +36 -32
- package/lib/components/RefreshIndicator/Bordered.js +48 -32
- package/lib/components/RefreshIndicator/Inline.js +48 -33
- package/lib/components/RefreshIndicator/index.d.ts +2 -2
- package/lib/components/RefreshIndicator/index.js +263 -113
- package/lib/components/SearchControls.js +216 -31
- package/lib/components/SentryRoute.js +10 -23
- package/lib/components/Tables/RoleFilter.d.ts +3 -4
- package/lib/components/Tables/RoleFilter.js +71 -46
- package/lib/components/Tables/TextFilter.d.ts +2 -3
- package/lib/components/Tables/TextFilter.js +62 -20
- package/lib/components/UserRoles/Add.d.ts +3 -3
- package/lib/components/UserRoles/Add.js +199 -161
- package/lib/components/UserRoles/Context.js +8 -6
- package/lib/components/UserRoles/RoleCell.js +181 -100
- package/lib/components/UserRoles/Select.js +168 -54
- package/lib/components/UserRoles/Table.js +221 -102
- package/lib/components/UserRoles/index.d.ts +6 -6
- package/lib/components/UserRoles/index.js +535 -464
- package/lib/config/eslint/index.d.ts +2 -0
- package/lib/config/eslint/index.js +36 -0
- package/lib/config/eslint/lib/order.d.ts +3 -0
- package/lib/config/eslint/lib/order.js +30 -0
- package/lib/config/eslint/lib/prettier.d.ts +3 -0
- package/lib/config/eslint/lib/prettier.js +23 -0
- package/lib/config/eslint/lib/typescript.d.ts +2 -0
- package/lib/config/eslint/lib/typescript.js +98 -0
- package/lib/config/eslint/react.d.ts +2 -0
- package/lib/config/eslint/react.js +30 -0
- package/lib/constants/baseActivity.js +30 -26
- package/lib/constants/baseRole.js +14 -10
- package/lib/constants/configuration.d.ts +1 -1
- package/lib/constants/configuration.js +43 -39
- package/lib/constants/externalProviderType.js +10 -6
- package/lib/constants/fetchErrorData.js +15 -11
- package/lib/constants/index.js +137 -23
- package/lib/constants/lockDownBrowser.js +28 -24
- package/lib/constants/mockData.d.ts +4 -6
- package/lib/constants/mockData.js +383 -324
- package/lib/constants/modelStatus.js +15 -11
- package/lib/constants/notificationType.js +12 -8
- package/lib/constants/operatingSystem.js +12 -8
- package/lib/constants/shard.js +11 -7
- package/lib/constants/table.js +21 -21
- package/lib/constants/tier.js +12 -8
- package/lib/constants/userRole.d.ts +1 -2
- package/lib/constants/userRole.js +15 -17
- package/lib/css/components/_buttons.css +11 -3
- package/lib/css/components/_quill.css +3 -3
- package/lib/css/components/_tables.css +6 -5
- package/lib/css/utils/_display.css +12 -19
- package/lib/css/utils/_general.css +1 -1
- package/lib/css/utils/_text.css +2 -1
- package/lib/css/variables.css +0 -4
- package/lib/endpointMappings.js +197 -193
- package/lib/hooks/useCollection.js +83 -65
- package/lib/hooks/useCollectionConfiguration.d.ts +0 -1
- package/lib/hooks/useCollectionConfiguration.js +179 -82
- package/lib/hooks/useCollectionItem.js +155 -58
- package/lib/hooks/useEventCalback.d.ts +14 -0
- package/lib/hooks/useEventCalback.js +51 -0
- package/lib/hooks/useGuid.js +19 -8
- package/lib/hooks/usePrevious.d.ts +24 -1
- package/lib/hooks/usePrevious.js +82 -12
- package/lib/index.js +156 -36
- package/lib/redux/actionCreator.d.ts +6 -6
- package/lib/redux/actionCreator.js +51 -40
- package/lib/redux/actions/AuthAction.js +44 -31
- package/lib/redux/actions/ModalAction.d.ts +1 -1
- package/lib/redux/actions/ModalAction.js +10 -6
- package/lib/redux/actions/ModelAction.d.ts +1 -1
- package/lib/redux/actions/ModelAction.js +77 -49
- package/lib/redux/actions/NotificationAction.js +10 -6
- package/lib/redux/actions/SearchAction.js +9 -5
- package/lib/redux/actions/index.js +60 -16
- package/lib/redux/configureReducers.d.ts +2 -5
- package/lib/redux/configureReducers.js +61 -72
- package/lib/redux/configureStore.d.ts +2 -2
- package/lib/redux/configureStore.js +83 -115
- package/lib/redux/helpers.js +7 -2
- package/lib/redux/reducers/authReducer.js +50 -44
- package/lib/redux/reducers/index.js +41 -15
- package/lib/redux/reducers/modalsReducer.js +49 -52
- package/lib/redux/reducers/modelsReducer.d.ts +2 -2
- package/lib/redux/reducers/modelsReducer.js +136 -135
- package/lib/redux/reducers/notificationsReducer.js +26 -21
- package/lib/redux/reducers/searchReducer.js +18 -12
- package/lib/redux/sagas/appInsightsSaga.js +24 -62
- package/lib/redux/sagas/authSaga.js +287 -414
- package/lib/redux/sagas/caliperSaga.js +154 -248
- package/lib/redux/sagas/clockOffsetSaga.js +35 -76
- package/lib/redux/sagas/configurationSaga.js +13 -46
- package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +0 -1
- package/lib/redux/sagas/downtimeApiErrorSaga.js +23 -64
- package/lib/redux/sagas/errorSaga.d.ts +0 -1
- package/lib/redux/sagas/errorSaga.js +29 -63
- package/lib/redux/sagas/googleAnalyticsSaga.js +29 -69
- package/lib/redux/sagas/identityProviderSaga.js +24 -69
- package/lib/redux/sagas/initialDataLoadSaga.js +38 -29
- package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +0 -1
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +32 -81
- package/lib/redux/sagas/modelFetchSaga.js +331 -411
- package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
- package/lib/redux/sagas/noStoreSaga.js +68 -101
- package/lib/redux/sagas/postLoginDataSaga.js +42 -74
- package/lib/redux/sagas/postLoginRedirectSaga.js +27 -68
- package/lib/redux/sagas/rootSaga.js +85 -137
- package/lib/redux/sagas/sentrySaga.js +29 -85
- package/lib/redux/sagas/userIdSaga.js +18 -54
- package/lib/services/codeProviderService.js +25 -29
- package/lib/services/dateService.js +12 -10
- package/lib/services/documentService.js +15 -10
- package/lib/services/fetchService.js +110 -144
- package/lib/services/persistenceService.d.ts +4 -4
- package/lib/services/persistenceService.js +45 -43
- package/lib/services/ticketProviderService.js +29 -33
- package/lib/services/tokenPersistenceService.js +13 -9
- package/lib/services/windowService.js +21 -17
- package/lib/startup.d.ts +1 -1
- package/lib/startup.js +115 -118
- package/lib/types/AppConfiguration.js +5 -1
- package/lib/types/Artifact.js +11 -7
- package/lib/types/BaseReduxState.js +5 -1
- package/lib/types/Client.js +5 -1
- package/lib/types/Collection.d.ts +3 -3
- package/lib/types/Collection.js +5 -1
- package/lib/types/Configuration.js +5 -1
- package/lib/types/DeepLinkingResponseRequest.js +5 -1
- package/lib/types/DeletableModel.js +5 -1
- package/lib/types/Event.js +5 -1
- package/lib/types/ExternalGroup.js +5 -1
- package/lib/types/ExternalProvider.js +5 -1
- package/lib/types/ExternalTerm.js +5 -1
- package/lib/types/Group.js +5 -1
- package/lib/types/IdentityProvider.js +5 -1
- package/lib/types/LtiLaunch.js +5 -1
- package/lib/types/NameOnlyEntity.js +5 -1
- package/lib/types/Notification.d.ts +2 -2
- package/lib/types/Notification.js +5 -1
- package/lib/types/OptionalRecord.d.ts +1 -1
- package/lib/types/OptionalRecord.js +5 -1
- package/lib/types/OwnerSchedule.d.ts +3 -1
- package/lib/types/OwnerSchedule.js +5 -1
- package/lib/types/PropertyOfType.d.ts +3 -3
- package/lib/types/PropertyOfType.js +5 -1
- package/lib/types/Quill.js +5 -1
- package/lib/types/RoleDescription.d.ts +0 -1
- package/lib/types/RoleDescription.js +5 -1
- package/lib/types/Search.js +5 -1
- package/lib/types/SimpleLocation.js +5 -1
- package/lib/types/UniTime.js +5 -1
- package/lib/types/User.js +5 -1
- package/lib/types/UserRole.js +5 -1
- package/lib/types/auth/AuthState.js +5 -1
- package/lib/types/auth/CasV1LoginRequestBody.js +5 -1
- package/lib/types/auth/ClientCredentials.js +5 -1
- package/lib/types/auth/CodeProviderService.js +5 -1
- package/lib/types/auth/LocalLoginRequestBody.js +5 -1
- package/lib/types/auth/TicketProviderService.js +5 -1
- package/lib/types/auth/TokenPersistenceService.js +5 -1
- package/lib/types/auth/index.js +82 -18
- package/lib/types/externals.d.js +2 -0
- package/lib/types/index.js +313 -39
- package/lib/types/net/EndpointConfig.js +5 -1
- package/lib/types/net/EndpointMapping.js +5 -1
- package/lib/types/net/EndpointMappings.js +5 -1
- package/lib/types/net/ErrorHandler.d.ts +1 -1
- package/lib/types/net/ErrorHandler.js +5 -1
- package/lib/types/net/FetchConfig.d.ts +1 -1
- package/lib/types/net/FetchConfig.js +5 -1
- package/lib/types/net/FetchErrorData.js +10 -6
- package/lib/types/net/FetchResult.d.ts +2 -2
- package/lib/types/net/FetchResult.js +5 -1
- package/lib/types/net/HTTPMethod.d.ts +1 -1
- package/lib/types/net/HTTPMethod.js +5 -1
- package/lib/types/net/HTTPStatusCode.js +16 -12
- package/lib/types/net/Metadata.js +5 -1
- package/lib/types/net/Model.js +5 -1
- package/lib/types/net/ModelCollection.js +5 -1
- package/lib/types/net/ModelsState.js +5 -1
- package/lib/types/net/OAuthToken.js +5 -1
- package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
- package/lib/types/net/OAuthTokenOrNull.js +5 -1
- package/lib/types/net/TokenAccessFunction.d.ts +1 -1
- package/lib/types/net/TokenAccessFunction.js +5 -1
- package/lib/types/net/index.js +181 -27
- package/lib/utils/baseActivity.d.ts +2 -2
- package/lib/utils/baseActivity.js +93 -91
- package/lib/utils/baseRole.js +37 -33
- package/lib/utils/collection.js +413 -291
- package/lib/utils/cookies.js +22 -37
- package/lib/utils/date.js +210 -210
- package/lib/utils/dom.js +145 -133
- package/lib/utils/domainIdentifier.js +9 -9
- package/lib/utils/entityUserRole.js +6 -2
- package/lib/utils/error.d.ts +1 -1
- package/lib/utils/error.js +18 -16
- package/lib/utils/events.js +37 -30
- package/lib/utils/externalGroup.js +25 -21
- package/lib/utils/externalProviders.js +8 -4
- package/lib/utils/externalTerms.js +9 -6
- package/lib/utils/fetch.d.ts +1 -1
- package/lib/utils/fetch.js +179 -176
- package/lib/utils/group.js +17 -9
- package/lib/utils/groupDates.d.ts +1 -1
- package/lib/utils/groupDates.js +43 -39
- package/lib/utils/groupRoles.js +28 -28
- package/lib/utils/lockDownBrowser.js +16 -12
- package/lib/utils/logger.js +30 -25
- package/lib/utils/lti.js +10 -5
- package/lib/utils/model.d.ts +2 -2
- package/lib/utils/model.js +35 -44
- package/lib/utils/number.js +13 -16
- package/lib/utils/promise.d.ts +6 -1
- package/lib/utils/promise.js +34 -15
- package/lib/utils/quill.js +60 -71
- package/lib/utils/route.d.ts +2 -2
- package/lib/utils/route.js +61 -60
- package/lib/utils/search.d.ts +1 -1
- package/lib/utils/search.js +78 -85
- package/lib/utils/shard.js +38 -41
- package/lib/utils/sort.d.ts +3 -3
- package/lib/utils/sort.js +62 -58
- package/lib/utils/string.js +14 -10
- package/lib/utils/table.d.ts +3 -3
- package/lib/utils/table.js +36 -33
- package/lib/utils/timezone.js +12 -26
- package/lib/utils/url.d.ts +2 -1
- package/lib/utils/url.js +139 -193
- package/lib/utils/user.js +59 -61
- package/lib/utils/userAgent.js +11 -11
- package/lib/utils/userRole.d.ts +3 -3
- package/lib/utils/userRole.js +46 -44
- package/package.json +90 -73
- package/lib/config/eslint/index.cjs +0 -21
- package/lib/config/eslint/lib/order.cjs +0 -22
- package/lib/config/eslint/lib/prettier.cjs +0 -18
- package/lib/config/eslint/lib/typescript.cjs +0 -86
- package/lib/config/eslint/react.cjs +0 -9
- package/lib/css/utils/_focus.css +0 -4
|
@@ -1,195 +1,220 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
-
};
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
19
7
|
exports.ExternalGroupsAttach = void 0;
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
_this.setState({
|
|
58
|
-
ownerSchedules: ownersInitialScheduleData,
|
|
59
|
-
isUniTimeScheduleLoadingDone: false
|
|
60
|
-
}, function () {
|
|
61
|
-
return lodash_1.forEach(ownersInitialScheduleData, function (ownerSchedule, userId) {
|
|
62
|
-
return _this.getOwnerUniTimeGroups(ownerSchedule, userId, externalTermId);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
_this.handleSelectExternalGroups = function (event) {
|
|
67
|
-
var externalId = event.target.value;
|
|
68
|
-
var checked = event.target.checked;
|
|
69
|
-
var _a = _this.props, originalConnectedExternalGroups = _a.originalConnectedExternalGroups, selectedExternalGroups = _a.selectedExternalGroups;
|
|
70
|
-
var allOwnerExternalGroups = lodash_1.map(_this.state.ownerSchedules, function (os) { return os.externalGroups; }).reduce(function (a, b) {
|
|
71
|
-
return a.concat(b);
|
|
72
|
-
});
|
|
73
|
-
var selectedExternalGroupsCopy = selectedExternalGroups.slice();
|
|
74
|
-
if (checked) {
|
|
75
|
-
var originalConnectedExternalGroup = originalConnectedExternalGroups.find(function (oeg) { return oeg.externalId === externalId; });
|
|
76
|
-
var selectedExternalGroup = originalConnectedExternalGroup
|
|
77
|
-
? originalConnectedExternalGroup
|
|
78
|
-
: allOwnerExternalGroups === null || allOwnerExternalGroups === void 0 ? void 0 : allOwnerExternalGroups.find(function (ao) { return ao.externalId === externalId; });
|
|
79
|
-
if (selectedExternalGroup) {
|
|
80
|
-
selectedExternalGroupsCopy.push(selectedExternalGroup);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
lodash_1.remove(selectedExternalGroupsCopy, function (seg) { return seg.externalId === externalId; });
|
|
85
|
-
}
|
|
86
|
-
_this.props.handleSelectedExternalGroups(selectedExternalGroupsCopy);
|
|
87
|
-
};
|
|
88
|
-
_this.getOwnerUniTimeGroups = function (ownerSchedule, userId, externalTermId) {
|
|
89
|
-
if (shard_1.isPurdueShard() && ownerSchedule.status === constants_1.MODEL_STATUS.UNINITIALIZED && !ownerSchedule.externalGroups) {
|
|
90
|
-
noStoreSaga_1.registerNoStoreActionHook(ownerSchedule.hookId, function (data) {
|
|
91
|
-
noStoreSaga_1.unregisterNoStoreActionHook(ownerSchedule.hookId);
|
|
92
|
-
if (!data || fetch_1.isFetchErrorData(data)) {
|
|
93
|
-
_this.setState({ isShowingErrorAlert: true, isUniTimeScheduleLoadingDone: true });
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
_this.setUserUniTimeGroups(userId, data.externalGroups);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
actionCreator_1.dispatchModelFetchRequest({
|
|
100
|
-
modelName: 'uniTimeInstructorSchedule',
|
|
101
|
-
queryParams: {
|
|
102
|
-
externalTermId: externalTermId,
|
|
103
|
-
userId: userId
|
|
104
|
-
},
|
|
105
|
-
noStore: true,
|
|
106
|
-
guid: ownerSchedule.hookId
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
_this.setUserUniTimeGroups = function (userId, externalGroups) {
|
|
111
|
-
// Setting the user's course sections load status to be ready
|
|
112
|
-
var ownerSchedules = _this.state.ownerSchedules || {};
|
|
113
|
-
ownerSchedules[userId].status = constants_1.MODEL_STATUS.READY;
|
|
114
|
-
ownerSchedules[userId].externalGroups = externalGroups;
|
|
115
|
-
var isUniTimeScheduleLoadingDone = lodash_1.every(ownerSchedules, function (os) { return os.status === constants_1.MODEL_STATUS.READY; });
|
|
116
|
-
_this.setState({
|
|
117
|
-
ownerSchedules: ownerSchedules,
|
|
118
|
-
isUniTimeScheduleLoadingDone: isUniTimeScheduleLoadingDone
|
|
119
|
-
});
|
|
120
|
-
};
|
|
121
|
-
_this.displayOwnerSchedules = function (ownerSchedules) {
|
|
122
|
-
return lodash_1.map(ownerSchedules, function (os) {
|
|
123
|
-
if (!!os.externalGroups && os.externalGroups.length > 0) {
|
|
124
|
-
return (react_1.default.createElement("div", { key: os.hookId },
|
|
125
|
-
react_1.default.createElement("h4", null, user_1.displayName(os.owner)),
|
|
126
|
-
_this.displayUniTimeGroups(os.externalGroups)));
|
|
127
|
-
}
|
|
128
|
-
});
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _lodash = require("lodash");
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactBootstrap = require("react-bootstrap");
|
|
12
|
+
var _uuid = require("uuid");
|
|
13
|
+
var _constants = require("../../../constants");
|
|
14
|
+
var _actionCreator = require("../../../redux/actionCreator");
|
|
15
|
+
var _noStoreSaga = require("../../../redux/sagas/noStoreSaga");
|
|
16
|
+
var _fetch = require("../../../utils/fetch");
|
|
17
|
+
var _model = require("../../../utils/model");
|
|
18
|
+
var _shard = require("../../../utils/shard");
|
|
19
|
+
var _user = require("../../../utils/user");
|
|
20
|
+
var _AlertWithIcon = require("../../AlertWithIcon");
|
|
21
|
+
var _Loading = require("../../Loading");
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
24
|
+
class ExternalGroupsAttach extends _react.Component {
|
|
25
|
+
constructor(props) {
|
|
26
|
+
super(props);
|
|
27
|
+
(0, _defineProperty2.default)(this, "setOwnerSchedules", (groupUserRoles, externalTermId, selectedExternalGroups) => {
|
|
28
|
+
const {
|
|
29
|
+
canConnectAnyExternalGroups,
|
|
30
|
+
canConnectOwnExternalGroups,
|
|
31
|
+
userInfo
|
|
32
|
+
} = this.props;
|
|
33
|
+
const owners = groupUserRoles.filter(groupUserRole => {
|
|
34
|
+
return groupUserRole.role === _constants.BASE_ROLE.GROUP_OWNER;
|
|
35
|
+
});
|
|
36
|
+
const ownersInitialScheduleData = {};
|
|
37
|
+
owners.forEach(owner => {
|
|
38
|
+
const ownerData = {
|
|
39
|
+
hookId: (0, _uuid.v4)(),
|
|
40
|
+
status: canConnectAnyExternalGroups || userInfo.id === owner.id && canConnectOwnExternalGroups ? _constants.MODEL_STATUS.UNINITIALIZED : _constants.MODEL_STATUS.READY,
|
|
41
|
+
owner,
|
|
42
|
+
externalGroups: !(canConnectAnyExternalGroups || userInfo.id === owner.id && canConnectOwnExternalGroups) ? selectedExternalGroups.filter(seg => seg.userId === owner.id) : undefined
|
|
129
43
|
};
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
44
|
+
(0, _lodash.set)(ownersInitialScheduleData, [owner.userId], ownerData);
|
|
45
|
+
});
|
|
46
|
+
this.setState({
|
|
47
|
+
ownerSchedules: ownersInitialScheduleData,
|
|
48
|
+
isUniTimeScheduleLoadingDone: false
|
|
49
|
+
}, () => (0, _lodash.forEach)(ownersInitialScheduleData, (ownerSchedule, userId) => {
|
|
50
|
+
this.getOwnerUniTimeGroups(ownerSchedule, userId, externalTermId);
|
|
51
|
+
}));
|
|
52
|
+
});
|
|
53
|
+
(0, _defineProperty2.default)(this, "handleSelectExternalGroups", event => {
|
|
54
|
+
const externalId = event.target.value;
|
|
55
|
+
const checked = event.target.checked;
|
|
56
|
+
const {
|
|
57
|
+
originalConnectedExternalGroups,
|
|
58
|
+
selectedExternalGroups
|
|
59
|
+
} = this.props;
|
|
60
|
+
const allOwnerExternalGroups = (0, _lodash.map)(this.state.ownerSchedules, os => os.externalGroups).reduce((a, b) => (a || []).concat(b || []));
|
|
61
|
+
const selectedExternalGroupsCopy = selectedExternalGroups.slice();
|
|
62
|
+
if (checked) {
|
|
63
|
+
const originalConnectedExternalGroup = originalConnectedExternalGroups.find(oeg => oeg.externalId === externalId);
|
|
64
|
+
const selectedExternalGroup = originalConnectedExternalGroup ? originalConnectedExternalGroup : allOwnerExternalGroups?.find(ao => ao.externalId === externalId);
|
|
65
|
+
if (selectedExternalGroup) {
|
|
66
|
+
selectedExternalGroupsCopy.push(selectedExternalGroup);
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
(0, _lodash.remove)(selectedExternalGroupsCopy, seg => seg.externalId === externalId);
|
|
70
|
+
}
|
|
71
|
+
this.props.handleSelectedExternalGroups(selectedExternalGroupsCopy);
|
|
72
|
+
});
|
|
73
|
+
(0, _defineProperty2.default)(this, "getOwnerUniTimeGroups", (ownerSchedule, userId, externalTermId) => {
|
|
74
|
+
if ((0, _shard.isPurdueShard)() && ownerSchedule.status === _constants.MODEL_STATUS.UNINITIALIZED && !ownerSchedule.externalGroups) {
|
|
75
|
+
(0, _noStoreSaga.registerNoStoreActionHook)(ownerSchedule.hookId, data => {
|
|
76
|
+
(0, _noStoreSaga.unregisterNoStoreActionHook)(ownerSchedule.hookId);
|
|
77
|
+
if (!data || (0, _fetch.isFetchErrorData)(data)) {
|
|
78
|
+
this.setState({
|
|
79
|
+
isShowingErrorAlert: true,
|
|
80
|
+
isUniTimeScheduleLoadingDone: true
|
|
144
81
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
82
|
+
} else {
|
|
83
|
+
this.setUserUniTimeGroups(userId, data.externalGroups);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
87
|
+
modelName: 'uniTimeInstructorSchedule',
|
|
88
|
+
queryParams: {
|
|
89
|
+
externalTermId,
|
|
90
|
+
userId
|
|
91
|
+
},
|
|
92
|
+
noStore: true,
|
|
93
|
+
guid: ownerSchedule.hookId
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
(0, _defineProperty2.default)(this, "setUserUniTimeGroups", (userId, externalGroups) => {
|
|
98
|
+
// Setting the user's course sections load status to be ready
|
|
99
|
+
const ownerSchedules = this.state.ownerSchedules || {};
|
|
100
|
+
ownerSchedules[userId].status = _constants.MODEL_STATUS.READY;
|
|
101
|
+
ownerSchedules[userId].externalGroups = externalGroups;
|
|
102
|
+
const isUniTimeScheduleLoadingDone = (0, _lodash.every)(ownerSchedules, os => os.status === _constants.MODEL_STATUS.READY);
|
|
103
|
+
this.setState({
|
|
104
|
+
ownerSchedules,
|
|
105
|
+
isUniTimeScheduleLoadingDone
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
(0, _defineProperty2.default)(this, "displayOwnerSchedules", ownerSchedules => {
|
|
109
|
+
return (0, _lodash.map)(ownerSchedules, os => {
|
|
110
|
+
if (!!os.externalGroups && os.externalGroups.length > 0) {
|
|
111
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
112
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h4", {
|
|
113
|
+
children: (0, _user.displayName)(os.owner)
|
|
114
|
+
}), this.displayUniTimeGroups(os.externalGroups)]
|
|
115
|
+
}, os.hookId);
|
|
170
116
|
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
(0, _defineProperty2.default)(this, "displayUniTimeGroups", externalGroups => {
|
|
120
|
+
const {
|
|
121
|
+
selectedExternalGroups,
|
|
122
|
+
canConnectAnyExternalGroups,
|
|
123
|
+
canConnectOwnExternalGroups,
|
|
124
|
+
userInfo,
|
|
125
|
+
disabled
|
|
126
|
+
} = this.props;
|
|
127
|
+
return (0, _lodash.orderBy)(externalGroups, ['description']).map((eg, index) => {
|
|
128
|
+
const isConnected = selectedExternalGroups.some(seg => seg.externalId === eg.externalId && seg.externalProviderId === eg.externalProviderId && seg.userId === eg.userId);
|
|
129
|
+
if (canConnectAnyExternalGroups || userInfo.id === eg.userId && canConnectOwnExternalGroups || isConnected) {
|
|
130
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.FormCheck, {
|
|
131
|
+
id: `external-group-${eg.id}`,
|
|
132
|
+
type: "checkbox",
|
|
133
|
+
onChange: this.handleSelectExternalGroups,
|
|
134
|
+
value: eg.externalId,
|
|
135
|
+
checked: isConnected,
|
|
136
|
+
disabled: userInfo.id !== eg.userId && !canConnectAnyExternalGroups || disabled,
|
|
137
|
+
label: `${eg.name} ${eg.description ? `(${eg.description})` : ''}`
|
|
138
|
+
}, index);
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
this.state = {
|
|
144
|
+
ownerSchedules: undefined,
|
|
145
|
+
isUniTimeScheduleLoadingDone: false,
|
|
146
|
+
isShowingErrorAlert: false
|
|
171
147
|
};
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
148
|
+
}
|
|
149
|
+
componentDidMount() {
|
|
150
|
+
const {
|
|
151
|
+
groupUserRoles,
|
|
152
|
+
externalTermId,
|
|
153
|
+
selectedExternalGroups
|
|
154
|
+
} = this.props;
|
|
155
|
+
this.setOwnerSchedules((0, _model.getModelArray)(groupUserRoles), externalTermId, selectedExternalGroups);
|
|
156
|
+
}
|
|
157
|
+
componentWillUnmount() {
|
|
158
|
+
const {
|
|
159
|
+
ownerSchedules
|
|
160
|
+
} = this.state;
|
|
161
|
+
(0, _lodash.forEach)(ownerSchedules, os => (0, _noStoreSaga.unregisterNoStoreActionHook)(os.hookId));
|
|
162
|
+
}
|
|
163
|
+
componentDidUpdate(prevProps) {
|
|
164
|
+
const {
|
|
165
|
+
externalTermId: prevExternalTermId,
|
|
166
|
+
groupUserRoles: prevGroupUserRoles
|
|
167
|
+
} = prevProps;
|
|
168
|
+
const {
|
|
169
|
+
externalTermId,
|
|
170
|
+
groupUserRoles,
|
|
171
|
+
selectedExternalGroups
|
|
172
|
+
} = this.props;
|
|
173
|
+
// Assumes group user roles are changing one at a time. Can be made fancier if the need arises
|
|
174
|
+
if (prevExternalTermId !== externalTermId || Object.keys(prevGroupUserRoles).length !== Object.keys(groupUserRoles).length) {
|
|
175
|
+
this.setOwnerSchedules((0, _model.getModelArray)(groupUserRoles), externalTermId, selectedExternalGroups);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
render() {
|
|
179
|
+
const {
|
|
180
|
+
disabledInfoMessage
|
|
181
|
+
} = this.props;
|
|
182
|
+
const {
|
|
183
|
+
ownerSchedules,
|
|
184
|
+
isUniTimeScheduleLoadingDone,
|
|
185
|
+
isShowingErrorAlert
|
|
186
|
+
} = this.state;
|
|
187
|
+
const hasAnyExternalGroups = (0, _lodash.some)(ownerSchedules, os => !!os.externalGroups && os.externalGroups.length > 0);
|
|
188
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
189
|
+
children: [!isUniTimeScheduleLoadingDone && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Loading.Loading, {}), isUniTimeScheduleLoadingDone && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
190
|
+
children: [!hasAnyExternalGroups && /*#__PURE__*/(0, _jsxRuntime.jsx)(_AlertWithIcon.AlertWithIcon, {
|
|
191
|
+
variant: "info",
|
|
192
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
193
|
+
children: "No course sections eligible for roster sync."
|
|
194
|
+
})
|
|
195
|
+
}), !!disabledInfoMessage && hasAnyExternalGroups && /*#__PURE__*/(0, _jsxRuntime.jsx)(_AlertWithIcon.AlertWithIcon, {
|
|
196
|
+
variant: "info",
|
|
197
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
198
|
+
children: disabledInfoMessage
|
|
199
|
+
})
|
|
200
|
+
}), isShowingErrorAlert && /*#__PURE__*/(0, _jsxRuntime.jsx)(_AlertWithIcon.AlertWithIcon, {
|
|
201
|
+
variant: "warning",
|
|
202
|
+
onClose: () => {
|
|
203
|
+
this.setState({
|
|
204
|
+
isShowingErrorAlert: false
|
|
205
|
+
});
|
|
206
|
+
},
|
|
207
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
208
|
+
className: "ma0",
|
|
209
|
+
children: "Oops! Something went wrong while loading. Please try again."
|
|
210
|
+
})
|
|
211
|
+
}), ' ', hasAnyExternalGroups && !!ownerSchedules && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.FormGroup, {
|
|
212
|
+
className: "ml4 f6",
|
|
213
|
+
children: this.displayOwnerSchedules(ownerSchedules)
|
|
214
|
+
})]
|
|
215
|
+
})]
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
195
219
|
exports.ExternalGroupsAttach = ExternalGroupsAttach;
|
|
220
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3JlYWN0Qm9vdHN0cmFwIiwiX3V1aWQiLCJfY29uc3RhbnRzIiwiX2FjdGlvbkNyZWF0b3IiLCJfbm9TdG9yZVNhZ2EiLCJfZmV0Y2giLCJfbW9kZWwiLCJfc2hhcmQiLCJfdXNlciIsIl9BbGVydFdpdGhJY29uIiwiX0xvYWRpbmciLCJfanN4UnVudGltZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkV4dGVybmFsR3JvdXBzQXR0YWNoIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJncm91cFVzZXJSb2xlcyIsImV4dGVybmFsVGVybUlkIiwic2VsZWN0ZWRFeHRlcm5hbEdyb3VwcyIsImNhbkNvbm5lY3RBbnlFeHRlcm5hbEdyb3VwcyIsImNhbkNvbm5lY3RPd25FeHRlcm5hbEdyb3VwcyIsInVzZXJJbmZvIiwib3duZXJzIiwiZmlsdGVyIiwiZ3JvdXBVc2VyUm9sZSIsInJvbGUiLCJCQVNFX1JPTEUiLCJHUk9VUF9PV05FUiIsIm93bmVyc0luaXRpYWxTY2hlZHVsZURhdGEiLCJmb3JFYWNoIiwib3duZXIiLCJvd25lckRhdGEiLCJob29rSWQiLCJ1dWlkdjQiLCJzdGF0dXMiLCJpZCIsIk1PREVMX1NUQVRVUyIsIlVOSU5JVElBTElaRUQiLCJSRUFEWSIsImV4dGVybmFsR3JvdXBzIiwic2VnIiwidXNlcklkIiwidW5kZWZpbmVkIiwic2V0U3RhdGUiLCJvd25lclNjaGVkdWxlcyIsImlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmUiLCJvd25lclNjaGVkdWxlIiwiZ2V0T3duZXJVbmlUaW1lR3JvdXBzIiwiZXZlbnQiLCJleHRlcm5hbElkIiwidGFyZ2V0IiwidmFsdWUiLCJjaGVja2VkIiwib3JpZ2luYWxDb25uZWN0ZWRFeHRlcm5hbEdyb3VwcyIsImFsbE93bmVyRXh0ZXJuYWxHcm91cHMiLCJtYXAiLCJzdGF0ZSIsIm9zIiwicmVkdWNlIiwiYSIsImIiLCJjb25jYXQiLCJzZWxlY3RlZEV4dGVybmFsR3JvdXBzQ29weSIsInNsaWNlIiwib3JpZ2luYWxDb25uZWN0ZWRFeHRlcm5hbEdyb3VwIiwiZmluZCIsIm9lZyIsInNlbGVjdGVkRXh0ZXJuYWxHcm91cCIsImFvIiwicHVzaCIsInJlbW92ZSIsImhhbmRsZVNlbGVjdGVkRXh0ZXJuYWxHcm91cHMiLCJpc1B1cmR1ZVNoYXJkIiwicmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayIsImRhdGEiLCJ1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2siLCJpc0ZldGNoRXJyb3JEYXRhIiwiaXNTaG93aW5nRXJyb3JBbGVydCIsInNldFVzZXJVbmlUaW1lR3JvdXBzIiwiZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCIsIm1vZGVsTmFtZSIsInF1ZXJ5UGFyYW1zIiwibm9TdG9yZSIsImd1aWQiLCJldmVyeSIsImxlbmd0aCIsImpzeHMiLCJjaGlsZHJlbiIsImpzeCIsImRpc3BsYXlOYW1lIiwiZGlzcGxheVVuaVRpbWVHcm91cHMiLCJkaXNhYmxlZCIsIm9yZGVyQnkiLCJlZyIsImluZGV4IiwiaXNDb25uZWN0ZWQiLCJzb21lIiwiZXh0ZXJuYWxQcm92aWRlcklkIiwiRm9ybUNoZWNrIiwidHlwZSIsIm9uQ2hhbmdlIiwiaGFuZGxlU2VsZWN0RXh0ZXJuYWxHcm91cHMiLCJsYWJlbCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImNvbXBvbmVudERpZE1vdW50Iiwic2V0T3duZXJTY2hlZHVsZXMiLCJnZXRNb2RlbEFycmF5IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2RXh0ZXJuYWxUZXJtSWQiLCJwcmV2R3JvdXBVc2VyUm9sZXMiLCJrZXlzIiwicmVuZGVyIiwiZGlzYWJsZWRJbmZvTWVzc2FnZSIsImhhc0FueUV4dGVybmFsR3JvdXBzIiwiTG9hZGluZyIsIkFsZXJ0V2l0aEljb24iLCJ2YXJpYW50Iiwib25DbG9zZSIsImNsYXNzTmFtZSIsIkZvcm1Hcm91cCIsImRpc3BsYXlPd25lclNjaGVkdWxlcyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9Hcm91cHMvRXh0ZXJuYWxHcm91cHMvQXR0YWNoLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5LCBldmVyeSwgZm9yRWFjaCwgbWFwLCBvcmRlckJ5LCByZW1vdmUsIHNldCwgc29tZSB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBGb3JtQ2hlY2ssIEZvcm1Hcm91cCB9IGZyb20gJ3JlYWN0LWJvb3RzdHJhcCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyBCQVNFX1JPTEUsIE1PREVMX1NUQVRVUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cydcbmltcG9ydCB7IGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi9yZWR1eC9hY3Rpb25DcmVhdG9yJ1xuaW1wb3J0IHsgcmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vaywgdW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rIH0gZnJvbSAnLi4vLi4vLi4vcmVkdXgvc2FnYXMvbm9TdG9yZVNhZ2EnXG5pbXBvcnQge1xuXHRFeHRlcm5hbEdyb3VwLFxuXHRGZXRjaEVycm9yRGF0YSxcblx0R3JvdXBVc2VyUm9sZSxcblx0SW5zdHJ1Y3RvclNjaGVkdWxlLFxuXHRMdGlMYXVuY2gsXG5cdE1vZGVsQ29sbGVjdGlvbixcblx0T3duZXJTY2hlZHVsZSxcblx0VW5pVGltZUdyb3VwLFxuXHRVc2VySW5mb1xufSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IGlzRmV0Y2hFcnJvckRhdGEgfSBmcm9tICcuLi8uLi8uLi91dGlscy9mZXRjaCdcbmltcG9ydCB7IGdldE1vZGVsQXJyYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tb2RlbCdcbmltcG9ydCB7IGlzUHVyZHVlU2hhcmQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zaGFyZCdcbmltcG9ydCB7IGRpc3BsYXlOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXNlcidcbmltcG9ydCB7IEFsZXJ0V2l0aEljb24gfSBmcm9tICcuLi8uLi9BbGVydFdpdGhJY29uJ1xuaW1wb3J0IHsgTG9hZGluZyB9IGZyb20gJy4uLy4uL0xvYWRpbmcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxHcm91cHNBdHRhY2hQcm9wcyB7XG5cdHVzZXJJbmZvOiBVc2VySW5mb1xuXHRjYW5SZWFkRXh0ZXJuYWxHcm91cHM6IGJvb2xlYW5cblx0Y2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzOiBib29sZWFuXG5cdGNhbkNvbm5lY3RPd25FeHRlcm5hbEdyb3VwczogYm9vbGVhblxuXHRvcmlnaW5hbENvbm5lY3RlZEV4dGVybmFsR3JvdXBzOiBBcnJheTxFeHRlcm5hbEdyb3VwIHwgTHRpTGF1bmNoPlxuXHRzZWxlY3RlZEV4dGVybmFsR3JvdXBzOiBBcnJheTxFeHRlcm5hbEdyb3VwIHwgTHRpTGF1bmNoIHwgVW5pVGltZUdyb3VwPlxuXHRleHRlcm5hbFRlcm1JZDogbnVtYmVyXG5cdGhhbmRsZVNlbGVjdGVkRXh0ZXJuYWxHcm91cHM6IChleHRlcm5hbEdyb3VwczogQXJyYXk8RXh0ZXJuYWxHcm91cCB8IEx0aUxhdW5jaCB8IFVuaVRpbWVHcm91cD4pID0+IHZvaWRcblx0Z3JvdXBVc2VyUm9sZXM6IE1vZGVsQ29sbGVjdGlvbjxHcm91cFVzZXJSb2xlPlxuXHRkaXNhYmxlZD86IGJvb2xlYW5cblx0ZGlzYWJsZWRJbmZvTWVzc2FnZT86IHN0cmluZyB8IFJlYWN0LkpTWC5FbGVtZW50XG59XG5cbmludGVyZmFjZSBFeHRlcm5hbEdyb3Vwc0F0dGFjaFN0YXRlIHtcblx0b3duZXJTY2hlZHVsZXM/OiBEaWN0aW9uYXJ5PE93bmVyU2NoZWR1bGU+XG5cdGlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmU6IGJvb2xlYW5cblx0aXNTaG93aW5nRXJyb3JBbGVydDogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxHcm91cHNBdHRhY2ggZXh0ZW5kcyBDb21wb25lbnQ8RXh0ZXJuYWxHcm91cHNBdHRhY2hQcm9wcywgRXh0ZXJuYWxHcm91cHNBdHRhY2hTdGF0ZT4ge1xuXHRjb25zdHJ1Y3Rvcihwcm9wczogRXh0ZXJuYWxHcm91cHNBdHRhY2hQcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKVxuXHRcdHRoaXMuc3RhdGUgPSB7XG5cdFx0XHRvd25lclNjaGVkdWxlczogdW5kZWZpbmVkLFxuXHRcdFx0aXNVbmlUaW1lU2NoZWR1bGVMb2FkaW5nRG9uZTogZmFsc2UsXG5cdFx0XHRpc1Nob3dpbmdFcnJvckFsZXJ0OiBmYWxzZVxuXHRcdH1cblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdGNvbnN0IHsgZ3JvdXBVc2VyUm9sZXMsIGV4dGVybmFsVGVybUlkLCBzZWxlY3RlZEV4dGVybmFsR3JvdXBzIH0gPSB0aGlzLnByb3BzXG5cdFx0dGhpcy5zZXRPd25lclNjaGVkdWxlcyhnZXRNb2RlbEFycmF5KGdyb3VwVXNlclJvbGVzKSwgZXh0ZXJuYWxUZXJtSWQsIHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMpXG5cdH1cblxuXHRjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblx0XHRjb25zdCB7IG93bmVyU2NoZWR1bGVzIH0gPSB0aGlzLnN0YXRlXG5cdFx0Zm9yRWFjaChvd25lclNjaGVkdWxlcywgb3MgPT4gdW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKG9zLmhvb2tJZCkpXG5cdH1cblxuXHRjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBSZWFkb25seTxFeHRlcm5hbEdyb3Vwc0F0dGFjaFByb3BzPikge1xuXHRcdGNvbnN0IHsgZXh0ZXJuYWxUZXJtSWQ6IHByZXZFeHRlcm5hbFRlcm1JZCwgZ3JvdXBVc2VyUm9sZXM6IHByZXZHcm91cFVzZXJSb2xlcyB9ID0gcHJldlByb3BzXG5cdFx0Y29uc3QgeyBleHRlcm5hbFRlcm1JZCwgZ3JvdXBVc2VyUm9sZXMsIHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMgfSA9IHRoaXMucHJvcHNcblx0XHQvLyBBc3N1bWVzIGdyb3VwIHVzZXIgcm9sZXMgYXJlIGNoYW5naW5nIG9uZSBhdCBhIHRpbWUuIENhbiBiZSBtYWRlIGZhbmNpZXIgaWYgdGhlIG5lZWQgYXJpc2VzXG5cdFx0aWYgKFxuXHRcdFx0cHJldkV4dGVybmFsVGVybUlkICE9PSBleHRlcm5hbFRlcm1JZCB8fFxuXHRcdFx0T2JqZWN0LmtleXMocHJldkdyb3VwVXNlclJvbGVzKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKGdyb3VwVXNlclJvbGVzKS5sZW5ndGhcblx0XHQpIHtcblx0XHRcdHRoaXMuc2V0T3duZXJTY2hlZHVsZXMoZ2V0TW9kZWxBcnJheShncm91cFVzZXJSb2xlcyksIGV4dGVybmFsVGVybUlkLCBzZWxlY3RlZEV4dGVybmFsR3JvdXBzKVxuXHRcdH1cblx0fVxuXG5cdHNldE93bmVyU2NoZWR1bGVzID0gKFxuXHRcdGdyb3VwVXNlclJvbGVzOiBHcm91cFVzZXJSb2xlW10sXG5cdFx0ZXh0ZXJuYWxUZXJtSWQ6IG51bWJlcixcblx0XHRzZWxlY3RlZEV4dGVybmFsR3JvdXBzOiBBcnJheTxFeHRlcm5hbEdyb3VwIHwgTHRpTGF1bmNoIHwgVW5pVGltZUdyb3VwPlxuXHQpID0+IHtcblx0XHRjb25zdCB7IGNhbkNvbm5lY3RBbnlFeHRlcm5hbEdyb3VwcywgY2FuQ29ubmVjdE93bkV4dGVybmFsR3JvdXBzLCB1c2VySW5mbyB9ID0gdGhpcy5wcm9wc1xuXHRcdGNvbnN0IG93bmVycyA9IGdyb3VwVXNlclJvbGVzLmZpbHRlcihncm91cFVzZXJSb2xlID0+IHtcblx0XHRcdHJldHVybiBncm91cFVzZXJSb2xlLnJvbGUgPT09IEJBU0VfUk9MRS5HUk9VUF9PV05FUlxuXHRcdH0pXG5cblx0XHRjb25zdCBvd25lcnNJbml0aWFsU2NoZWR1bGVEYXRhOiBEaWN0aW9uYXJ5PE93bmVyU2NoZWR1bGU+ID0ge31cblx0XHRvd25lcnMuZm9yRWFjaChvd25lciA9PiB7XG5cdFx0XHRjb25zdCBvd25lckRhdGE6IE93bmVyU2NoZWR1bGUgPSB7XG5cdFx0XHRcdGhvb2tJZDogdXVpZHY0KCksXG5cdFx0XHRcdHN0YXR1czpcblx0XHRcdFx0XHRjYW5Db25uZWN0QW55RXh0ZXJuYWxHcm91cHMgfHwgKHVzZXJJbmZvLmlkID09PSBvd25lci5pZCAmJiBjYW5Db25uZWN0T3duRXh0ZXJuYWxHcm91cHMpXG5cdFx0XHRcdFx0XHQ/IE1PREVMX1NUQVRVUy5VTklOSVRJQUxJWkVEXG5cdFx0XHRcdFx0XHQ6IE1PREVMX1NUQVRVUy5SRUFEWSxcblx0XHRcdFx0b3duZXIsXG5cdFx0XHRcdGV4dGVybmFsR3JvdXBzOiAhKFxuXHRcdFx0XHRcdGNhbkNvbm5lY3RBbnlFeHRlcm5hbEdyb3VwcyB8fFxuXHRcdFx0XHRcdCh1c2VySW5mby5pZCA9PT0gb3duZXIuaWQgJiYgY2FuQ29ubmVjdE93bkV4dGVybmFsR3JvdXBzKVxuXHRcdFx0XHQpXG5cdFx0XHRcdFx0PyBzZWxlY3RlZEV4dGVybmFsR3JvdXBzLmZpbHRlcihzZWcgPT4gc2VnLnVzZXJJZCA9PT0gb3duZXIuaWQpXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdH1cblx0XHRcdHNldChvd25lcnNJbml0aWFsU2NoZWR1bGVEYXRhLCBbb3duZXIudXNlcklkXSwgb3duZXJEYXRhKVxuXHRcdH0pXG5cdFx0dGhpcy5zZXRTdGF0ZShcblx0XHRcdHtcblx0XHRcdFx0b3duZXJTY2hlZHVsZXM6IG93bmVyc0luaXRpYWxTY2hlZHVsZURhdGEsXG5cdFx0XHRcdGlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0Zm9yRWFjaChvd25lcnNJbml0aWFsU2NoZWR1bGVEYXRhLCAob3duZXJTY2hlZHVsZSwgdXNlcklkKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5nZXRPd25lclVuaVRpbWVHcm91cHMob3duZXJTY2hlZHVsZSwgdXNlcklkLCBleHRlcm5hbFRlcm1JZClcblx0XHRcdFx0fSlcblx0XHQpXG5cdH1cblxuXHRoYW5kbGVTZWxlY3RFeHRlcm5hbEdyb3VwcyA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcblx0XHRjb25zdCBleHRlcm5hbElkID0gZXZlbnQudGFyZ2V0LnZhbHVlXG5cdFx0Y29uc3QgY2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkXG5cdFx0Y29uc3QgeyBvcmlnaW5hbENvbm5lY3RlZEV4dGVybmFsR3JvdXBzLCBzZWxlY3RlZEV4dGVybmFsR3JvdXBzIH0gPSB0aGlzLnByb3BzXG5cblx0XHRjb25zdCBhbGxPd25lckV4dGVybmFsR3JvdXBzID0gbWFwKHRoaXMuc3RhdGUub3duZXJTY2hlZHVsZXMsIG9zID0+IG9zLmV4dGVybmFsR3JvdXBzKS5yZWR1Y2UoKGEsIGIpID0+XG5cdFx0XHQoYSB8fCBbXSkuY29uY2F0KGIgfHwgW10pXG5cdFx0KVxuXHRcdGNvbnN0IHNlbGVjdGVkRXh0ZXJuYWxHcm91cHNDb3B5ID0gc2VsZWN0ZWRFeHRlcm5hbEdyb3Vwcy5zbGljZSgpXG5cblx0XHRpZiAoY2hlY2tlZCkge1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxDb25uZWN0ZWRFeHRlcm5hbEdyb3VwID0gb3JpZ2luYWxDb25uZWN0ZWRFeHRlcm5hbEdyb3Vwcy5maW5kKFxuXHRcdFx0XHRvZWcgPT4gb2VnLmV4dGVybmFsSWQgPT09IGV4dGVybmFsSWRcblx0XHRcdClcblx0XHRcdGNvbnN0IHNlbGVjdGVkRXh0ZXJuYWxHcm91cCA9IG9yaWdpbmFsQ29ubmVjdGVkRXh0ZXJuYWxHcm91cFxuXHRcdFx0XHQ/IG9yaWdpbmFsQ29ubmVjdGVkRXh0ZXJuYWxHcm91cFxuXHRcdFx0XHQ6IGFsbE93bmVyRXh0ZXJuYWxHcm91cHM/LmZpbmQoYW8gPT4gYW8uZXh0ZXJuYWxJZCA9PT0gZXh0ZXJuYWxJZClcblxuXHRcdFx0aWYgKHNlbGVjdGVkRXh0ZXJuYWxHcm91cCkge1xuXHRcdFx0XHRzZWxlY3RlZEV4dGVybmFsR3JvdXBzQ29weS5wdXNoKHNlbGVjdGVkRXh0ZXJuYWxHcm91cClcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKHNlbGVjdGVkRXh0ZXJuYWxHcm91cHNDb3B5LCBzZWcgPT4gc2VnLmV4dGVybmFsSWQgPT09IGV4dGVybmFsSWQpXG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9wcy5oYW5kbGVTZWxlY3RlZEV4dGVybmFsR3JvdXBzKHNlbGVjdGVkRXh0ZXJuYWxHcm91cHNDb3B5KVxuXHR9XG5cblx0Z2V0T3duZXJVbmlUaW1lR3JvdXBzID0gKG93bmVyU2NoZWR1bGU6IE93bmVyU2NoZWR1bGUsIHVzZXJJZDogc3RyaW5nLCBleHRlcm5hbFRlcm1JZDogbnVtYmVyKSA9PiB7XG5cdFx0aWYgKGlzUHVyZHVlU2hhcmQoKSAmJiBvd25lclNjaGVkdWxlLnN0YXR1cyA9PT0gTU9ERUxfU1RBVFVTLlVOSU5JVElBTElaRUQgJiYgIW93bmVyU2NoZWR1bGUuZXh0ZXJuYWxHcm91cHMpIHtcblx0XHRcdHJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2sob3duZXJTY2hlZHVsZS5ob29rSWQsIChkYXRhOiBJbnN0cnVjdG9yU2NoZWR1bGUgfCBGZXRjaEVycm9yRGF0YSB8IG51bGwpID0+IHtcblx0XHRcdFx0dW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKG93bmVyU2NoZWR1bGUuaG9va0lkKVxuXHRcdFx0XHRpZiAoIWRhdGEgfHwgaXNGZXRjaEVycm9yRGF0YShkYXRhKSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBpc1Nob3dpbmdFcnJvckFsZXJ0OiB0cnVlLCBpc1VuaVRpbWVTY2hlZHVsZUxvYWRpbmdEb25lOiB0cnVlIH0pXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRVc2VyVW5pVGltZUdyb3Vwcyh1c2VySWQsIGRhdGEuZXh0ZXJuYWxHcm91cHMpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRcdFx0bW9kZWxOYW1lOiAndW5pVGltZUluc3RydWN0b3JTY2hlZHVsZScsXG5cdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7XG5cdFx0XHRcdFx0ZXh0ZXJuYWxUZXJtSWQsXG5cdFx0XHRcdFx0dXNlcklkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0XHRcdGd1aWQ6IG93bmVyU2NoZWR1bGUuaG9va0lkXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHNldFVzZXJVbmlUaW1lR3JvdXBzID0gKHVzZXJJZDogc3RyaW5nLCBleHRlcm5hbEdyb3VwczogVW5pVGltZUdyb3VwW10pID0+IHtcblx0XHQvLyBTZXR0aW5nIHRoZSB1c2VyJ3MgY291cnNlIHNlY3Rpb25zIGxvYWQgc3RhdHVzIHRvIGJlIHJlYWR5XG5cdFx0Y29uc3Qgb3duZXJTY2hlZHVsZXMgPSB0aGlzLnN0YXRlLm93bmVyU2NoZWR1bGVzIHx8IHt9XG5cdFx0b3duZXJTY2hlZHVsZXNbdXNlcklkXS5zdGF0dXMgPSBNT0RFTF9TVEFUVVMuUkVBRFlcblx0XHRvd25lclNjaGVkdWxlc1t1c2VySWRdLmV4dGVybmFsR3JvdXBzID0gZXh0ZXJuYWxHcm91cHNcblxuXHRcdGNvbnN0IGlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmUgPSBldmVyeShvd25lclNjaGVkdWxlcywgb3MgPT4gb3Muc3RhdHVzID09PSBNT0RFTF9TVEFUVVMuUkVBRFkpXG5cblx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdG93bmVyU2NoZWR1bGVzLFxuXHRcdFx0aXNVbmlUaW1lU2NoZWR1bGVMb2FkaW5nRG9uZVxuXHRcdH0pXG5cdH1cblxuXHRkaXNwbGF5T3duZXJTY2hlZHVsZXMgPSAob3duZXJTY2hlZHVsZXM6IERpY3Rpb25hcnk8T3duZXJTY2hlZHVsZT4pID0+IHtcblx0XHRyZXR1cm4gbWFwKG93bmVyU2NoZWR1bGVzLCBvcyA9PiB7XG5cdFx0XHRpZiAoISFvcy5leHRlcm5hbEdyb3VwcyAmJiBvcy5leHRlcm5hbEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdiBrZXk9e29zLmhvb2tJZH0+XG5cdFx0XHRcdFx0XHQ8aDQ+e2Rpc3BsYXlOYW1lKG9zLm93bmVyKX08L2g0PlxuXHRcdFx0XHRcdFx0e3RoaXMuZGlzcGxheVVuaVRpbWVHcm91cHMob3MuZXh0ZXJuYWxHcm91cHMpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGRpc3BsYXlVbmlUaW1lR3JvdXBzID0gKGV4dGVybmFsR3JvdXBzOiBBcnJheTxFeHRlcm5hbEdyb3VwIHwgTHRpTGF1bmNoIHwgVW5pVGltZUdyb3VwPikgPT4ge1xuXHRcdGNvbnN0IHsgc2VsZWN0ZWRFeHRlcm5hbEdyb3VwcywgY2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzLCBjYW5Db25uZWN0T3duRXh0ZXJuYWxHcm91cHMsIHVzZXJJbmZvLCBkaXNhYmxlZCB9ID1cblx0XHRcdHRoaXMucHJvcHNcblxuXHRcdHJldHVybiBvcmRlckJ5KGV4dGVybmFsR3JvdXBzLCBbJ2Rlc2NyaXB0aW9uJ10pLm1hcCgoZWcsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBpc0Nvbm5lY3RlZCA9IHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMuc29tZShcblx0XHRcdFx0c2VnID0+XG5cdFx0XHRcdFx0c2VnLmV4dGVybmFsSWQgPT09IGVnLmV4dGVybmFsSWQgJiZcblx0XHRcdFx0XHRzZWcuZXh0ZXJuYWxQcm92aWRlcklkID09PSBlZy5leHRlcm5hbFByb3ZpZGVySWQgJiZcblx0XHRcdFx0XHRzZWcudXNlcklkID09PSBlZy51c2VySWRcblx0XHRcdClcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjYW5Db25uZWN0QW55RXh0ZXJuYWxHcm91cHMgfHxcblx0XHRcdFx0KHVzZXJJbmZvLmlkID09PSBlZy51c2VySWQgJiYgY2FuQ29ubmVjdE93bkV4dGVybmFsR3JvdXBzKSB8fFxuXHRcdFx0XHRpc0Nvbm5lY3RlZFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEZvcm1DaGVja1xuXHRcdFx0XHRcdFx0aWQ9e2BleHRlcm5hbC1ncm91cC0ke2VnLmlkfWB9XG5cdFx0XHRcdFx0XHR0eXBlPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0a2V5PXtpbmRleH1cblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdEV4dGVybmFsR3JvdXBzfVxuXHRcdFx0XHRcdFx0dmFsdWU9e2VnLmV4dGVybmFsSWR9XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtpc0Nvbm5lY3RlZH1cblx0XHRcdFx0XHRcdGRpc2FibGVkPXsodXNlckluZm8uaWQgIT09IGVnLnVzZXJJZCAmJiAhY2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzKSB8fCBkaXNhYmxlZH1cblx0XHRcdFx0XHRcdGxhYmVsPXtgJHtlZy5uYW1lfSAke2VnLmRlc2NyaXB0aW9uID8gYCgke2VnLmRlc2NyaXB0aW9ufSlgIDogJyd9YH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbFxuXHRcdH0pXG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyBkaXNhYmxlZEluZm9NZXNzYWdlIH0gPSB0aGlzLnByb3BzXG5cdFx0Y29uc3QgeyBvd25lclNjaGVkdWxlcywgaXNVbmlUaW1lU2NoZWR1bGVMb2FkaW5nRG9uZSwgaXNTaG93aW5nRXJyb3JBbGVydCB9ID0gdGhpcy5zdGF0ZVxuXHRcdGNvbnN0IGhhc0FueUV4dGVybmFsR3JvdXBzID0gc29tZShvd25lclNjaGVkdWxlcywgb3MgPT4gISFvcy5leHRlcm5hbEdyb3VwcyAmJiBvcy5leHRlcm5hbEdyb3Vwcy5sZW5ndGggPiAwKVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdHshaXNVbmlUaW1lU2NoZWR1bGVMb2FkaW5nRG9uZSAmJiA8TG9hZGluZyAvPn1cblx0XHRcdFx0e2lzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmUgJiYgKFxuXHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHR7IWhhc0FueUV4dGVybmFsR3JvdXBzICYmIChcblx0XHRcdFx0XHRcdFx0PEFsZXJ0V2l0aEljb24gdmFyaWFudD1cImluZm9cIj5cblx0XHRcdFx0XHRcdFx0XHQ8cD5ObyBjb3Vyc2Ugc2VjdGlvbnMgZWxpZ2libGUgZm9yIHJvc3RlciBzeW5jLjwvcD5cblx0XHRcdFx0XHRcdFx0PC9BbGVydFdpdGhJY29uPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdHshIWRpc2FibGVkSW5mb01lc3NhZ2UgJiYgaGFzQW55RXh0ZXJuYWxHcm91cHMgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8QWxlcnRXaXRoSWNvbiB2YXJpYW50PVwiaW5mb1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxwPntkaXNhYmxlZEluZm9NZXNzYWdlfTwvcD5cblx0XHRcdFx0XHRcdFx0PC9BbGVydFdpdGhJY29uPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdHtpc1Nob3dpbmdFcnJvckFsZXJ0ICYmIChcblx0XHRcdFx0XHRcdFx0PEFsZXJ0V2l0aEljb25cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHRcdFx0b25DbG9zZT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2hvd2luZ0Vycm9yQWxlcnQ6IGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdH19PlxuXHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzTmFtZT1cIm1hMFwiPk9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGxvYWRpbmcuIFBsZWFzZSB0cnkgYWdhaW4uPC9wPlxuXHRcdFx0XHRcdFx0XHQ8L0FsZXJ0V2l0aEljb24+XG5cdFx0XHRcdFx0XHQpfXsnICd9XG5cdFx0XHRcdFx0XHR7aGFzQW55RXh0ZXJuYWxHcm91cHMgJiYgISFvd25lclNjaGVkdWxlcyAmJiAoXG5cdFx0XHRcdFx0XHRcdDxGb3JtR3JvdXAgY2xhc3NOYW1lPVwibWw0IGY2XCI+e3RoaXMuZGlzcGxheU93bmVyU2NoZWR1bGVzKG93bmVyU2NoZWR1bGVzKX08L0Zvcm1Hcm91cD5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxlQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxZQUFBLEdBQUFQLE9BQUE7QUFZQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxLQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxjQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxRQUFBLEdBQUFiLE9BQUE7QUFBdUMsSUFBQWMsV0FBQSxHQUFBZCxPQUFBO0FBQUEsU0FBQUUsd0JBQUFhLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFmLHVCQUFBLFlBQUFBLENBQUFhLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBc0JoQyxNQUFNa0Isb0JBQW9CLFNBQVNDLGdCQUFTLENBQXVEO0VBQ3pHQyxXQUFXQSxDQUFDQyxLQUFnQyxFQUFFO0lBQzdDLEtBQUssQ0FBQ0EsS0FBSyxDQUFDO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQWIsT0FBQSw2QkE4Qk8sQ0FDbkJjLGNBQStCLEVBQy9CQyxjQUFzQixFQUN0QkMsc0JBQXVFLEtBQ25FO01BQ0osTUFBTTtRQUFFQywyQkFBMkI7UUFBRUMsMkJBQTJCO1FBQUVDO01BQVMsQ0FBQyxHQUFHLElBQUksQ0FBQ1AsS0FBSztNQUN6RixNQUFNUSxNQUFNLEdBQUdOLGNBQWMsQ0FBQ08sTUFBTSxDQUFDQyxhQUFhLElBQUk7UUFDckQsT0FBT0EsYUFBYSxDQUFDQyxJQUFJLEtBQUtDLG9CQUFTLENBQUNDLFdBQVc7TUFDcEQsQ0FBQyxDQUFDO01BRUYsTUFBTUMseUJBQW9ELEdBQUcsQ0FBQyxDQUFDO01BQy9ETixNQUFNLENBQUNPLE9BQU8sQ0FBQ0MsS0FBSyxJQUFJO1FBQ3ZCLE1BQU1DLFNBQXdCLEdBQUc7VUFDaENDLE1BQU0sRUFBRSxJQUFBQyxRQUFNLEVBQUMsQ0FBQztVQUNoQkMsTUFBTSxFQUNMZiwyQkFBMkIsSUFBS0UsUUFBUSxDQUFDYyxFQUFFLEtBQUtMLEtBQUssQ0FBQ0ssRUFBRSxJQUFJZiwyQkFBNEIsR0FDckZnQix1QkFBWSxDQUFDQyxhQUFhLEdBQzFCRCx1QkFBWSxDQUFDRSxLQUFLO1VBQ3RCUixLQUFLO1VBQ0xTLGNBQWMsRUFBRSxFQUNmcEIsMkJBQTJCLElBQzFCRSxRQUFRLENBQUNjLEVBQUUsS0FBS0wsS0FBSyxDQUFDSyxFQUFFLElBQUlmLDJCQUE0QixDQUN6RCxHQUNFRixzQkFBc0IsQ0FBQ0ssTUFBTSxDQUFDaUIsR0FBRyxJQUFJQSxHQUFHLENBQUNDLE1BQU0sS0FBS1gsS0FBSyxDQUFDSyxFQUFFLENBQUMsR0FDN0RPO1FBQ0osQ0FBQztRQUNELElBQUFyQyxXQUFHLEVBQUN1Qix5QkFBeUIsRUFBRSxDQUFDRSxLQUFLLENBQUNXLE1BQU0sQ0FBQyxFQUFFVixTQUFTLENBQUM7TUFDMUQsQ0FBQyxDQUFDO01BQ0YsSUFBSSxDQUFDWSxRQUFRLENBQ1o7UUFDQ0MsY0FBYyxFQUFFaEIseUJBQXlCO1FBQ3pDaUIsNEJBQTRCLEVBQUU7TUFDL0IsQ0FBQyxFQUNELE1BQ0MsSUFBQWhCLGVBQU8sRUFBQ0QseUJBQXlCLEVBQUUsQ0FBQ2tCLGFBQWEsRUFBRUwsTUFBTSxLQUFLO1FBQzdELElBQUksQ0FBQ00scUJBQXFCLENBQUNELGFBQWEsRUFBRUwsTUFBTSxFQUFFeEIsY0FBYyxDQUFDO01BQ2xFLENBQUMsQ0FDSCxDQUFDO0lBQ0YsQ0FBQztJQUFBLElBQUFGLGdCQUFBLENBQUFiLE9BQUEsc0NBRTZCOEMsS0FBb0MsSUFBSztNQUN0RSxNQUFNQyxVQUFVLEdBQUdELEtBQUssQ0FBQ0UsTUFBTSxDQUFDQyxLQUFLO01BQ3JDLE1BQU1DLE9BQU8sR0FBR0osS0FBSyxDQUFDRSxNQUFNLENBQUNFLE9BQU87TUFDcEMsTUFBTTtRQUFFQywrQkFBK0I7UUFBRW5DO01BQXVCLENBQUMsR0FBRyxJQUFJLENBQUNKLEtBQUs7TUFFOUUsTUFBTXdDLHNCQUFzQixHQUFHLElBQUFDLFdBQUcsRUFBQyxJQUFJLENBQUNDLEtBQUssQ0FBQ1osY0FBYyxFQUFFYSxFQUFFLElBQUlBLEVBQUUsQ0FBQ2xCLGNBQWMsQ0FBQyxDQUFDbUIsTUFBTSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUNsRyxDQUFDRCxDQUFDLElBQUksRUFBRSxFQUFFRSxNQUFNLENBQUNELENBQUMsSUFBSSxFQUFFLENBQ3pCLENBQUM7TUFDRCxNQUFNRSwwQkFBMEIsR0FBRzVDLHNCQUFzQixDQUFDNkMsS0FBSyxDQUFDLENBQUM7TUFFakUsSUFBSVgsT0FBTyxFQUFFO1FBQ1osTUFBTVksOEJBQThCLEdBQUdYLCtCQUErQixDQUFDWSxJQUFJLENBQzFFQyxHQUFHLElBQUlBLEdBQUcsQ0FBQ2pCLFVBQVUsS0FBS0EsVUFDM0IsQ0FBQztRQUNELE1BQU1rQixxQkFBcUIsR0FBR0gsOEJBQThCLEdBQ3pEQSw4QkFBOEIsR0FDOUJWLHNCQUFzQixFQUFFVyxJQUFJLENBQUNHLEVBQUUsSUFBSUEsRUFBRSxDQUFDbkIsVUFBVSxLQUFLQSxVQUFVLENBQUM7UUFFbkUsSUFBSWtCLHFCQUFxQixFQUFFO1VBQzFCTCwwQkFBMEIsQ0FBQ08sSUFBSSxDQUFDRixxQkFBcUIsQ0FBQztRQUN2RDtNQUNELENBQUMsTUFBTTtRQUNOLElBQUFHLGNBQU0sRUFBQ1IsMEJBQTBCLEVBQUV0QixHQUFHLElBQUlBLEdBQUcsQ0FBQ1MsVUFBVSxLQUFLQSxVQUFVLENBQUM7TUFDekU7TUFFQSxJQUFJLENBQUNuQyxLQUFLLENBQUN5RCw0QkFBNEIsQ0FBQ1QsMEJBQTBCLENBQUM7SUFDcEUsQ0FBQztJQUFBLElBQUEvQyxnQkFBQSxDQUFBYixPQUFBLGlDQUV1QixDQUFDNEMsYUFBNEIsRUFBRUwsTUFBYyxFQUFFeEIsY0FBc0IsS0FBSztNQUNqRyxJQUFJLElBQUF1RCxvQkFBYSxFQUFDLENBQUMsSUFBSTFCLGFBQWEsQ0FBQ1osTUFBTSxLQUFLRSx1QkFBWSxDQUFDQyxhQUFhLElBQUksQ0FBQ1MsYUFBYSxDQUFDUCxjQUFjLEVBQUU7UUFDNUcsSUFBQWtDLHNDQUF5QixFQUFDM0IsYUFBYSxDQUFDZCxNQUFNLEVBQUcwQyxJQUFnRCxJQUFLO1VBQ3JHLElBQUFDLHdDQUEyQixFQUFDN0IsYUFBYSxDQUFDZCxNQUFNLENBQUM7VUFDakQsSUFBSSxDQUFDMEMsSUFBSSxJQUFJLElBQUFFLHVCQUFnQixFQUFDRixJQUFJLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMvQixRQUFRLENBQUM7Y0FBRWtDLG1CQUFtQixFQUFFLElBQUk7Y0FBRWhDLDRCQUE0QixFQUFFO1lBQUssQ0FBQyxDQUFDO1VBQ2pGLENBQUMsTUFBTTtZQUNOLElBQUksQ0FBQ2lDLG9CQUFvQixDQUFDckMsTUFBTSxFQUFFaUMsSUFBSSxDQUFDbkMsY0FBYyxDQUFDO1VBQ3ZEO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsSUFBQXdDLHdDQUF5QixFQUFDO1VBQ3pCQyxTQUFTLEVBQUUsMkJBQTJCO1VBQ3RDQyxXQUFXLEVBQUU7WUFDWmhFLGNBQWM7WUFDZHdCO1VBQ0QsQ0FBQztVQUNEeUMsT0FBTyxFQUFFLElBQUk7VUFDYkMsSUFBSSxFQUFFckMsYUFBYSxDQUFDZDtRQUNyQixDQUFDLENBQUM7TUFDSDtJQUNELENBQUM7SUFBQSxJQUFBakIsZ0JBQUEsQ0FBQWIsT0FBQSxnQ0FFc0IsQ0FBQ3VDLE1BQWMsRUFBRUYsY0FBOEIsS0FBSztNQUMxRTtNQUNBLE1BQU1LLGNBQWMsR0FBRyxJQUFJLENBQUNZLEtBQUssQ0FBQ1osY0FBYyxJQUFJLENBQUMsQ0FBQztNQUN0REEsY0FBYyxDQUFDSCxNQUFNLENBQUMsQ0FBQ1AsTUFBTSxHQUFHRSx1QkFBWSxDQUFDRSxLQUFLO01BQ2xETSxjQUFjLENBQUNILE1BQU0sQ0FBQyxDQUFDRixjQUFjLEdBQUdBLGNBQWM7TUFFdEQsTUFBTU0sNEJBQTRCLEdBQUcsSUFBQXVDLGFBQUssRUFBQ3hDLGNBQWMsRUFBRWEsRUFBRSxJQUFJQSxFQUFFLENBQUN2QixNQUFNLEtBQUtFLHVCQUFZLENBQUNFLEtBQUssQ0FBQztNQUVsRyxJQUFJLENBQUNLLFFBQVEsQ0FBQztRQUNiQyxjQUFjO1FBQ2RDO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBLElBQUE5QixnQkFBQSxDQUFBYixPQUFBLGlDQUV3QjBDLGNBQXlDLElBQUs7TUFDdEUsT0FBTyxJQUFBVyxXQUFHLEVBQUNYLGNBQWMsRUFBRWEsRUFBRSxJQUFJO1FBQ2hDLElBQUksQ0FBQyxDQUFDQSxFQUFFLENBQUNsQixjQUFjLElBQUlrQixFQUFFLENBQUNsQixjQUFjLENBQUM4QyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3hELG9CQUNDLElBQUE5RixXQUFBLENBQUErRixJQUFBO1lBQUFDLFFBQUEsZ0JBQ0MsSUFBQWhHLFdBQUEsQ0FBQWlHLEdBQUE7Y0FBQUQsUUFBQSxFQUFLLElBQUFFLGlCQUFXLEVBQUNoQyxFQUFFLENBQUMzQixLQUFLO1lBQUMsQ0FBSyxDQUFDLEVBQy9CLElBQUksQ0FBQzRELG9CQUFvQixDQUFDakMsRUFBRSxDQUFDbEIsY0FBYyxDQUFDO1VBQUEsR0FGcENrQixFQUFFLENBQUN6QixNQUdSLENBQUM7UUFFUjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFBQSxJQUFBakIsZ0JBQUEsQ0FBQWIsT0FBQSxnQ0FFdUJxQyxjQUErRCxJQUFLO01BQzNGLE1BQU07UUFBRXJCLHNCQUFzQjtRQUFFQywyQkFBMkI7UUFBRUMsMkJBQTJCO1FBQUVDLFFBQVE7UUFBRXNFO01BQVMsQ0FBQyxHQUM3RyxJQUFJLENBQUM3RSxLQUFLO01BRVgsT0FBTyxJQUFBOEUsZUFBTyxFQUFDckQsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQ2dCLEdBQUcsQ0FBQyxDQUFDc0MsRUFBRSxFQUFFQyxLQUFLLEtBQUs7UUFDbEUsTUFBTUMsV0FBVyxHQUFHN0Usc0JBQXNCLENBQUM4RSxJQUFJLENBQzlDeEQsR0FBRyxJQUNGQSxHQUFHLENBQUNTLFVBQVUsS0FBSzRDLEVBQUUsQ0FBQzVDLFVBQVUsSUFDaENULEdBQUcsQ0FBQ3lELGtCQUFrQixLQUFLSixFQUFFLENBQUNJLGtCQUFrQixJQUNoRHpELEdBQUcsQ0FBQ0MsTUFBTSxLQUFLb0QsRUFBRSxDQUFDcEQsTUFDcEIsQ0FBQztRQUVELElBQ0N0QiwyQkFBMkIsSUFDMUJFLFFBQVEsQ0FBQ2MsRUFBRSxLQUFLMEQsRUFBRSxDQUFDcEQsTUFBTSxJQUFJckIsMkJBQTRCLElBQzFEMkUsV0FBVyxFQUNWO1VBQ0Qsb0JBQ0MsSUFBQXhHLFdBQUEsQ0FBQWlHLEdBQUEsRUFBQzVHLGVBQUEsQ0FBQXNILFNBQVM7WUFDVC9ELEVBQUUsRUFBRSxrQkFBa0IwRCxFQUFFLENBQUMxRCxFQUFFLEVBQUc7WUFDOUJnRSxJQUFJLEVBQUMsVUFBVTtZQUVmQyxRQUFRLEVBQUUsSUFBSSxDQUFDQywwQkFBMkI7WUFDMUNsRCxLQUFLLEVBQUUwQyxFQUFFLENBQUM1QyxVQUFXO1lBQ3JCRyxPQUFPLEVBQUUyQyxXQUFZO1lBQ3JCSixRQUFRLEVBQUd0RSxRQUFRLENBQUNjLEVBQUUsS0FBSzBELEVBQUUsQ0FBQ3BELE1BQU0sSUFBSSxDQUFDdEIsMkJBQTJCLElBQUt3RSxRQUFTO1lBQ2xGVyxLQUFLLEVBQUUsR0FBR1QsRUFBRSxDQUFDVSxJQUFJLElBQUlWLEVBQUUsQ0FBQ1csV0FBVyxHQUFHLElBQUlYLEVBQUUsQ0FBQ1csV0FBVyxHQUFHLEdBQUcsRUFBRTtVQUFHLEdBTDlEVixLQU1MLENBQUM7UUFFSjtRQUNBLE9BQU8sSUFBSTtNQUNaLENBQUMsQ0FBQztJQUNILENBQUM7SUFsTEEsSUFBSSxDQUFDdEMsS0FBSyxHQUFHO01BQ1paLGNBQWMsRUFBRUYsU0FBUztNQUN6QkcsNEJBQTRCLEVBQUUsS0FBSztNQUNuQ2dDLG1CQUFtQixFQUFFO0lBQ3RCLENBQUM7RUFDRjtFQUVBNEIsaUJBQWlCQSxDQUFBLEVBQUc7SUFDbkIsTUFBTTtNQUFFekYsY0FBYztNQUFFQyxjQUFjO01BQUVDO0lBQXVCLENBQUMsR0FBRyxJQUFJLENBQUNKLEtBQUs7SUFDN0UsSUFBSSxDQUFDNEYsaUJBQWlCLENBQUMsSUFBQUMsb0JBQWEsRUFBQzNGLGNBQWMsQ0FBQyxFQUFFQyxjQUFjLEVBQUVDLHNCQUFzQixDQUFDO0VBQzlGO0VBRUEwRixvQkFBb0JBLENBQUEsRUFBRztJQUN0QixNQUFNO01BQUVoRTtJQUFlLENBQUMsR0FBRyxJQUFJLENBQUNZLEtBQUs7SUFDckMsSUFBQTNCLGVBQU8sRUFBQ2UsY0FBYyxFQUFFYSxFQUFFLElBQUksSUFBQWtCLHdDQUEyQixFQUFDbEIsRUFBRSxDQUFDekIsTUFBTSxDQUFDLENBQUM7RUFDdEU7RUFFQTZFLGtCQUFrQkEsQ0FBQ0MsU0FBOEMsRUFBRTtJQUNsRSxNQUFNO01BQUU3RixjQUFjLEVBQUU4RixrQkFBa0I7TUFBRS9GLGNBQWMsRUFBRWdHO0lBQW1CLENBQUMsR0FBR0YsU0FBUztJQUM1RixNQUFNO01BQUU3RixjQUFjO01BQUVELGNBQWM7TUFBRUU7SUFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQ0osS0FBSztJQUM3RTtJQUNBLElBQ0NpRyxrQkFBa0IsS0FBSzlGLGNBQWMsSUFDckNULE1BQU0sQ0FBQ3lHLElBQUksQ0FBQ0Qsa0JBQWtCLENBQUMsQ0FBQzNCLE1BQU0sS0FBSzdFLE1BQU0sQ0FBQ3lHLElBQUksQ0FBQ2pHLGNBQWMsQ0FBQyxDQUFDcUUsTUFBTSxFQUM1RTtNQUNELElBQUksQ0FBQ3FCLGlCQUFpQixDQUFDLElBQUFDLG9CQUFhLEVBQUMzRixjQUFjLENBQUMsRUFBRUMsY0FBYyxFQUFFQyxzQkFBc0IsQ0FBQztJQUM5RjtFQUNEO0VBeUpBZ0csTUFBTUEsQ0FBQSxFQUFHO0lBQ1IsTUFBTTtNQUFFQztJQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDckcsS0FBSztJQUMxQyxNQUFNO01BQUU4QixjQUFjO01BQUVDLDRCQUE0QjtNQUFFZ0M7SUFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQ3JCLEtBQUs7SUFDeEYsTUFBTTRELG9CQUFvQixHQUFHLElBQUFwQixZQUFJLEVBQUNwRCxjQUFjLEVBQUVhLEVBQUUsSUFBSSxDQUFDLENBQUNBLEVBQUUsQ0FBQ2xCLGNBQWMsSUFBSWtCLEVBQUUsQ0FBQ2xCLGNBQWMsQ0FBQzhDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFNUcsb0JBQ0MsSUFBQTlGLFdBQUEsQ0FBQStGLElBQUE7TUFBQUMsUUFBQSxHQUNFLENBQUMxQyw0QkFBNEIsaUJBQUksSUFBQXRELFdBQUEsQ0FBQWlHLEdBQUEsRUFBQ2xHLFFBQUEsQ0FBQStILE9BQU8sSUFBRSxDQUFDLEVBQzVDeEUsNEJBQTRCLGlCQUM1QixJQUFBdEQsV0FBQSxDQUFBK0YsSUFBQTtRQUFBQyxRQUFBLEdBQ0UsQ0FBQzZCLG9CQUFvQixpQkFDckIsSUFBQTdILFdBQUEsQ0FBQWlHLEdBQUEsRUFBQ25HLGNBQUEsQ0FBQWlJLGFBQWE7VUFBQ0MsT0FBTyxFQUFDLE1BQU07VUFBQWhDLFFBQUEsZUFDNUIsSUFBQWhHLFdBQUEsQ0FBQWlHLEdBQUE7WUFBQUQsUUFBQSxFQUFHO1VBQTRDLENBQUc7UUFBQyxDQUNyQyxDQUNmLEVBQ0EsQ0FBQyxDQUFDNEIsbUJBQW1CLElBQUlDLG9CQUFvQixpQkFDN0MsSUFBQTdILFdBQUEsQ0FBQWlHLEdBQUEsRUFBQ25HLGNBQUEsQ0FBQWlJLGFBQWE7VUFBQ0MsT0FBTyxFQUFDLE1BQU07VUFBQWhDLFFBQUEsZUFDNUIsSUFBQWhHLFdBQUEsQ0FBQWlHLEdBQUE7WUFBQUQsUUFBQSxFQUFJNEI7VUFBbUIsQ0FBSTtRQUFDLENBQ2QsQ0FDZixFQUNBdEMsbUJBQW1CLGlCQUNuQixJQUFBdEYsV0FBQSxDQUFBaUcsR0FBQSxFQUFDbkcsY0FBQSxDQUFBaUksYUFBYTtVQUNiQyxPQUFPLEVBQUMsU0FBUztVQUNqQkMsT0FBTyxFQUFFQSxDQUFBLEtBQU07WUFDZCxJQUFJLENBQUM3RSxRQUFRLENBQUM7Y0FDYmtDLG1CQUFtQixFQUFFO1lBQ3RCLENBQUMsQ0FBQztVQUNILENBQUU7VUFBQVUsUUFBQSxlQUNGLElBQUFoRyxXQUFBLENBQUFpRyxHQUFBO1lBQUdpQyxTQUFTLEVBQUMsS0FBSztZQUFBbEMsUUFBQSxFQUFDO1VBQTJELENBQUc7UUFBQyxDQUNwRSxDQUNmLEVBQUUsR0FBRyxFQUNMNkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDeEUsY0FBYyxpQkFDeEMsSUFBQXJELFdBQUEsQ0FBQWlHLEdBQUEsRUFBQzVHLGVBQUEsQ0FBQThJLFNBQVM7VUFBQ0QsU0FBUyxFQUFDLFFBQVE7VUFBQWxDLFFBQUEsRUFBRSxJQUFJLENBQUNvQyxxQkFBcUIsQ0FBQy9FLGNBQWM7UUFBQyxDQUFZLENBQ3JGO01BQUEsQ0FDRyxDQUNMO0lBQUEsQ0FDRyxDQUFDO0VBRVI7QUFDRDtBQUFDZ0YsT0FBQSxDQUFBakgsb0JBQUEsR0FBQUEsb0JBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|