@bnsights/bbsf-admin-portal 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/{esm2020 → esm2022}/bnsights-bbsf-admin-portal.mjs +4 -4
- package/{esm2020 → esm2022}/lib/Pages/ActiveDirectories/active-directories.component.mjs +14 -14
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +421 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +528 -0
- package/{esm2020 → esm2022}/lib/Pages/ActiveDirectories/active-directory-routing.module.mjs +29 -29
- package/esm2022/lib/Pages/ActiveDirectories/active-directory.module.mjs +108 -0
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +23 -0
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/aside/aside.component.mjs +65 -65
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/content/content.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/footer/footer.component.mjs +32 -32
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/header/header.component.mjs +57 -57
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/header/page-title/page-title.component.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/scripts-init/scripts-init.component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/subheader/subheader.component.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/subheader/subheader.module.mjs +26 -26
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/toolbar/toolbar.component.mjs +41 -41
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/toolbar/toolbar.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/topbar/topbar.component.mjs +71 -71
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/activation/activation.component.mjs +92 -92
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +37 -37
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +54 -54
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +100 -0
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/error/error.component.mjs +48 -48
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +59 -59
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/login/login.component.mjs +94 -94
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +90 -90
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +71 -71
- package/{esm2020 → esm2022}/lib/Pages/authentication/auth-callback/auth-callback.component.mjs +43 -43
- package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.routing.mjs +31 -31
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +330 -0
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +157 -0
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +801 -0
- package/{esm2020 → esm2022}/lib/Pages/configurations/configurations.component.mjs +15 -15
- package/esm2022/lib/Pages/configurations/configurations.module.mjs +104 -0
- package/{esm2020 → esm2022}/lib/Pages/configurations/configurations.routing.mjs +41 -41
- package/{esm2020 → esm2022}/lib/Pages/configurations/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/core/auth.module.mjs +30 -30
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +17 -0
- package/{esm2020 → esm2022}/lib/Pages/core/authentication/auth.guard.mjs +46 -46
- package/esm2022/lib/Pages/core/authentication/auth.service.mjs +147 -0
- package/esm2022/lib/Pages/departments/department/department.component.mjs +220 -0
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +185 -0
- package/{esm2020 → esm2022}/lib/Pages/departments/departments-routing.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/Pages/departments/departments.component.mjs +15 -15
- package/esm2022/lib/Pages/departments/departments.module.mjs +94 -0
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +136 -0
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +148 -0
- package/{esm2020 → esm2022}/lib/Pages/documents/document-template-info/document-template-info.component.mjs +332 -332
- package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +437 -0
- package/{esm2020 → esm2022}/lib/Pages/documents/documents.component.mjs +15 -15
- package/esm2022/lib/Pages/documents/documents.module.mjs +114 -0
- package/esm2022/lib/Pages/documents/documents.routing.mjs +37 -0
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +169 -0
- package/{esm2020 → esm2022}/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +123 -123
- package/{esm2020 → esm2022}/lib/Pages/empty-data/empty-data.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/Pages/empty-data/empty-data.module.mjs +28 -28
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +294 -0
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/Pages/helpCenter/help-center-routing.module.mjs +31 -31
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +242 -0
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +243 -0
- package/esm2022/lib/Pages/helpCenter/help-center.module.mjs +99 -0
- package/{esm2020 → esm2022}/lib/Pages/helpCenter/help-centers.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/home/filter-pipe.mjs +23 -23
- package/esm2022/lib/Pages/home/home.component.mjs +158 -0
- package/esm2022/lib/Pages/home/home.module.mjs +48 -0
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +443 -0
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +95 -0
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +223 -0
- package/esm2022/lib/Pages/jobs/jobs.module.mjs +87 -0
- package/{esm2020 → esm2022}/lib/Pages/license/license/license.component.mjs +163 -163
- package/esm2022/lib/Pages/license/license.module.mjs +71 -0
- package/{esm2020 → esm2022}/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +215 -215
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +516 -0
- package/esm2022/lib/Pages/localizations/localizations.module.mjs +79 -0
- package/{esm2020 → esm2022}/lib/Pages/logs/log/log.component.mjs +93 -93
- package/{esm2020 → esm2022}/lib/Pages/logs/logs-routing.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/Pages/logs/logs.component.mjs +15 -15
- package/esm2022/lib/Pages/logs/logs.module.mjs +87 -0
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +367 -0
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +187 -0
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +297 -0
- package/{esm2020 → esm2022}/lib/Pages/lookups/lookups-routing.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/lookups/lookups.component.mjs +15 -15
- package/esm2022/lib/Pages/lookups/lookups.module.mjs +100 -0
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +104 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/edit-email/edit-email.component.mjs +158 -158
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +133 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +115 -115
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +148 -0
- package/esm2022/lib/Pages/notifications/notifications-routing.module.mjs +39 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/notifications.component.mjs +15 -15
- package/esm2022/lib/Pages/notifications/notifications.module.mjs +101 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/template-info/template-info.component.mjs +391 -391
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +495 -0
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +615 -0
- package/{esm2020 → esm2022}/lib/Pages/providers/providers-routing.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/Pages/providers/providers.component.mjs +15 -15
- package/esm2022/lib/Pages/providers/providers.module.mjs +91 -0
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +334 -0
- package/{esm2020 → esm2022}/lib/Pages/publicHolidays/public-holidays-routing.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/Pages/publicHolidays/public-holidays.component.mjs +15 -15
- package/esm2022/lib/Pages/publicHolidays/public-holidays.module.mjs +94 -0
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +187 -0
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +226 -0
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +277 -0
- package/{esm2020 → esm2022}/lib/Pages/roles/roles-routing.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/roles/roles.component.mjs +15 -15
- package/esm2022/lib/Pages/roles/roles.module.mjs +105 -0
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +193 -0
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +180 -0
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +187 -0
- package/{esm2020 → esm2022}/lib/Pages/sectors/sectors-routing.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/sectors/sectors.component.mjs +15 -15
- package/esm2022/lib/Pages/sectors/sectors.module.mjs +96 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/ADType.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/Enums.mjs +54 -54
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/ProviderType.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/WFActivityType.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/configuration/ConditionRHSType.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/configuration/authentecation-configuration.mjs +18 -18
- package/{esm2020 → esm2022}/lib/Pages/shared/Pipes/survey-date.pipe.mjs +22 -22
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/AccountService.service.mjs +55 -55
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ConfigurationsService.service.mjs +61 -61
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/DepartmentService.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +81 -81
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +37 -37
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ErrorService.service.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/GlobalErrorHandler.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/HelpCenterService.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/HttpErrorInterceptor.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/JobsService.service.mjs +21 -21
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LicenseService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LogsService.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LookupGroupsService.service.mjs +33 -33
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LookupService.service.mjs +67 -67
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/PermissionSetService.service.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/PermissionsService.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/PublicHolidayService.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/SectorService.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/TemplateService.service.mjs +90 -90
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkFlowVersionService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +54 -54
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowInstanceService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowLogVariablesService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowService.service.mjs +38 -38
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/data.service.mjs +27 -27
- package/esm2022/lib/Pages/shared/Services/injectionModuleService.service.mjs +163 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/localizationsService.service .mjs +77 -77
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/provider.service.mjs +62 -62
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/survey-question.service.mjs +57 -57
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/survey.service.mjs +140 -140
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/userService.service.mjs +80 -80
- package/{esm2020 → esm2022}/lib/Pages/shared/base.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/Pages/shared/components/AdDirective.mjs +16 -16
- package/{esm2020 → esm2022}/lib/Pages/shared/components/external-url/external-url.component.mjs +168 -168
- package/{esm2020 → esm2022}/lib/Pages/shared/components/no-results/no-results.component.mjs +19 -19
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +192 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +48 -48
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +217 -217
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +49 -49
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +624 -624
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +683 -683
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +138 -138
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +102 -102
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +56 -56
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +532 -532
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +113 -113
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +114 -114
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey.component.mjs +292 -292
- package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +696 -0
- package/esm2022/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +84 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey-layout/survey-layout.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/shared/config/environment.mjs +11 -11
- package/esm2022/lib/Pages/shared/constants.mjs +130 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/filter/filter.component.mjs +14 -14
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ADModels/ADMappingModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/AccountModels/forgotPasswordModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DepartmentModels/DepartmentModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentExportDTO.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.mjs +9 -9
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.mjs +9 -9
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/JobModels/JobCountsModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LicenseModel/LicenseModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/EditResourceModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupGroupModel.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupItem.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.mjs +10 -10
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/TemplateDTO.mjs +9 -9
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/ProviderAttributeModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/ProviderModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SectorModels/SectorModel.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/DeleteSurveyDTO.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/add-survey-submissio.mjs +13 -13
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/add-survey.mjs +10 -10
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/model.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-field-options.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-filed-value.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-form-options.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-publish.mjs +4 -4
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +17 -17
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-question.mjs +10 -10
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-utils.mjs +8 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/ActivationModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/AddUserModel.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/DropdownsResponseModel.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/EditUserModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/IdentityModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/UserSearchParamDTO.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/UsersIDRequestModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityModel.mjs +16 -16
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFCreationModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFVariableModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/user.registration.mjs +7 -7
- package/esm2022/lib/Pages/shared/modules/public-survey.module.mjs +68 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/modules/survey-routing.module.mjs +39 -39
- package/esm2022/lib/Pages/shared/modules/survey.module.mjs +129 -0
- package/esm2022/lib/Pages/shared/shared.module.mjs +31 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/stylesbundle.service.mjs +44 -44
- package/{esm2020 → esm2022}/lib/Pages/start/index/index.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/Pages/start/start-routing.module.mjs +22 -22
- package/{esm2020 → esm2022}/lib/Pages/start/start.module.mjs +31 -31
- package/esm2022/lib/Pages/users/users.component.mjs +806 -0
- package/esm2022/lib/Pages/users/users.module.mjs +86 -0
- package/{esm2020 → esm2022}/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +535 -535
- package/{esm2020 → esm2022}/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +840 -840
- package/{esm2020 → esm2022}/lib/Pages/workflows/instance-info/instance-info.component.mjs +302 -302
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +793 -0
- package/{esm2020 → esm2022}/lib/Pages/workflows/version-info/version-info.component.mjs +137 -137
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +209 -0
- package/{esm2020 → esm2022}/lib/Pages/workflows/workflows-routing.module.mjs +35 -35
- package/{esm2020 → esm2022}/lib/Pages/workflows/workflows.component.mjs +15 -15
- package/esm2022/lib/Pages/workflows/workflows.module.mjs +103 -0
- package/{esm2020 → esm2022}/lib/_metronic/configs/default-layout.config.mjs +95 -95
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/DomHelpers.mjs +270 -270
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/ElementAnimateUtil.mjs +166 -166
- package/esm2022/lib/_metronic/core/_utils/EventHandlerUtil.mjs +90 -0
- package/esm2022/lib/_metronic/core/_utils/_DOMEventHandlerUtil.mjs +49 -0
- package/esm2022/lib/_metronic/core/_utils/_DataUtil.mjs +48 -0
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/_ElementStyleUtil.mjs +16 -16
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/_TypesHelpers.mjs +48 -48
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/models/OffsetModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/models/ViewPortModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/_metronic/core/components/MenuComponent.mjs +827 -827
- package/{esm2020 → esm2022}/lib/_metronic/core/components/_CookieComponent.mjs +52 -52
- package/esm2022/lib/_metronic/core/components/_DrawerComponent.mjs +288 -0
- package/{esm2020 → esm2022}/lib/_metronic/core/components/_ScrollComponent.mjs +252 -252
- package/esm2022/lib/_metronic/core/components/_ScrollTopComponent.mjs +113 -0
- package/esm2022/lib/_metronic/core/components/_ToggleComponent.mjs +157 -0
- package/{esm2020 → esm2022}/lib/_metronic/core/services/layout-init.service.mjs +155 -155
- package/{esm2020 → esm2022}/lib/_metronic/core/services/layout.service.mjs +150 -150
- package/esm2022/lib/_metronic/core/services/page-info.service.mjs +119 -0
- package/esm2022/lib/masterlayout-routing.module.mjs +41 -0
- package/{esm2020 → esm2022}/lib/masterlayout.component.mjs +118 -118
- package/esm2022/lib/masterlayout.module.mjs +188 -0
- package/{esm2020 → esm2022}/public-api.mjs +48 -48
- package/{fesm2020 → fesm2022}/bnsights-bbsf-admin-portal.mjs +26884 -26881
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +8 -8
- package/lib/Pages/ActiveDirectories/active-directory/active-directory.component.d.ts +85 -87
- package/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.d.ts +97 -99
- package/lib/Pages/ActiveDirectories/active-directory-routing.module.d.ts +7 -7
- package/lib/Pages/ActiveDirectories/active-directory.module.d.ts +26 -26
- package/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.d.ts +13 -13
- package/lib/Pages/_layout/components/aside/aside.component.d.ts +24 -24
- package/lib/Pages/_layout/components/content/content.component.d.ts +13 -13
- package/lib/Pages/_layout/components/footer/footer.component.d.ts +14 -14
- package/lib/Pages/_layout/components/header/header.component.d.ts +24 -24
- package/lib/Pages/_layout/components/header/page-title/page-title.component.d.ts +22 -22
- package/lib/Pages/_layout/components/scripts-init/scripts-init.component.d.ts +18 -18
- package/lib/Pages/_layout/components/subheader/subheader.component.d.ts +17 -17
- package/lib/Pages/_layout/components/subheader/subheader.module.d.ts +9 -9
- package/lib/Pages/_layout/components/toolbar/toolbar.component.d.ts +18 -18
- package/lib/Pages/_layout/components/toolbar/toolbar.module.d.ts +10 -10
- package/lib/Pages/_layout/components/topbar/topbar.component.d.ts +44 -44
- package/lib/Pages/anonymouslayout/activation/activation.component.d.ts +32 -32
- package/lib/Pages/anonymouslayout/anonymouslayout-routing.module.d.ts +7 -7
- package/lib/Pages/anonymouslayout/anonymouslayout.component.d.ts +24 -24
- package/lib/Pages/anonymouslayout/anonymouslayout.module.d.ts +21 -21
- package/lib/Pages/anonymouslayout/error/error.component.d.ts +25 -25
- package/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.d.ts +24 -24
- package/lib/Pages/anonymouslayout/login/login.component.d.ts +36 -36
- package/lib/Pages/anonymouslayout/rest-password/rest-password.component.d.ts +32 -32
- package/lib/Pages/anonymouslayout/upload-license/upload-license.component.d.ts +25 -25
- package/lib/Pages/authentication/auth-callback/auth-callback.component.d.ts +21 -21
- package/lib/Pages/authentication/authentication.component.d.ts +8 -8
- package/lib/Pages/authentication/authentication.module.d.ts +12 -12
- package/lib/Pages/authentication/authentication.routing.d.ts +7 -7
- package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +75 -75
- package/lib/Pages/configurations/auth-configuration/auth-configuration.component.d.ts +57 -58
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +127 -129
- package/lib/Pages/configurations/configurations.component.d.ts +8 -8
- package/lib/Pages/configurations/configurations.module.d.ts +24 -24
- package/lib/Pages/configurations/configurations.routing.d.ts +7 -7
- package/lib/Pages/configurations/index.d.ts +6 -6
- package/lib/Pages/core/auth.module.d.ts +8 -8
- package/lib/Pages/core/authentication/admin.guard.d.ts +9 -9
- package/lib/Pages/core/authentication/auth.guard.d.ts +14 -14
- package/lib/Pages/core/authentication/auth.service.d.ts +35 -35
- package/lib/Pages/departments/department/department.component.d.ts +66 -68
- package/lib/Pages/departments/department-info/department-info.component.d.ts +58 -60
- package/lib/Pages/departments/departments-routing.module.d.ts +7 -7
- package/lib/Pages/departments/departments.component.d.ts +8 -8
- package/lib/Pages/departments/departments.module.d.ts +21 -21
- package/lib/Pages/documents/{add/add.component.d.ts → add-document/add-document.component.d.ts} +40 -40
- package/lib/Pages/documents/document-master-layouts/document-master-layouts.component.d.ts +51 -53
- package/lib/Pages/documents/document-template-info/document-template-info.component.d.ts +67 -67
- package/lib/Pages/documents/document-templates/document-templates.component.d.ts +87 -89
- package/lib/Pages/documents/documents.component.d.ts +8 -8
- package/lib/Pages/documents/documents.module.d.ts +27 -27
- package/lib/Pages/documents/documents.routing.d.ts +7 -7
- package/lib/Pages/documents/{edit/edit.component.d.ts → edit-document/edit-document.component.d.ts} +42 -42
- package/lib/Pages/documents/edit-document-template/edit-document-template.component.d.ts +39 -39
- package/lib/Pages/empty-data/empty-data.component.d.ts +14 -14
- package/lib/Pages/empty-data/empty-data.module.d.ts +8 -8
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +69 -71
- package/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.d.ts +23 -23
- package/lib/Pages/helpCenter/help-center-routing.module.d.ts +7 -7
- package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +65 -67
- package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +64 -66
- package/lib/Pages/helpCenter/help-center.module.d.ts +25 -25
- package/lib/Pages/helpCenter/help-centers.component.d.ts +8 -8
- package/lib/Pages/home/filter-pipe.d.ts +7 -7
- package/lib/Pages/home/home.component.d.ts +19 -19
- package/lib/Pages/home/home.module.d.ts +14 -14
- package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +86 -88
- package/lib/Pages/impersonation-rules/impersonation-rules.module.d.ts +19 -19
- package/lib/Pages/jobs/jobs/jobs.component.d.ts +76 -77
- package/lib/Pages/jobs/jobs.module.d.ts +17 -17
- package/lib/Pages/license/license/license.component.d.ts +59 -59
- package/lib/Pages/license/license.module.d.ts +15 -15
- package/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.d.ts +53 -53
- package/lib/Pages/localizations/localizations.component.d.ts +108 -110
- package/lib/Pages/localizations/localizations.module.d.ts +18 -18
- package/lib/Pages/logs/log/log.component.d.ts +34 -34
- package/lib/Pages/logs/logs-routing.module.d.ts +7 -7
- package/lib/Pages/logs/logs.component.d.ts +8 -8
- package/lib/Pages/logs/logs.module.d.ts +20 -20
- package/lib/Pages/lookups/lookup/lookup.component.d.ts +83 -85
- package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +58 -60
- package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +84 -86
- package/lib/Pages/lookups/lookups-routing.module.d.ts +7 -7
- package/lib/Pages/lookups/lookups.component.d.ts +8 -8
- package/lib/Pages/lookups/lookups.module.d.ts +24 -24
- package/lib/Pages/notifications/{add/add.component.d.ts → add-notification/add-notification.component.d.ts} +33 -33
- package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +43 -43
- package/lib/Pages/notifications/{edit/edit.component.d.ts → edit-notification/edit-notification.component.d.ts} +35 -35
- package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +37 -37
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +51 -53
- package/lib/Pages/notifications/notifications-routing.module.d.ts +7 -7
- package/lib/Pages/notifications/notifications.component.d.ts +8 -8
- package/lib/Pages/notifications/notifications.module.d.ts +28 -28
- package/lib/Pages/notifications/template-info/template-info.component.d.ts +86 -86
- package/lib/Pages/notifications/templates/templates.component.d.ts +100 -102
- package/lib/Pages/providers/provider/provider.component.d.ts +118 -120
- package/lib/Pages/providers/providers-routing.module.d.ts +7 -7
- package/lib/Pages/providers/providers.component.d.ts +8 -8
- package/lib/Pages/providers/providers.module.d.ts +21 -21
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +73 -75
- package/lib/Pages/publicHolidays/public-holidays-routing.module.d.ts +7 -7
- package/lib/Pages/publicHolidays/public-holidays.component.d.ts +8 -8
- package/lib/Pages/publicHolidays/public-holidays.module.d.ts +21 -21
- package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +56 -58
- package/lib/Pages/roles/permissions/permissions.component.d.ts +63 -65
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +67 -69
- package/lib/Pages/roles/roles-routing.module.d.ts +7 -7
- package/lib/Pages/roles/roles.component.d.ts +8 -8
- package/lib/Pages/roles/roles.module.d.ts +24 -24
- package/lib/Pages/sectors/sector/sector.component.d.ts +62 -64
- package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +60 -62
- package/lib/Pages/sectors/{department-info/department-info.component.d.ts → sectors-department-info/sectors-department-info.component.d.ts} +61 -63
- package/lib/Pages/sectors/sectors-routing.module.d.ts +7 -7
- package/lib/Pages/sectors/sectors.component.d.ts +8 -8
- package/lib/Pages/sectors/sectors.module.d.ts +23 -23
- package/lib/Pages/shared/Enums/ADType.d.ts +4 -4
- package/lib/Pages/shared/Enums/Enums.d.ts +47 -47
- package/lib/Pages/shared/Enums/ProviderType.d.ts +5 -5
- package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -10
- package/lib/Pages/shared/Enums/configuration/ConditionRHSType.d.ts +4 -4
- package/lib/Pages/shared/Enums/configuration/authentecation-configuration.d.ts +15 -15
- package/lib/Pages/shared/Pipes/survey-date.pipe.d.ts +12 -12
- package/lib/Pages/shared/Services/AccountService.service.d.ts +21 -21
- package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/AnonymousLayoutService.service.d.ts +17 -17
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +20 -20
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.d.ts +15 -15
- package/lib/Pages/shared/Services/DocumentTemplateService.service.d.ts +26 -26
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +15 -15
- package/lib/Pages/shared/Services/ErrorService.service.d.ts +8 -8
- package/lib/Pages/shared/Services/GlobalErrorHandler.service.d.ts +10 -10
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/HttpErrorInterceptor.service.d.ts +12 -12
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/JobsService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +12 -12
- package/lib/Pages/shared/Services/LogsService.d.ts +10 -10
- package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +14 -14
- package/lib/Pages/shared/Services/LookupService.service.d.ts +25 -25
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +19 -19
- package/lib/Pages/shared/Services/PermissionsService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +16 -16
- package/lib/Pages/shared/Services/SectorService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +34 -34
- package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +19 -19
- package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/WorkflowService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/data.service.d.ts +9 -9
- package/lib/Pages/shared/Services/injectionModuleService.service.d.ts +50 -50
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +28 -28
- package/lib/Pages/shared/Services/provider.service.d.ts +25 -25
- package/lib/Pages/shared/Services/survey-question.service.d.ts +19 -19
- package/lib/Pages/shared/Services/survey.service.d.ts +38 -38
- package/lib/Pages/shared/Services/userService.service.d.ts +29 -29
- package/lib/Pages/shared/base.service.d.ts +4 -4
- package/lib/Pages/shared/components/AdDirective.d.ts +8 -8
- package/lib/Pages/shared/components/external-url/external-url.component.d.ts +61 -61
- package/lib/Pages/shared/components/no-results/no-results.component.d.ts +10 -10
- package/lib/Pages/shared/components/survey/add-survey/add-survey.component.d.ts +40 -40
- package/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.d.ts +43 -43
- package/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.d.ts +83 -83
- package/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.d.ts +84 -84
- package/lib/Pages/shared/components/survey/survey-info/preview/preview.component.d.ts +40 -40
- package/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.d.ts +31 -31
- package/lib/Pages/shared/components/survey/survey-info/result-question/result.component.d.ts +27 -27
- package/lib/Pages/shared/components/survey/survey-info/survey-info.component.d.ts +119 -119
- package/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.d.ts +39 -39
- package/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.d.ts +32 -32
- package/lib/Pages/shared/components/survey/survey.component.d.ts +65 -65
- package/lib/Pages/shared/components/survey-form/survey-form.component.d.ts +41 -41
- package/lib/Pages/shared/components/survey-form-item/survey-form-item.component.d.ts +23 -23
- package/lib/Pages/shared/components/survey-layout/survey-layout.component.d.ts +8 -8
- package/lib/Pages/shared/config/environment.d.ts +1 -1
- package/lib/Pages/shared/constants.d.ts +129 -129
- package/lib/Pages/shared/filter/filter.component.d.ts +8 -8
- package/lib/Pages/shared/models/ADModels/ADMappingModel.d.ts +6 -6
- package/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.d.ts +28 -28
- package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -3
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +64 -64
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +9 -9
- package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +4 -4
- package/lib/Pages/shared/models/DocumentsModels/DocumentExportDTO.d.ts +8 -8
- package/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.d.ts +16 -16
- package/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.d.ts +13 -13
- package/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.d.ts +7 -7
- package/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.d.ts +17 -17
- package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +9 -9
- package/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.d.ts +15 -15
- package/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.d.ts +5 -5
- package/lib/Pages/shared/models/JobModels/JobCountsModel.d.ts +8 -8
- package/lib/Pages/shared/models/LicenseModel/LicenseModel.d.ts +5 -5
- package/lib/Pages/shared/models/LocalizationModels/EditResourceModel.d.ts +7 -7
- package/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.d.ts +9 -9
- package/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.d.ts +5 -5
- package/lib/Pages/shared/models/Lookups/LookupGroupModel.d.ts +5 -5
- package/lib/Pages/shared/models/Lookups/LookupItem.d.ts +13 -13
- package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +13 -13
- package/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.d.ts +15 -15
- package/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.d.ts +8 -8
- package/lib/Pages/shared/models/NotificationsModels/TemplateDTO.d.ts +22 -22
- package/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.d.ts +11 -11
- package/lib/Pages/shared/models/PermissionsModels/PermissionModel.d.ts +8 -8
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.d.ts +10 -10
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +4 -4
- package/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.d.ts +6 -6
- package/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.d.ts +7 -7
- package/lib/Pages/shared/models/ProviderModels/ProviderAttributeModel.d.ts +7 -7
- package/lib/Pages/shared/models/ProviderModels/ProviderModel.d.ts +13 -13
- package/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.d.ts +6 -6
- package/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.d.ts +15 -15
- package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +4 -4
- package/lib/Pages/shared/models/SectorModels/SectorModel.d.ts +6 -6
- package/lib/Pages/shared/models/SurveyModels/DeleteSurveyDTO.d.ts +3 -3
- package/lib/Pages/shared/models/SurveyModels/add-survey-submissio.d.ts +21 -21
- package/lib/Pages/shared/models/SurveyModels/add-survey.d.ts +18 -18
- package/lib/Pages/shared/models/SurveyModels/model.d.ts +3 -3
- package/lib/Pages/shared/models/SurveyModels/survey-field-options.d.ts +24 -24
- package/lib/Pages/shared/models/SurveyModels/survey-filed-value.d.ts +22 -22
- package/lib/Pages/shared/models/SurveyModels/survey-form-options.d.ts +8 -8
- package/lib/Pages/shared/models/SurveyModels/survey-publish.d.ts +15 -15
- package/lib/Pages/shared/models/SurveyModels/survey-question-option.d.ts +9 -9
- package/lib/Pages/shared/models/SurveyModels/survey-question.d.ts +21 -21
- package/lib/Pages/shared/models/SurveyModels/survey-utils.d.ts +5 -5
- package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -10
- package/lib/Pages/shared/models/UserModels/AddUserModel.d.ts +33 -33
- package/lib/Pages/shared/models/UserModels/DropdownsResponseModel.d.ts +9 -9
- package/lib/Pages/shared/models/UserModels/EditUserModel.d.ts +25 -25
- package/lib/Pages/shared/models/UserModels/IdentityModel.d.ts +9 -9
- package/lib/Pages/shared/models/UserModels/UserSearchParamDTO.d.ts +8 -8
- package/lib/Pages/shared/models/UserModels/UsersIDRequestModel.d.ts +3 -3
- package/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.d.ts +9 -9
- package/lib/Pages/shared/models/WorkflowModels/WFActivityModel.d.ts +40 -40
- package/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.d.ts +13 -13
- package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -13
- package/lib/Pages/shared/models/WorkflowModels/WFCreationModel.d.ts +10 -10
- package/lib/Pages/shared/models/WorkflowModels/WFVariableModel.d.ts +23 -23
- package/lib/Pages/shared/models/user.registration.d.ts +6 -6
- package/lib/Pages/shared/modules/public-survey.module.d.ts +15 -15
- package/lib/Pages/shared/modules/survey-routing.module.d.ts +7 -7
- package/lib/Pages/shared/modules/survey.module.d.ts +35 -35
- package/lib/Pages/shared/shared.module.d.ts +8 -8
- package/lib/Pages/shared/stylesbundle.service.d.ts +9 -9
- package/lib/Pages/start/index/index.component.d.ts +15 -15
- package/lib/Pages/start/start-routing.module.d.ts +7 -7
- package/lib/Pages/start/start.module.d.ts +11 -11
- package/lib/Pages/users/users.component.d.ts +138 -139
- package/lib/Pages/users/users.module.d.ts +18 -18
- package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -77
- package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +82 -82
- package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -81
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +126 -128
- package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -41
- package/lib/Pages/workflows/workflow/workflow.component.d.ts +54 -55
- package/lib/Pages/workflows/workflows-routing.module.d.ts +7 -7
- package/lib/Pages/workflows/workflows.component.d.ts +8 -8
- package/lib/Pages/workflows/workflows.module.d.ts +27 -27
- package/lib/_metronic/configs/default-layout.config.d.ts +139 -139
- package/lib/_metronic/core/_utils/DomHelpers.d.ts +26 -26
- package/lib/_metronic/core/_utils/ElementAnimateUtil.d.ts +13 -13
- package/lib/_metronic/core/_utils/EventHandlerUtil.d.ts +20 -20
- package/lib/_metronic/core/_utils/_DOMEventHandlerUtil.d.ts +6 -6
- package/lib/_metronic/core/_utils/_DataUtil.d.ts +8 -8
- package/lib/_metronic/core/_utils/_ElementStyleUtil.d.ts +5 -5
- package/lib/_metronic/core/_utils/_TypesHelpers.d.ts +10 -10
- package/lib/_metronic/core/_utils/models/OffsetModel.d.ts +4 -4
- package/lib/_metronic/core/_utils/models/ViewPortModel.d.ts +4 -4
- package/lib/_metronic/core/components/MenuComponent.d.ts +88 -88
- package/lib/_metronic/core/components/_CookieComponent.d.ts +25 -25
- package/lib/_metronic/core/components/_DrawerComponent.d.ts +49 -49
- package/lib/_metronic/core/components/_ScrollComponent.d.ts +31 -31
- package/lib/_metronic/core/components/_ScrollTopComponent.d.ts +24 -24
- package/lib/_metronic/core/components/_ToggleComponent.d.ts +36 -36
- package/lib/_metronic/core/services/layout-init.service.d.ts +18 -18
- package/lib/_metronic/core/services/layout.service.d.ts +38 -38
- package/lib/_metronic/core/services/page-info.service.d.ts +32 -32
- package/lib/masterlayout-routing.module.d.ts +11 -13
- package/lib/masterlayout.component.d.ts +63 -63
- package/lib/masterlayout.module.d.ts +34 -34
- package/package.json +25 -30
- package/public-api.d.ts +41 -41
- package/src/lib/assets/images/menu/Tools.svg +10 -4
- package/src/lib/assets/images/menu/authentication.svg +9 -0
- package/src/lib/assets/sass/style-rtl.scss +3 -3
- package/src/lib/assets/sass/style.scss +3 -3
- package/bnsights-bbsf-admin-portal-1.1.2.tgz +0 -0
- package/esm2020/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +0 -421
- package/esm2020/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +0 -528
- package/esm2020/lib/Pages/ActiveDirectories/active-directory.module.mjs +0 -108
- package/esm2020/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +0 -23
- package/esm2020/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +0 -100
- package/esm2020/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +0 -330
- package/esm2020/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +0 -157
- package/esm2020/lib/Pages/configurations/configuration/configuration.component.mjs +0 -801
- package/esm2020/lib/Pages/configurations/configurations.module.mjs +0 -104
- package/esm2020/lib/Pages/core/authentication/admin.guard.mjs +0 -17
- package/esm2020/lib/Pages/core/authentication/auth.service.mjs +0 -147
- package/esm2020/lib/Pages/departments/department/department.component.mjs +0 -220
- package/esm2020/lib/Pages/departments/department-info/department-info.component.mjs +0 -185
- package/esm2020/lib/Pages/departments/departments.module.mjs +0 -94
- package/esm2020/lib/Pages/documents/add/add.component.mjs +0 -136
- package/esm2020/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +0 -148
- package/esm2020/lib/Pages/documents/document-templates/document-templates.component.mjs +0 -437
- package/esm2020/lib/Pages/documents/documents.module.mjs +0 -114
- package/esm2020/lib/Pages/documents/documents.routing.mjs +0 -37
- package/esm2020/lib/Pages/documents/edit/edit.component.mjs +0 -169
- package/esm2020/lib/Pages/helpCenter/help-center/help-center.component.mjs +0 -294
- package/esm2020/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +0 -43
- package/esm2020/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +0 -242
- package/esm2020/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +0 -243
- package/esm2020/lib/Pages/helpCenter/help-center.module.mjs +0 -98
- package/esm2020/lib/Pages/home/home.component.mjs +0 -153
- package/esm2020/lib/Pages/home/home.module.mjs +0 -48
- package/esm2020/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +0 -443
- package/esm2020/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +0 -95
- package/esm2020/lib/Pages/jobs/jobs/jobs.component.mjs +0 -223
- package/esm2020/lib/Pages/jobs/jobs.module.mjs +0 -87
- package/esm2020/lib/Pages/license/license.module.mjs +0 -71
- package/esm2020/lib/Pages/localizations/localizations.component.mjs +0 -516
- package/esm2020/lib/Pages/localizations/localizations.module.mjs +0 -79
- package/esm2020/lib/Pages/logs/logs.module.mjs +0 -87
- package/esm2020/lib/Pages/lookups/lookup/lookup.component.mjs +0 -367
- package/esm2020/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +0 -187
- package/esm2020/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +0 -297
- package/esm2020/lib/Pages/lookups/lookups.module.mjs +0 -100
- package/esm2020/lib/Pages/notifications/add/add.component.mjs +0 -104
- package/esm2020/lib/Pages/notifications/edit/edit.component.mjs +0 -133
- package/esm2020/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +0 -148
- package/esm2020/lib/Pages/notifications/notifications-routing.module.mjs +0 -39
- package/esm2020/lib/Pages/notifications/notifications.module.mjs +0 -101
- package/esm2020/lib/Pages/notifications/templates/templates.component.mjs +0 -495
- package/esm2020/lib/Pages/providers/provider/provider.component.mjs +0 -615
- package/esm2020/lib/Pages/providers/providers.module.mjs +0 -91
- package/esm2020/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +0 -334
- package/esm2020/lib/Pages/publicHolidays/public-holidays.module.mjs +0 -94
- package/esm2020/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +0 -187
- package/esm2020/lib/Pages/roles/permissions/permissions.component.mjs +0 -226
- package/esm2020/lib/Pages/roles/permissionsets/permissionsets.component.mjs +0 -277
- package/esm2020/lib/Pages/roles/roles.module.mjs +0 -105
- package/esm2020/lib/Pages/sectors/department-info/department-info.component.mjs +0 -187
- package/esm2020/lib/Pages/sectors/sector/sector.component.mjs +0 -193
- package/esm2020/lib/Pages/sectors/sector-info/sector-info.component.mjs +0 -180
- package/esm2020/lib/Pages/sectors/sectors.module.mjs +0 -96
- package/esm2020/lib/Pages/shared/Enums/WFVariableDataType.mjs +0 -14
- package/esm2020/lib/Pages/shared/Services/injectionModuleService.service.mjs +0 -163
- package/esm2020/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +0 -192
- package/esm2020/lib/Pages/shared/components/survey-form/survey-form.component.mjs +0 -696
- package/esm2020/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +0 -84
- package/esm2020/lib/Pages/shared/constants.mjs +0 -130
- package/esm2020/lib/Pages/shared/models/SurveyModels/survey-utils.mjs +0 -8
- package/esm2020/lib/Pages/shared/modules/public-survey.module.mjs +0 -68
- package/esm2020/lib/Pages/shared/modules/survey.module.mjs +0 -126
- package/esm2020/lib/Pages/shared/shared.module.mjs +0 -31
- package/esm2020/lib/Pages/users/users.component.mjs +0 -806
- package/esm2020/lib/Pages/users/users.module.mjs +0 -86
- package/esm2020/lib/Pages/workflows/tabs/tabs.component.mjs +0 -793
- package/esm2020/lib/Pages/workflows/workflow/workflow.component.mjs +0 -209
- package/esm2020/lib/Pages/workflows/workflows.module.mjs +0 -103
- package/esm2020/lib/_metronic/core/_utils/EventHandlerUtil.mjs +0 -90
- package/esm2020/lib/_metronic/core/_utils/_DOMEventHandlerUtil.mjs +0 -49
- package/esm2020/lib/_metronic/core/_utils/_DataUtil.mjs +0 -48
- package/esm2020/lib/_metronic/core/components/_DrawerComponent.mjs +0 -290
- package/esm2020/lib/_metronic/core/components/_ScrollTopComponent.mjs +0 -113
- package/esm2020/lib/_metronic/core/components/_ToggleComponent.mjs +0 -157
- package/esm2020/lib/_metronic/core/services/page-info.service.mjs +0 -119
- package/esm2020/lib/masterlayout-routing.module.mjs +0 -45
- package/esm2020/lib/masterlayout.module.mjs +0 -188
- package/fesm2015/bnsights-bbsf-admin-portal.mjs +0 -27293
- package/fesm2015/bnsights-bbsf-admin-portal.mjs.map +0 -1
- package/fesm2020/bnsights-bbsf-admin-portal.mjs.map +0 -1
- package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +0 -12
|
@@ -1,615 +0,0 @@
|
|
|
1
|
-
import { Component, ViewChild } from '@angular/core';
|
|
2
|
-
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { CheckBoxOptions, ControlLayout, DropdownOptions, FilterItem, FilterType, InputType, PagingOptions, RadioButtonOptions, TextAreaOptions, TextBoxOptions, RadioButtonItem, FormOptions, ConfirmationModalOptions, PagingActionMode, PhoneOptions } from '@bnsights/bbsf-controls';
|
|
4
|
-
import { ProviderModel } from '../../shared/models/ProviderModels/ProviderModel';
|
|
5
|
-
import { ProviderAttributeModel } from '../../shared/models/ProviderModels/ProviderAttributeModel';
|
|
6
|
-
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
7
|
-
import { saveAs } from 'file-saver';
|
|
8
|
-
import { ProviderType } from '../../shared/Enums/ProviderType';
|
|
9
|
-
import { EmailProviderTesterModel } from '../../shared/models/ProviderModels/EmailProviderTesterModel';
|
|
10
|
-
import { SMSProviderTesterModel } from '../../shared/models/ProviderModels/SMSProviderTesterModel';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "../../shared/Services/provider.service";
|
|
13
|
-
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
14
|
-
import * as i3 from "@bnsights/bbsf-utilities";
|
|
15
|
-
import * as i4 from "../../../_metronic/core/services/page-info.service";
|
|
16
|
-
import * as i5 from "@angular/common";
|
|
17
|
-
import * as i6 from "@angular/forms";
|
|
18
|
-
import * as i7 from "ng-block-ui";
|
|
19
|
-
import * as i8 from "@bnsights/bbsf-controls";
|
|
20
|
-
import * as i9 from "@angular/material/menu";
|
|
21
|
-
import * as i10 from "ng-inline-svg";
|
|
22
|
-
import * as i11 from "../../empty-data/empty-data.component";
|
|
23
|
-
export class ProviderComponent {
|
|
24
|
-
constructor(ProviderService, modalService, authService, bbsfTranslateService, utilityService, pageInfoService, requestHandlerService) {
|
|
25
|
-
this.ProviderService = ProviderService;
|
|
26
|
-
this.modalService = modalService;
|
|
27
|
-
this.authService = authService;
|
|
28
|
-
this.bbsfTranslateService = bbsfTranslateService;
|
|
29
|
-
this.utilityService = utilityService;
|
|
30
|
-
this.pageInfoService = pageInfoService;
|
|
31
|
-
this.requestHandlerService = requestHandlerService;
|
|
32
|
-
//Page requirements
|
|
33
|
-
this.ShowPageContent = false;
|
|
34
|
-
this.ApiUrl = "/api/admin/Provider/";
|
|
35
|
-
//Filter and paging components
|
|
36
|
-
this.ProviderForm = new FormGroup({});
|
|
37
|
-
this.IsFilterLoaded = false;
|
|
38
|
-
this.IsFilterDataLoaded = false;
|
|
39
|
-
this.ProviderPagingResult = [];
|
|
40
|
-
this.clientSidePagingResult = [];
|
|
41
|
-
//Required lists
|
|
42
|
-
this.ProviderTypesFilterList = [];
|
|
43
|
-
this.SortingFilterList = [];
|
|
44
|
-
this.TypesList = [];
|
|
45
|
-
this.LoadedProviders = [];
|
|
46
|
-
this.OrganizationsList = [];
|
|
47
|
-
//Provider attributes
|
|
48
|
-
this.ProviderAttributesOptions = [];
|
|
49
|
-
this.ProviderAttributesCount = 0;
|
|
50
|
-
this.IsAttributesLoaded = false;
|
|
51
|
-
this.showNoAttributesError = false;
|
|
52
|
-
//Add Model Controls
|
|
53
|
-
this.AddProviderForm = new FormGroup({});
|
|
54
|
-
////Edit Model Controls
|
|
55
|
-
this.EditProviderForm = new FormGroup({});
|
|
56
|
-
this.EditProviderAttributesOptions = [];
|
|
57
|
-
this.EditProviderAttributesCount = 0;
|
|
58
|
-
this.deleteControlLoaded = false;
|
|
59
|
-
//Select Default Providers
|
|
60
|
-
this.DefaultProviderForm = new FormGroup({});
|
|
61
|
-
this.DefaultProviders = [];
|
|
62
|
-
//Test Provider functions
|
|
63
|
-
this.emailProviderType = ProviderType.Emails;
|
|
64
|
-
this.smsProviderType = ProviderType.SMS;
|
|
65
|
-
//Test Email Model controls
|
|
66
|
-
this.testEmailForm = new FormGroup({});
|
|
67
|
-
//Test SMS Model controls
|
|
68
|
-
this.testSMSForm = new FormGroup({});
|
|
69
|
-
this.getAddProviderModel = () => {
|
|
70
|
-
let paramArray = [];
|
|
71
|
-
let ResultModel = this.AddProviderForm.value;
|
|
72
|
-
let AddModel = new ProviderModel();
|
|
73
|
-
AddModel.ProviderName = ResultModel.ProviderName;
|
|
74
|
-
AddModel.Description = ResultModel.Description;
|
|
75
|
-
AddModel.OrganizationID_GUID = ResultModel.OrganizationID_GUID;
|
|
76
|
-
AddModel.ProviderTypeItemID_GUID = this.AddProviderTypeItemID_GUID;
|
|
77
|
-
AddModel.TypeFullName = ResultModel.TypeFullName;
|
|
78
|
-
for (let j = 0; j < this.ProviderAttributesCount; j++) {
|
|
79
|
-
let addAttributeName = ResultModel["AddAttributeName" + j];
|
|
80
|
-
if (addAttributeName == undefined)
|
|
81
|
-
continue;
|
|
82
|
-
let addAttributeValue = ResultModel["AddAttributeValue" + j];
|
|
83
|
-
let addAttributeEncrypted = ResultModel["AddAttributeEncrypted" + j];
|
|
84
|
-
let providerAttr = new ProviderAttributeModel();
|
|
85
|
-
providerAttr.Name = addAttributeName;
|
|
86
|
-
providerAttr.Value = addAttributeValue;
|
|
87
|
-
providerAttr.IsEncrypted = addAttributeEncrypted;
|
|
88
|
-
AddModel.ProviderAttributes.push(providerAttr);
|
|
89
|
-
}
|
|
90
|
-
paramArray.push(AddModel);
|
|
91
|
-
return paramArray;
|
|
92
|
-
};
|
|
93
|
-
this.getAddProviderFunction = (AddModel) => {
|
|
94
|
-
if (AddModel.ProviderAttributes.length > 0) {
|
|
95
|
-
this.showNoAttributesError = false;
|
|
96
|
-
return this.ProviderService.AddProvider(AddModel);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
this.showNoAttributesError = true;
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
this.getEditProviderModel = () => {
|
|
104
|
-
let paramArray = [];
|
|
105
|
-
let ResultModel = this.EditProviderForm.value;
|
|
106
|
-
let EditModel = new ProviderModel();
|
|
107
|
-
EditModel.ID_GUID = this.ProviderId;
|
|
108
|
-
EditModel.ProviderName = ResultModel.ProviderName; //(##1)
|
|
109
|
-
EditModel.Description = ResultModel.Description;
|
|
110
|
-
EditModel.TypeFullName = ResultModel.TypeFullName;
|
|
111
|
-
EditModel.ProviderTypeItemID_GUID = this.EditProviderTypeItemID_GUID;
|
|
112
|
-
EditModel.OrganizationID_GUID = this.EditProviderOrganizationID_GUID;
|
|
113
|
-
for (let j = 0; j < this.EditProviderAttributesCount; j++) {
|
|
114
|
-
let editAttributeName = ResultModel["EditAttributeName" + j];
|
|
115
|
-
if (editAttributeName == undefined)
|
|
116
|
-
continue;
|
|
117
|
-
let editAttributeValue = ResultModel["EditAttributeValue" + j];
|
|
118
|
-
let editAttributeEncrypted = ResultModel["EditAttributeEncrypted" + j];
|
|
119
|
-
let providerAttr = new ProviderAttributeModel();
|
|
120
|
-
providerAttr.Name = editAttributeName;
|
|
121
|
-
providerAttr.Value = editAttributeValue;
|
|
122
|
-
providerAttr.IsEncrypted = editAttributeEncrypted;
|
|
123
|
-
EditModel.ProviderAttributes.push(providerAttr);
|
|
124
|
-
}
|
|
125
|
-
paramArray.push(EditModel);
|
|
126
|
-
return paramArray;
|
|
127
|
-
};
|
|
128
|
-
this.getEditProviderFunction = (EditModel) => {
|
|
129
|
-
if (EditModel.ProviderAttributes.length > 0) {
|
|
130
|
-
this.showNoAttributesError = false;
|
|
131
|
-
return this.ProviderService.EditProvider(EditModel);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
this.showNoAttributesError = true;
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
this.deleteProvider = (id) => {
|
|
139
|
-
return this.ProviderService.DeleteProvider(id);
|
|
140
|
-
};
|
|
141
|
-
this.getDefaultProviderModel = () => {
|
|
142
|
-
let paramArray = [];
|
|
143
|
-
let ResultModel = this.DefaultProviderForm.value;
|
|
144
|
-
let defaultProvidersModel = [];
|
|
145
|
-
for (let i = 0; i < this.DefaultProviders.length; i++) {
|
|
146
|
-
let providerID = this.DefaultProviders[i].ID;
|
|
147
|
-
let selectedDefProviderID = ResultModel["providerOption_" + providerID];
|
|
148
|
-
let defProvideModel = {
|
|
149
|
-
ProviderTypeItemID_GUID: providerID,
|
|
150
|
-
SelectedProviderID_GUID: selectedDefProviderID,
|
|
151
|
-
ProviderTypeItemName: "",
|
|
152
|
-
Providers: []
|
|
153
|
-
};
|
|
154
|
-
defaultProvidersModel.push(defProvideModel);
|
|
155
|
-
}
|
|
156
|
-
paramArray.push(defaultProvidersModel);
|
|
157
|
-
return paramArray;
|
|
158
|
-
};
|
|
159
|
-
this.getDefaultProviderFunction = (DefaultProviderModel) => {
|
|
160
|
-
return this.ProviderService.SubmitDefaultProviders(DefaultProviderModel);
|
|
161
|
-
};
|
|
162
|
-
this.getTestEmailModel = () => {
|
|
163
|
-
let paramArray = [];
|
|
164
|
-
let resultModel = this.testEmailForm.value;
|
|
165
|
-
let testEmailModel = new EmailProviderTesterModel();
|
|
166
|
-
testEmailModel.ProviderID = this.testEmailProviderId;
|
|
167
|
-
testEmailModel.ProviderName = this.testEmailProviderName;
|
|
168
|
-
testEmailModel.ToEmail = resultModel.emailTo;
|
|
169
|
-
testEmailModel.Subject = resultModel.emailSubject;
|
|
170
|
-
testEmailModel.Body = resultModel.emailBody;
|
|
171
|
-
paramArray.push(testEmailModel);
|
|
172
|
-
return paramArray;
|
|
173
|
-
};
|
|
174
|
-
this.getTestEmailFunction = (testEmailModel) => {
|
|
175
|
-
return this.ProviderService.TestEmail(testEmailModel);
|
|
176
|
-
};
|
|
177
|
-
this.getTestSMSModel = () => {
|
|
178
|
-
let paramArray = [];
|
|
179
|
-
let resultModel = this.testSMSForm.value;
|
|
180
|
-
let testSMSModel = new SMSProviderTesterModel();
|
|
181
|
-
let internationalNumber = null;
|
|
182
|
-
if (resultModel.smsTo != null) {
|
|
183
|
-
internationalNumber = resultModel.smsTo.internationalNumber;
|
|
184
|
-
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
185
|
-
}
|
|
186
|
-
testSMSModel.ProviderID = this.testSMSProviderId;
|
|
187
|
-
testSMSModel.ProviderName = this.testSMSProviderName;
|
|
188
|
-
testSMSModel.ToMobileNumber = internationalNumber;
|
|
189
|
-
testSMSModel.Message = resultModel.smsBody;
|
|
190
|
-
paramArray.push(testSMSModel);
|
|
191
|
-
return paramArray;
|
|
192
|
-
};
|
|
193
|
-
this.getTestSMSFunction = (testSMSModel) => {
|
|
194
|
-
return this.ProviderService.TestSMS(testSMSModel);
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
async ngOnInit() {
|
|
198
|
-
this.ShowPageContent = true;
|
|
199
|
-
//Page header (breadcrumb and title)
|
|
200
|
-
PageInfoService.PageTitle = this.utilityService.getResourceValue("ServiceProviders");
|
|
201
|
-
PageInfoService.PageBreadcrumbs = [
|
|
202
|
-
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
203
|
-
{ title: '', path: '', isSeparator: true, isActive: false }
|
|
204
|
-
];
|
|
205
|
-
this.pageInfoService.calculateTitle();
|
|
206
|
-
this.pageInfoService.calculateBreadcrumbs();
|
|
207
|
-
//on lang changed
|
|
208
|
-
this.bbsfTranslateService.onLangChange.subscribe((event) => {
|
|
209
|
-
this.ShowPageContent = false;
|
|
210
|
-
this.ngOnInit();
|
|
211
|
-
});
|
|
212
|
-
//initialize page
|
|
213
|
-
this.initializePage();
|
|
214
|
-
}
|
|
215
|
-
//Initialize filters and paging
|
|
216
|
-
initializePage() {
|
|
217
|
-
// TextBox init
|
|
218
|
-
this.searchTextBox = new TextBoxOptions();
|
|
219
|
-
this.searchTextBox.Name = "searchTextBox";
|
|
220
|
-
this.searchTextBox.Type = InputType.Text;
|
|
221
|
-
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
222
|
-
this.searchTextBox.HideLabel = true;
|
|
223
|
-
this.TextInputFilter = new FilterItem();
|
|
224
|
-
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
225
|
-
this.TextInputFilter.ActionParameterName = "searchText";
|
|
226
|
-
this.TextInputFilter.IsFormControl = true;
|
|
227
|
-
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
228
|
-
// Provider Types Filter Init
|
|
229
|
-
this.providerTypesFilterOption = new DropdownOptions();
|
|
230
|
-
this.providerTypesFilterOption.Name = "providerTypesFilterOption";
|
|
231
|
-
this.providerTypesFilterOption.LabelKey = "ProviderTypes";
|
|
232
|
-
this.providerTypesFilter = new FilterItem();
|
|
233
|
-
this.providerTypesFilter.FormControlName = "providerTypesFilterOption";
|
|
234
|
-
this.providerTypesFilter.ActionParameterName = "types";
|
|
235
|
-
this.providerTypesFilter.IsFormControl = true;
|
|
236
|
-
this.providerTypesFilter.FilterType = FilterType.DropdownList;
|
|
237
|
-
this.sortingFilterOption = new DropdownOptions();
|
|
238
|
-
this.sortingFilterOption.Name = "sortingFilterOption";
|
|
239
|
-
this.sortingFilterOption.LabelKey = "Sort";
|
|
240
|
-
this.sortingFilterOption.SingleSelection = true;
|
|
241
|
-
this.sortingFilterOption.Placeholder = "";
|
|
242
|
-
this.sortingFilter = new FilterItem();
|
|
243
|
-
this.sortingFilter.FormControlName = "sortingFilterOption";
|
|
244
|
-
this.sortingFilter.ActionParameterName = "sortID";
|
|
245
|
-
this.sortingFilter.IsFormControl = true;
|
|
246
|
-
this.sortingFilter.FilterType = FilterType.DropdownList;
|
|
247
|
-
this.ProviderPaging = new PagingOptions();
|
|
248
|
-
this.ProviderPaging.ActionPostURL = this.ApiUrl + 'GetProvidersByFilter';
|
|
249
|
-
this.ProviderPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
|
|
250
|
-
this.ProviderPaging.DropdownFiltersControlNames = ["providerTypesFilterOption", "sortingFilterOption"];
|
|
251
|
-
this.ProviderPaging.Filters = [this.TextInputFilter, this.providerTypesFilter, this.sortingFilter];
|
|
252
|
-
this.ProviderPaging.ValidationToken = this.authService.authorizationHeaderValue();
|
|
253
|
-
this.ProviderPaging.ResetFilterButtonName = "providerFiltersBtn";
|
|
254
|
-
this.IsFilterLoaded = true;
|
|
255
|
-
}
|
|
256
|
-
//Load filters lists
|
|
257
|
-
loadLists() {
|
|
258
|
-
if (!this.IsFilterDataLoaded) {
|
|
259
|
-
this.ProviderService.Loaddropdowns().subscribe((result) => {
|
|
260
|
-
let DropdownLists = result;
|
|
261
|
-
//this.OrganizationsList = DropdownLists.organizations;
|
|
262
|
-
//this.TypesList = DropdownLists.providerTypes;
|
|
263
|
-
this.ProviderTypesFilterList = DropdownLists.providerTypesFilter;
|
|
264
|
-
this.SortingFilterList = DropdownLists.sortingFilterList;
|
|
265
|
-
let providerTypesElement = this.providerTypesDDL;
|
|
266
|
-
let sortingFilterElement = this.sortingFilterDDL;
|
|
267
|
-
providerTypesElement.UpdateDataSource(this.ProviderTypesFilterList);
|
|
268
|
-
sortingFilterElement.UpdateDataSource(this.SortingFilterList);
|
|
269
|
-
this.IsFilterDataLoaded = true;
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
//Paging functions
|
|
274
|
-
setProviderListResult(result) {
|
|
275
|
-
this.ProviderPagingResult = result;
|
|
276
|
-
this.clientSidePagingResult = result;
|
|
277
|
-
this.ShowPageContent = true;
|
|
278
|
-
this.utilityService.stopBlockUI();
|
|
279
|
-
}
|
|
280
|
-
searchClientSide(searchValue) {
|
|
281
|
-
if (searchValue)
|
|
282
|
-
this.clientSidePagingResult = this.clientSidePagingResult.filter(function (item) {
|
|
283
|
-
return item.providerName.toLowerCase().includes(searchValue.toLowerCase());
|
|
284
|
-
});
|
|
285
|
-
else
|
|
286
|
-
this.clientSidePagingResult = this.ProviderPagingResult;
|
|
287
|
-
}
|
|
288
|
-
//AttributesFunction
|
|
289
|
-
setAddProviderAttributes(typeFullName) {
|
|
290
|
-
this.ProviderService.GetProviderAttributes(typeFullName).subscribe((result) => {
|
|
291
|
-
var resultObj = result;
|
|
292
|
-
//Set Provider type id on type change
|
|
293
|
-
this.LoadedProviders = resultObj.loadedProviders;
|
|
294
|
-
let selectedProviderType = this.LoadedProviders.find(obj => {
|
|
295
|
-
return obj.fullName === typeFullName;
|
|
296
|
-
});
|
|
297
|
-
this.AddProviderTypeItemID_GUID = selectedProviderType.providerTypeID_GUID;
|
|
298
|
-
//Set attributes and count
|
|
299
|
-
let attributes = resultObj.model;
|
|
300
|
-
this.ProviderAttributesOptions = [];
|
|
301
|
-
let data = this.getProviderAttributesOptions(attributes, true);
|
|
302
|
-
this.ProviderAttributesOptions = data[0];
|
|
303
|
-
this.ProviderAttributesCount = data[1];
|
|
304
|
-
this.IsAttributesLoaded = true;
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
setEditProviderAttributes(typeFullName) {
|
|
308
|
-
this.ProviderService.GetProviderAttributes(typeFullName).subscribe((result) => {
|
|
309
|
-
var resultObj = result;
|
|
310
|
-
//Set Provider type id on type change
|
|
311
|
-
this.LoadedProviders = resultObj.loadedProviders;
|
|
312
|
-
let selectedProviderType = this.LoadedProviders.find(obj => {
|
|
313
|
-
return obj.fullName === typeFullName;
|
|
314
|
-
});
|
|
315
|
-
this.EditProviderTypeItemID_GUID = selectedProviderType.providerTypeID_GUID;
|
|
316
|
-
//Set attributes and count
|
|
317
|
-
let attributes = resultObj.model;
|
|
318
|
-
this.EditProviderAttributesOptions = [];
|
|
319
|
-
let data = this.getProviderAttributesOptions(attributes, false);
|
|
320
|
-
this.EditProviderAttributesOptions = data[0];
|
|
321
|
-
this.EditProviderAttributesCount = data[1];
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
getProviderAttributesOptions(providerAttributes, isAdd) {
|
|
325
|
-
let attributesOptions = [];
|
|
326
|
-
let attributesCount = 0;
|
|
327
|
-
let actionIndicate = isAdd ? "Add" : "Edit";
|
|
328
|
-
for (let i = 0; i < providerAttributes.length; i++) {
|
|
329
|
-
let objectAttributeOptions = [];
|
|
330
|
-
let isEncrypted = providerAttributes[i].isEncrypted;
|
|
331
|
-
let AttributeName = new TextBoxOptions();
|
|
332
|
-
AttributeName.Name = actionIndicate + "AttributeName" + i;
|
|
333
|
-
AttributeName.HideLabel = true;
|
|
334
|
-
AttributeName.Type = InputType.Text;
|
|
335
|
-
AttributeName.Value = providerAttributes[i].name;
|
|
336
|
-
AttributeName.MaxLength = 100;
|
|
337
|
-
let AttributeValue = new TextBoxOptions();
|
|
338
|
-
AttributeValue.Name = actionIndicate + "AttributeValue" + i;
|
|
339
|
-
AttributeValue.HideLabel = true;
|
|
340
|
-
AttributeValue.Type = isEncrypted ? InputType.Password : InputType.Text;
|
|
341
|
-
AttributeValue.Value = providerAttributes[i].value;
|
|
342
|
-
AttributeValue.RemoveDefaultPasswordValidation = true;
|
|
343
|
-
AttributeValue.MaxLength = 100;
|
|
344
|
-
let AttributeEncrypted = new CheckBoxOptions();
|
|
345
|
-
AttributeEncrypted.Name = actionIndicate + "AttributeEncrypted" + i;
|
|
346
|
-
AttributeEncrypted.Value = providerAttributes[i].isEncrypted;
|
|
347
|
-
objectAttributeOptions.push(AttributeName, AttributeValue, AttributeEncrypted);
|
|
348
|
-
attributesOptions.push(objectAttributeOptions);
|
|
349
|
-
attributesCount += 1;
|
|
350
|
-
}
|
|
351
|
-
return [attributesOptions, attributesCount];
|
|
352
|
-
}
|
|
353
|
-
deleteAttribute(deletedAttribute, isAdd) {
|
|
354
|
-
if (isAdd) {
|
|
355
|
-
let deletedAttrIndex = this.ProviderAttributesOptions.indexOf(deletedAttribute);
|
|
356
|
-
if (deletedAttrIndex !== -1) {
|
|
357
|
-
this.ProviderAttributesOptions.splice(deletedAttrIndex, 1);
|
|
358
|
-
for (var i = 0; i < deletedAttribute.length; i++) {
|
|
359
|
-
this.AddProviderForm.removeControl(deletedAttribute[i].Name);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
let deletedAttrIndex = this.EditProviderAttributesOptions.indexOf(deletedAttribute);
|
|
365
|
-
if (deletedAttrIndex !== -1) {
|
|
366
|
-
this.EditProviderAttributesOptions.splice(deletedAttrIndex, 1);
|
|
367
|
-
for (var i = 0; i < deletedAttribute.length; i++) {
|
|
368
|
-
this.EditProviderForm.removeControl(deletedAttribute[i].Name);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
encryptedChange(isChecked, option, isAdd) {
|
|
374
|
-
let valueAttributeIndicator = isAdd ? "AddAttributeValue" : "EditAttributeValue";
|
|
375
|
-
let realtedValueOption = option.find(obj => {
|
|
376
|
-
return obj.Name.startsWith(valueAttributeIndicator);
|
|
377
|
-
});
|
|
378
|
-
if (isChecked)
|
|
379
|
-
realtedValueOption.Type = InputType.Password;
|
|
380
|
-
else
|
|
381
|
-
realtedValueOption.Type = InputType.Text;
|
|
382
|
-
}
|
|
383
|
-
//Add provider
|
|
384
|
-
showAddProviderModal(addProviderModal) {
|
|
385
|
-
this.showNoAttributesError = false;
|
|
386
|
-
this.utilityService.startBlockUI();
|
|
387
|
-
this.ProviderService.loadAddDropdowns().subscribe((result) => {
|
|
388
|
-
let resultObj = result;
|
|
389
|
-
this.OrganizationsList = resultObj.organizations;
|
|
390
|
-
this.TypesList = resultObj.providerTypes;
|
|
391
|
-
this.ProviderAttributesOptions = [];
|
|
392
|
-
this.ProviderAttributesCount = 0;
|
|
393
|
-
this.IsAttributesLoaded = false;
|
|
394
|
-
this.AddProviderForm = new FormGroup({});
|
|
395
|
-
this.AddProviderFormOptions = new FormOptions();
|
|
396
|
-
this.AddProviderFormOptions.FormGroup = this.AddProviderForm;
|
|
397
|
-
this.AddProviderFormOptions.GetModelFunction = this.getAddProviderModel;
|
|
398
|
-
this.AddProviderFormOptions.ServiceSubmitFunction = this.getAddProviderFunction;
|
|
399
|
-
this.AddProviderFormOptions.PagingReference = this.pagingElement;
|
|
400
|
-
this.AddName = new TextBoxOptions();
|
|
401
|
-
this.AddName.Name = "ProviderName";
|
|
402
|
-
this.AddName.LabelKey = "ProviderName";
|
|
403
|
-
this.AddName.Type = InputType.Text;
|
|
404
|
-
this.AddName.Value = null;
|
|
405
|
-
this.AddName.IsRequired = true;
|
|
406
|
-
this.AddName.MaxLength = 100;
|
|
407
|
-
this.AddDescription = new TextAreaOptions();
|
|
408
|
-
this.AddDescription.Name = "Description";
|
|
409
|
-
this.AddDescription.LabelKey = "ProviderDescription";
|
|
410
|
-
this.AddDescription.Value = null;
|
|
411
|
-
this.AddDescription.MaxLength = 250;
|
|
412
|
-
this.AddOrganizationOptions = new DropdownOptions();
|
|
413
|
-
this.AddOrganizationOptions.Name = "OrganizationID_GUID";
|
|
414
|
-
this.AddOrganizationOptions.LabelKey = "Organization";
|
|
415
|
-
this.AddOrganizationOptions.DataSource = this.OrganizationsList;
|
|
416
|
-
this.AddOrganizationOptions.SingleSelection = true;
|
|
417
|
-
this.AddOrganizationOptions.AllowSearchFilter = true;
|
|
418
|
-
this.AddOrganizationOptions.Placeholder = "";
|
|
419
|
-
this.AddOrganizationOptions.IsRequired = true;
|
|
420
|
-
this.AddTypeOptions = new DropdownOptions();
|
|
421
|
-
this.AddTypeOptions.Name = "TypeFullName";
|
|
422
|
-
this.AddTypeOptions.LabelKey = "ProviderType";
|
|
423
|
-
this.AddTypeOptions.DataSource = this.TypesList;
|
|
424
|
-
this.AddTypeOptions.SingleSelection = true;
|
|
425
|
-
this.AddTypeOptions.AllowSearchFilter = true;
|
|
426
|
-
this.AddTypeOptions.Placeholder = "";
|
|
427
|
-
this.AddTypeOptions.IsRequired = true;
|
|
428
|
-
this.modalService.open(addProviderModal);
|
|
429
|
-
this.utilityService.stopBlockUI();
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
//Edit provider
|
|
433
|
-
showEditProviderModal(providerID, editProviderModal) {
|
|
434
|
-
this.showNoAttributesError = false;
|
|
435
|
-
this.ProviderId = providerID;
|
|
436
|
-
this.ProviderService.GetEditProviderData(providerID).subscribe((result) => {
|
|
437
|
-
let resultObj = result;
|
|
438
|
-
let provider = resultObj.model;
|
|
439
|
-
let lists = resultObj.lists;
|
|
440
|
-
this.TypesList = lists.providerTypes;
|
|
441
|
-
this.EditProviderForm = new FormGroup({});
|
|
442
|
-
this.EditProviderFormOptions = new FormOptions();
|
|
443
|
-
this.EditProviderFormOptions.FormGroup = this.EditProviderForm;
|
|
444
|
-
this.EditProviderFormOptions.GetModelFunction = this.getEditProviderModel;
|
|
445
|
-
this.EditProviderFormOptions.ServiceSubmitFunction = this.getEditProviderFunction;
|
|
446
|
-
this.EditProviderFormOptions.PagingReference = this.pagingElement;
|
|
447
|
-
this.EditProviderFormOptions.PagingActionMode = PagingActionMode.Update;
|
|
448
|
-
this.EditName = new TextBoxOptions();
|
|
449
|
-
this.EditName.Name = "ProviderName";
|
|
450
|
-
this.EditName.LabelKey = "ProviderName";
|
|
451
|
-
this.EditName.Type = InputType.Text;
|
|
452
|
-
this.EditName.IsRequired = true;
|
|
453
|
-
this.EditName.Value = provider.providerName;
|
|
454
|
-
this.EditName.MaxLength = 100;
|
|
455
|
-
this.EditDescription = new TextAreaOptions();
|
|
456
|
-
this.EditDescription.Name = "Description";
|
|
457
|
-
this.EditDescription.LabelKey = "Description";
|
|
458
|
-
this.EditDescription.Value = provider.description;
|
|
459
|
-
this.EditDescription.MaxLength = 250;
|
|
460
|
-
this.EditTypeOptions = new DropdownOptions();
|
|
461
|
-
this.EditTypeOptions.Name = "TypeFullName";
|
|
462
|
-
this.EditTypeOptions.LabelKey = "ProviderType";
|
|
463
|
-
this.EditTypeOptions.DataSource = this.TypesList;
|
|
464
|
-
this.EditTypeOptions.SingleSelection = true;
|
|
465
|
-
this.EditTypeOptions.AllowSearchFilter = true;
|
|
466
|
-
this.EditTypeOptions.Placeholder = "";
|
|
467
|
-
this.EditTypeOptions.IsRequired = true;
|
|
468
|
-
this.EditTypeOptions.SelectedItems = provider.typeFullName;
|
|
469
|
-
this.EditProviderTypeItemID_GUID = provider.providerTypeItemID_GUID?.toLowerCase();
|
|
470
|
-
this.EditProviderOrganizationID_GUID = provider.organizationID_GUID?.toLowerCase();
|
|
471
|
-
let editAttributesResult = this.getProviderAttributesOptions(provider.providerAttributes, false);
|
|
472
|
-
this.EditProviderAttributesOptions = editAttributesResult[0];
|
|
473
|
-
this.EditProviderAttributesCount = editAttributesResult[1];
|
|
474
|
-
this.modalService.open(editProviderModal);
|
|
475
|
-
});
|
|
476
|
-
}
|
|
477
|
-
//Delete provider
|
|
478
|
-
showDeleteProviderModal(providerID) {
|
|
479
|
-
this.deleteProviderId = providerID;
|
|
480
|
-
//array sent to service function
|
|
481
|
-
let paramArray = [];
|
|
482
|
-
paramArray.push(this.deleteProviderId);
|
|
483
|
-
this.DeleteConfirmationOptions = new ConfirmationModalOptions();
|
|
484
|
-
this.DeleteConfirmationOptions.ServiceSubmitFunction = this.deleteProvider;
|
|
485
|
-
this.DeleteConfirmationOptions.ServiceSubmitModel = paramArray;
|
|
486
|
-
this.DeleteConfirmationOptions.PagingReference = this.pagingElement;
|
|
487
|
-
this.deleteControlLoaded = true;
|
|
488
|
-
setTimeout(() => {
|
|
489
|
-
this.ConfirmationModalControl.showModal();
|
|
490
|
-
}, 200);
|
|
491
|
-
}
|
|
492
|
-
//Default provider
|
|
493
|
-
showDefaultProviderModal(defaultProviderModal) {
|
|
494
|
-
this.DefaultProviders = [];
|
|
495
|
-
this.ProviderService.GetDefaultProviders().subscribe((result) => {
|
|
496
|
-
let list = result;
|
|
497
|
-
this.DefaultProviderForm = new FormGroup({});
|
|
498
|
-
this.DefaultProviderFormOptions = new FormOptions();
|
|
499
|
-
this.DefaultProviderFormOptions.FormGroup = this.DefaultProviderForm;
|
|
500
|
-
this.DefaultProviderFormOptions.GetModelFunction = this.getDefaultProviderModel;
|
|
501
|
-
this.DefaultProviderFormOptions.ServiceSubmitFunction = this.getDefaultProviderFunction;
|
|
502
|
-
this.DefaultProviderFormOptions.PagingReference = this.pagingElement;
|
|
503
|
-
for (let i = 0; i < list.length; i++) {
|
|
504
|
-
let provider = list[i];
|
|
505
|
-
let ProviderOption = new RadioButtonOptions();
|
|
506
|
-
ProviderOption.Name = "providerOption_" + provider.providerTypeItemID_GUID;
|
|
507
|
-
ProviderOption.HideLabel = true;
|
|
508
|
-
ProviderOption.IsRequired = true;
|
|
509
|
-
ProviderOption.ViewType = ControlLayout.Horizontal;
|
|
510
|
-
let items = [];
|
|
511
|
-
for (let j = 0; j < provider.providers.length; j++) {
|
|
512
|
-
let providerItem = provider.providers[j];
|
|
513
|
-
let item = new RadioButtonItem();
|
|
514
|
-
item.Text = providerItem.text;
|
|
515
|
-
item.Value = providerItem.value;
|
|
516
|
-
items.push(item);
|
|
517
|
-
ProviderOption.Items = items;
|
|
518
|
-
}
|
|
519
|
-
let selectedProvider = provider.providers.filter((item) => { return item.selected == true; })[0];
|
|
520
|
-
ProviderOption.Value = {
|
|
521
|
-
Text: selectedProvider.text,
|
|
522
|
-
Value: selectedProvider.value
|
|
523
|
-
};
|
|
524
|
-
let defProvider = {
|
|
525
|
-
Name: provider.providerTypeItemName,
|
|
526
|
-
ID: provider.providerTypeItemID_GUID,
|
|
527
|
-
ProvidersOption: ProviderOption
|
|
528
|
-
};
|
|
529
|
-
this.DefaultProviders.push(defProvider);
|
|
530
|
-
}
|
|
531
|
-
this.modalService.open(defaultProviderModal);
|
|
532
|
-
});
|
|
533
|
-
}
|
|
534
|
-
//Generate provider json
|
|
535
|
-
generateProviderJson() {
|
|
536
|
-
this.ProviderService.GenerateProviderJson().subscribe((result) => {
|
|
537
|
-
let FileDTO = result;
|
|
538
|
-
const file = new Blob([FileDTO], { type: "application/json" });
|
|
539
|
-
let fileName = this.utilityService.getResourceValue("Providers") + ".json";
|
|
540
|
-
saveAs(file, fileName);
|
|
541
|
-
window.location.reload();
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
//Test Email functions
|
|
545
|
-
showTestEmailModal(providerID, providerName, testEMailModal) {
|
|
546
|
-
this.utilityService.startBlockUI();
|
|
547
|
-
this.testEmailProviderId = providerID;
|
|
548
|
-
this.testEmailProviderName = providerName;
|
|
549
|
-
this.testEmailForm = new FormGroup({});
|
|
550
|
-
this.testEmailFormOptions = new FormOptions();
|
|
551
|
-
this.testEmailFormOptions.FormGroup = this.testEmailForm;
|
|
552
|
-
this.testEmailFormOptions.GetModelFunction = this.getTestEmailModel;
|
|
553
|
-
this.testEmailFormOptions.ServiceSubmitFunction = this.getTestEmailFunction;
|
|
554
|
-
this.emailTo = new TextBoxOptions();
|
|
555
|
-
this.emailTo.Name = "emailTo";
|
|
556
|
-
this.emailTo.LabelKey = "To";
|
|
557
|
-
this.emailTo.Type = InputType.Email;
|
|
558
|
-
this.emailTo.IsRequired = true;
|
|
559
|
-
this.emailSubject = new TextBoxOptions();
|
|
560
|
-
this.emailSubject.Name = "emailSubject";
|
|
561
|
-
this.emailSubject.LabelKey = "EmailSubject";
|
|
562
|
-
this.emailSubject.Type = InputType.Text;
|
|
563
|
-
this.emailSubject.IsRequired = true;
|
|
564
|
-
this.emailBody = new TextAreaOptions();
|
|
565
|
-
this.emailBody.Name = "emailBody";
|
|
566
|
-
this.emailBody.LabelKey = "EmailBody";
|
|
567
|
-
this.emailBody.IsRequired = true;
|
|
568
|
-
this.modalService.open(testEMailModal);
|
|
569
|
-
this.utilityService.stopBlockUI();
|
|
570
|
-
}
|
|
571
|
-
//Test SMS functions
|
|
572
|
-
showTestSMSModal(providerID, providerName, testSMSModal) {
|
|
573
|
-
this.utilityService.startBlockUI();
|
|
574
|
-
this.testSMSProviderId = providerID;
|
|
575
|
-
this.testSMSProviderName = providerName;
|
|
576
|
-
this.testSMSForm = new FormGroup({});
|
|
577
|
-
this.testSMSFormOptions = new FormOptions();
|
|
578
|
-
this.testSMSFormOptions.FormGroup = this.testSMSForm;
|
|
579
|
-
this.testSMSFormOptions.GetModelFunction = this.getTestSMSModel;
|
|
580
|
-
this.testSMSFormOptions.ServiceSubmitFunction = this.getTestSMSFunction;
|
|
581
|
-
this.smsTo = new PhoneOptions();
|
|
582
|
-
this.smsTo.Name = "smsTo";
|
|
583
|
-
this.smsTo.LabelKey = "To";
|
|
584
|
-
this.smsTo.IsRequired = true;
|
|
585
|
-
this.smsBody = new TextAreaOptions();
|
|
586
|
-
this.smsBody.Name = "smsBody";
|
|
587
|
-
this.smsBody.LabelKey = "SMS";
|
|
588
|
-
this.smsBody.IsRequired = true;
|
|
589
|
-
this.modalService.open(testSMSModal);
|
|
590
|
-
this.utilityService.stopBlockUI();
|
|
591
|
-
}
|
|
592
|
-
//On destroy
|
|
593
|
-
ngOnDestroy() {
|
|
594
|
-
this.requestHandlerService.destroyHandler();
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
ProviderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProviderComponent, deps: [{ token: i1.ProviderService }, { token: i2.NgbModal }, { token: i3.AuthService }, { token: i3.BBSFTranslateService }, { token: i3.UtilityService }, { token: i4.PageInfoService }, { token: i3.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
598
|
-
ProviderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProviderComponent, selector: "lib-provider", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ProviderPagingViewElement"], descendants: true }, { propertyName: "providerTypesDDL", first: true, predicate: ["providerTypesDDL"], descendants: true }, { propertyName: "sortingFilterDDL", first: true, predicate: ["sortingFilterDDL"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div *ngIf=\"ShowPageContent\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ProviderForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ProviderForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"ProviderForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #providerTypesDDL [options]=\"providerTypesFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #sortingFilterDDL [options]=\"sortingFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"providerFiltersBtn\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button href=\"javascript:;\" (click)=\"generateProviderJson()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\">\r\n <i class=\"fas fa-file-export me-1\"></i>\r\n {{utilityService.getResourceValue(\"GenerateProviderJson\")}}\r\n </button>\r\n\r\n <button type=\"button\" title='utilityService.getResourceValue(\"SelectDefaultProvider\")' class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showDefaultProviderModal(DefaultProviderModal)\">\r\n <i class=\"fas fa-hand-pointer me-1\"></i>\r\n {{utilityService.getResourceValue(\"SelectDefaultProvider\")}}\r\n </button>\r\n <button type=\"button\" title='utilityService.getResourceValue(\"Add\")' class=\"btn btn-sm btn-primary\" (click)=\"showAddProviderModal(AddProviderModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button> <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Default\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" *ngFor=\"let providerGroup of clientSidePagingResult\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let provider of providerGroup.providers\">\r\n <td>\r\n <div class=\"text-dark\">{{provider.providerName}}</div>\r\n <div>{{provider.description}}</div>\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-primary\" *ngIf=\"provider.isRunning;else other_content\">\r\n {{utilityService.getResourceValue(\"Running\")}}\r\n </span>\r\n <ng-template #other_content>\r\n <span class=\"badge badge-light-danger\">\r\n {{utilityService.getResourceValue(\"Stopped\")}}\r\n </span>\r\n </ng-template>\r\n\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-success fw-bolder\" *ngIf=\"provider.isDefault;else default_no\">\r\n {{utilityService.getResourceValue(\"Yes\")}}\r\n </span>\r\n <ng-template #default_no>\r\n <span class=\"badge badge-light fw-bolder\">\r\n {{utilityService.getResourceValue(\"No\")}}\r\n </span>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditProviderModal(provider.iD_GUID, EditProviderModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteProviderModal(provider.iD_GUID)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isEMail && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestEmailModal(provider.iD_GUID,provider.providerName,TestEmailModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestEmail\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isSMS && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestSMSModal(provider.iD_GUID,provider.providerName,TestSMSModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestSMS\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"providerGroup.providers.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tbody *ngIf=\"clientSidePagingResult.length == 0\">\r\n <tr>\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProviderListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ProviderPaging\" [group]=\"ProviderForm\" #ProviderPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!--end::Providers list-->\r\n</div>\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddProviderFormOptions\">\r\n\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextArea [options]=\"AddDescription\" [group]=\"AddProviderForm\">\r\n </BBSF-TextArea>\r\n <BBSF-DropdownList [options]=\"AddOrganizationOptions\" [group]=\"AddProviderForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddProviderForm\" (OnChange)=\"setAddProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n <div *ngIf=\"IsAttributesLoaded\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of ProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"AddProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseProviderModal id=\"CloseAddProviderModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Edit model -->\r\n<ng-template #EditProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditName\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescription\" [group]=\"EditProviderForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditTypeOptions\" [group]=\"EditProviderForm\" (OnChange)=\"setEditProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of EditProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"EditProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"EditProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditProviderModal id=\"CloseEditProviderModal\" type=\"button\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Default Provider Modal-->\r\n<ng-template #DefaultProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SelectDefaultProvider\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"DefaultProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let defProvider of DefaultProviders;let i=index;\">\r\n <h3 class=\"text-muted mb-4 fw-boldest\">{{defProvider.Name}}</h3>\r\n <input type=\"hidden\" value=\"{{defProvider.ID}}\" />\r\n <BBSF-RadioButton [options]=\"defProvider.ProvidersOption\" [group]=\"DefaultProviderForm\"></BBSF-RadioButton>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDefaultProviderModal id=\"CloseDefaultProviderModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test Email Modal-->\r\n<ng-template #TestEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestEmailServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testEmailFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailTo\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailSubject\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"emailBody\" [group]=\"testEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test SMS Modal-->\r\n<ng-template #TestSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestSMSServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testSMSFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"smsTo\" [group]=\"testSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"smsBody\" [group]=\"testSMSForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange", "OnBlur"] }, { kind: "component", type: i8.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { kind: "component", type: i8.PhoneComponent, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.RadioButtonComponent, selector: "BBSF-RadioButton", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i11.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] });
|
|
599
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProviderComponent, decorators: [{
|
|
600
|
-
type: Component,
|
|
601
|
-
args: [{ selector: 'lib-provider', template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div *ngIf=\"ShowPageContent\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ProviderForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ProviderForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"ProviderForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #providerTypesDDL [options]=\"providerTypesFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #sortingFilterDDL [options]=\"sortingFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"providerFiltersBtn\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button href=\"javascript:;\" (click)=\"generateProviderJson()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\">\r\n <i class=\"fas fa-file-export me-1\"></i>\r\n {{utilityService.getResourceValue(\"GenerateProviderJson\")}}\r\n </button>\r\n\r\n <button type=\"button\" title='utilityService.getResourceValue(\"SelectDefaultProvider\")' class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showDefaultProviderModal(DefaultProviderModal)\">\r\n <i class=\"fas fa-hand-pointer me-1\"></i>\r\n {{utilityService.getResourceValue(\"SelectDefaultProvider\")}}\r\n </button>\r\n <button type=\"button\" title='utilityService.getResourceValue(\"Add\")' class=\"btn btn-sm btn-primary\" (click)=\"showAddProviderModal(AddProviderModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button> <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Default\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" *ngFor=\"let providerGroup of clientSidePagingResult\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let provider of providerGroup.providers\">\r\n <td>\r\n <div class=\"text-dark\">{{provider.providerName}}</div>\r\n <div>{{provider.description}}</div>\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-primary\" *ngIf=\"provider.isRunning;else other_content\">\r\n {{utilityService.getResourceValue(\"Running\")}}\r\n </span>\r\n <ng-template #other_content>\r\n <span class=\"badge badge-light-danger\">\r\n {{utilityService.getResourceValue(\"Stopped\")}}\r\n </span>\r\n </ng-template>\r\n\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-success fw-bolder\" *ngIf=\"provider.isDefault;else default_no\">\r\n {{utilityService.getResourceValue(\"Yes\")}}\r\n </span>\r\n <ng-template #default_no>\r\n <span class=\"badge badge-light fw-bolder\">\r\n {{utilityService.getResourceValue(\"No\")}}\r\n </span>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditProviderModal(provider.iD_GUID, EditProviderModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteProviderModal(provider.iD_GUID)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isEMail && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestEmailModal(provider.iD_GUID,provider.providerName,TestEmailModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestEmail\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isSMS && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestSMSModal(provider.iD_GUID,provider.providerName,TestSMSModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestSMS\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"providerGroup.providers.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tbody *ngIf=\"clientSidePagingResult.length == 0\">\r\n <tr>\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProviderListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ProviderPaging\" [group]=\"ProviderForm\" #ProviderPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!--end::Providers list-->\r\n</div>\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddProviderFormOptions\">\r\n\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextArea [options]=\"AddDescription\" [group]=\"AddProviderForm\">\r\n </BBSF-TextArea>\r\n <BBSF-DropdownList [options]=\"AddOrganizationOptions\" [group]=\"AddProviderForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddProviderForm\" (OnChange)=\"setAddProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n <div *ngIf=\"IsAttributesLoaded\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of ProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"AddProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseProviderModal id=\"CloseAddProviderModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Edit model -->\r\n<ng-template #EditProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditName\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescription\" [group]=\"EditProviderForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditTypeOptions\" [group]=\"EditProviderForm\" (OnChange)=\"setEditProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of EditProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"EditProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"EditProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditProviderModal id=\"CloseEditProviderModal\" type=\"button\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Default Provider Modal-->\r\n<ng-template #DefaultProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SelectDefaultProvider\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"DefaultProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let defProvider of DefaultProviders;let i=index;\">\r\n <h3 class=\"text-muted mb-4 fw-boldest\">{{defProvider.Name}}</h3>\r\n <input type=\"hidden\" value=\"{{defProvider.ID}}\" />\r\n <BBSF-RadioButton [options]=\"defProvider.ProvidersOption\" [group]=\"DefaultProviderForm\"></BBSF-RadioButton>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDefaultProviderModal id=\"CloseDefaultProviderModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test Email Modal-->\r\n<ng-template #TestEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestEmailServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testEmailFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailTo\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailSubject\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"emailBody\" [group]=\"testEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test SMS Modal-->\r\n<ng-template #TestSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestSMSServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testSMSFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"smsTo\" [group]=\"testSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"smsBody\" [group]=\"testSMSForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n" }]
|
|
602
|
-
}], ctorParameters: function () { return [{ type: i1.ProviderService }, { type: i2.NgbModal }, { type: i3.AuthService }, { type: i3.BBSFTranslateService }, { type: i3.UtilityService }, { type: i4.PageInfoService }, { type: i3.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
|
|
603
|
-
type: ViewChild,
|
|
604
|
-
args: ['ProviderPagingViewElement', { static: false }]
|
|
605
|
-
}], providerTypesDDL: [{
|
|
606
|
-
type: ViewChild,
|
|
607
|
-
args: ['providerTypesDDL', { static: false }]
|
|
608
|
-
}], sortingFilterDDL: [{
|
|
609
|
-
type: ViewChild,
|
|
610
|
-
args: ['sortingFilterDDL', { static: false }]
|
|
611
|
-
}], ConfirmationModalControl: [{
|
|
612
|
-
type: ViewChild,
|
|
613
|
-
args: ['ConfirmationModalControl', { static: false }]
|
|
614
|
-
}] } });
|
|
615
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBcUIsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNVMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRW5HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUtyRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7Ozs7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QUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFtQ1Usd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGVja0JveE9wdGlvbnMsIENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBSYWRpb0J1dHRvbk9wdGlvbnMsIFRleHRBcmVhT3B0aW9ucywgVGV4dEJveE9wdGlvbnMsIFJhZGlvQnV0dG9uSXRlbSwgRm9ybU9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSwgSHRtbEVkaXRvck9wdGlvbnMsIFBob25lT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL3Byb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm92aWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9Qcm92aWRlck1vZGVsJztcclxuaW1wb3J0IHsgUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCc7XHJcbmltcG9ydCB7IERlZmF1bHRQcm92aWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9EZWZhdWx0UHJvdmlkZXJNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByb3ZpZGVyVHlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9FbnVtcy9Qcm92aWRlclR5cGUnO1xyXG5pbXBvcnQgeyBFbWFpbFByb3ZpZGVyVGVzdGVyTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1Byb3ZpZGVyTW9kZWxzL0VtYWlsUHJvdmlkZXJUZXN0ZXJNb2RlbCc7XHJcbmltcG9ydCB7IFNNU1Byb3ZpZGVyVGVzdGVyTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1Byb3ZpZGVyTW9kZWxzL1NNU1Byb3ZpZGVyVGVzdGVyTW9kZWwnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXByb3ZpZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvdmlkZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9Qcm92aWRlci9cIjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBjb21wb25lbnRzXHJcbiAgUHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb246IERyb3Bkb3duT3B0aW9ucztcclxuICBwcm92aWRlclR5cGVzRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHNvcnRpbmdGaWx0ZXJPcHRpb246IERyb3Bkb3duT3B0aW9ucztcclxuICBzb3J0aW5nRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSXNGaWx0ZXJEYXRhTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUHJvdmlkZXJQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgUHJvdmlkZXJQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBAVmlld0NoaWxkKCdQcm92aWRlclBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgUHJvdmlkZXJUeXBlc0ZpbHRlckxpc3Q6IGFueVtdID0gW107XHJcbiAgU29ydGluZ0ZpbHRlckxpc3Q6IGFueVtdID0gW107XHJcbiAgVHlwZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIExvYWRlZFByb3ZpZGVyczogYW55W10gPSBbXTtcclxuICBPcmdhbml6YXRpb25zTGlzdCA9IFtdO1xyXG4gIEBWaWV3Q2hpbGQoJ3Byb3ZpZGVyVHlwZXNEREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJvdmlkZXJUeXBlc0RETDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzb3J0aW5nRmlsdGVyRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNvcnRpbmdGaWx0ZXJEREw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAvL1Byb3ZpZGVyIGF0dHJpYnV0ZXNcclxuICBQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIFByb3ZpZGVyQXR0cmlidXRlc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIElzQXR0cmlidXRlc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dOb0F0dHJpYnV0ZXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgQWRkTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkRGVzY3JpcHRpb246IFRleHRBcmVhT3B0aW9ucztcclxuICBBZGRPcmdhbml6YXRpb25PcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkVHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRQcm92aWRlclR5cGVJdGVtSURfR1VJRDogc3RyaW5nO1xyXG5cclxuXHJcbiAgLy8vL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgRWRpdE5hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXREZXNjcmlwdGlvbjogVGV4dEFyZWFPcHRpb25zO1xyXG4gIEVkaXRUeXBlT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRQcm92aWRlclR5cGVJdGVtSURfR1VJRDogc3RyaW5nO1xyXG4gIEVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEX0dVSUQ6IHN0cmluZztcclxuICBFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICBFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgUHJvdmlkZXJJZDogc3RyaW5nO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVQcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgLy9TZWxlY3QgRGVmYXVsdCBQcm92aWRlcnNcclxuICBEZWZhdWx0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgRGVmYXVsdFByb3ZpZGVyczogYW55W10gPSBbXTtcclxuICBEZWZhdWx0UHJvdmlkZXJzUmFkaW9CdG5PcHRpb25zOiBSYWRpb0J1dHRvbk9wdGlvbnNbXTtcclxuXHJcbiAgLy9UZXN0IFByb3ZpZGVyIGZ1bmN0aW9uc1xyXG4gIGVtYWlsUHJvdmlkZXJUeXBlID0gUHJvdmlkZXJUeXBlLkVtYWlscztcclxuICBzbXNQcm92aWRlclR5cGUgPSBQcm92aWRlclR5cGUuU01TO1xyXG4gIC8vVGVzdCBFbWFpbCBNb2RlbCBjb250cm9sc1xyXG4gIHRlc3RFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICB0ZXN0RW1haWxGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICBlbWFpbFRvOiBUZXh0Qm94T3B0aW9ucztcclxuICBlbWFpbFN1YmplY3Q6IFRleHRCb3hPcHRpb25zO1xyXG4gIGVtYWlsQm9keTogVGV4dEFyZWFPcHRpb25zO1xyXG4gIHRlc3RFbWFpbFByb3ZpZGVySWQ6IHN0cmluZztcclxuICB0ZXN0RW1haWxQcm92aWRlck5hbWU6IHN0cmluZztcclxuXHJcbiAgLy9UZXN0IFNNUyBNb2RlbCBjb250cm9sc1xyXG4gIHRlc3RTTVNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgdGVzdFNNU0Zvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIHNtc1RvOiBQaG9uZU9wdGlvbnM7XHJcbiAgc21zQm9keTogVGV4dEFyZWFPcHRpb25zO1xyXG4gIHRlc3RTTVNQcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgdGVzdFNNU1Byb3ZpZGVyTmFtZTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvclxyXG4gICAgKFxyXG4gICAgICBwcml2YXRlIFByb3ZpZGVyU2VydmljZTogUHJvdmlkZXJTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcblxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIC8vUGFnZSBoZWFkZXIgKGJyZWFkY3J1bWIgYW5kIHRpdGxlKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlcnZpY2VQcm92aWRlcnNcIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG5cclxuICAgIC8vb24gbGFuZyBjaGFuZ2VkXHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIH0pXHJcblxyXG4gICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vSW5pdGlhbGl6ZSBmaWx0ZXJzIGFuZCBwYWdpbmdcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICAvLyBQcm92aWRlciBUeXBlcyBGaWx0ZXIgSW5pdFxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uLk5hbWUgPSBcInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIlxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uLkxhYmVsS2V5ID0gXCJQcm92aWRlclR5cGVzXCJcclxuXHJcbiAgICB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwicHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvblwiXHJcbiAgICB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwidHlwZXNcIlxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0XHJcblxyXG5cclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlck9wdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlck9wdGlvbi5OYW1lID0gXCJzb3J0aW5nRmlsdGVyT3B0aW9uXCJcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlck9wdGlvbi5MYWJlbEtleSA9IFwiU29ydFwiXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlck9wdGlvbi5QbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNvcnRpbmdGaWx0ZXJPcHRpb25cIlxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNvcnRJRFwiXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3Q7XHJcblxyXG5cclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0UHJvdmlkZXJzQnlGaWx0ZXInO1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl07XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLkRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIiwgXCJzb3J0aW5nRmlsdGVyT3B0aW9uXCJdO1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIsIHRoaXMuc29ydGluZ0ZpbHRlcl1cclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKTtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuUmVzZXRGaWx0ZXJCdXR0b25OYW1lID0gXCJwcm92aWRlckZpbHRlcnNCdG5cIjtcclxuXHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vTG9hZCBmaWx0ZXJzIGxpc3RzXHJcbiAgbG9hZExpc3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgRHJvcGRvd25MaXN0cyA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgICAvL3RoaXMuT3JnYW5pemF0aW9uc0xpc3QgPSBEcm9wZG93bkxpc3RzLm9yZ2FuaXphdGlvbnM7XHJcbiAgICAgICAgLy90aGlzLlR5cGVzTGlzdCA9IERyb3Bkb3duTGlzdHMucHJvdmlkZXJUeXBlcztcclxuICAgICAgICB0aGlzLlByb3ZpZGVyVHlwZXNGaWx0ZXJMaXN0ID0gRHJvcGRvd25MaXN0cy5wcm92aWRlclR5cGVzRmlsdGVyO1xyXG4gICAgICAgIHRoaXMuU29ydGluZ0ZpbHRlckxpc3QgPSBEcm9wZG93bkxpc3RzLnNvcnRpbmdGaWx0ZXJMaXN0O1xyXG5cclxuICAgICAgICBsZXQgcHJvdmlkZXJUeXBlc0VsZW1lbnQgPSB0aGlzLnByb3ZpZGVyVHlwZXNEREwgYXMgYW55O1xyXG4gICAgICAgIGxldCBzb3J0aW5nRmlsdGVyRWxlbWVudCA9IHRoaXMuc29ydGluZ0ZpbHRlckRETCBhcyBhbnk7XHJcblxyXG5cclxuICAgICAgICBwcm92aWRlclR5cGVzRWxlbWVudC5VcGRhdGVEYXRhU291cmNlKHRoaXMuUHJvdmlkZXJUeXBlc0ZpbHRlckxpc3QpO1xyXG5cclxuICAgICAgICBzb3J0aW5nRmlsdGVyRWxlbWVudC5VcGRhdGVEYXRhU291cmNlKHRoaXMuU29ydGluZ0ZpbHRlckxpc3QpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5Jc0ZpbHRlckRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldFByb3ZpZGVyTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKClcclxuICB9XHJcblxyXG4gIHNlYXJjaENsaWVudFNpZGUoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0LmZpbHRlcihcclxuICAgICAgICBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvdmlkZXJOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfSlcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5Qcm92aWRlclBhZ2luZ1Jlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vQXR0cmlidXRlc0Z1bmN0aW9uXHJcbiAgc2V0QWRkUHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkge1xyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuR2V0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIC8vU2V0IFByb3ZpZGVyIHR5cGUgaWQgb24gdHlwZSBjaGFuZ2VcclxuICAgICAgdGhpcy5Mb2FkZWRQcm92aWRlcnMgPSByZXN1bHRPYmoubG9hZGVkUHJvdmlkZXJzO1xyXG4gICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlclR5cGUgPSB0aGlzLkxvYWRlZFByb3ZpZGVycy5maW5kKG9iaiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5mdWxsTmFtZSA9PT0gdHlwZUZ1bGxOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEID0gc2VsZWN0ZWRQcm92aWRlclR5cGUucHJvdmlkZXJUeXBlSURfR1VJRDtcclxuXHJcbiAgICAgIC8vU2V0IGF0dHJpYnV0ZXMgYW5kIGNvdW50XHJcbiAgICAgIGxldCBhdHRyaWJ1dGVzID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMgPSBbXTtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IHRoaXMuZ2V0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyhhdHRyaWJ1dGVzLCB0cnVlKTtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gZGF0YVswXTtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNDb3VudCA9IGRhdGFbMV07XHJcbiAgICAgIHRoaXMuSXNBdHRyaWJ1dGVzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEVkaXRQcm92aWRlckF0dHJpYnV0ZXModHlwZUZ1bGxOYW1lKSB7XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5HZXRQcm92aWRlckF0dHJpYnV0ZXModHlwZUZ1bGxOYW1lKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB2YXIgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgLy9TZXQgUHJvdmlkZXIgdHlwZSBpZCBvbiB0eXBlIGNoYW5nZVxyXG4gICAgICB0aGlzLkxvYWRlZFByb3ZpZGVycyA9IHJlc3VsdE9iai5sb2FkZWRQcm92aWRlcnM7XHJcbiAgICAgIGxldCBzZWxlY3RlZFByb3ZpZGVyVHlwZSA9IHRoaXMuTG9hZGVkUHJvdmlkZXJzLmZpbmQob2JqID0+IHtcclxuICAgICAgICByZXR1cm4gb2JqLmZ1bGxOYW1lID09PSB0eXBlRnVsbE5hbWVcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEID0gc2VsZWN0ZWRQcm92aWRlclR5cGUucHJvdmlkZXJUeXBlSURfR1VJRDtcclxuXHJcbiAgICAgIC8vU2V0IGF0dHJpYnV0ZXMgYW5kIGNvdW50XHJcbiAgICAgIGxldCBhdHRyaWJ1dGVzID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gW107XHJcbiAgICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLmdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMoYXR0cmlidXRlcywgZmFsc2UpO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gZGF0YVswXTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQgPSBkYXRhWzFdO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyhwcm92aWRlckF0dHJpYnV0ZXM6IGFueVtdLCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgbGV0IGF0dHJpYnV0ZXNPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGF0dHJpYnV0ZXNDb3VudDogbnVtYmVyID0gMDtcclxuICAgIGxldCBhY3Rpb25JbmRpY2F0ZTogc3RyaW5nID0gaXNBZGQgPyBcIkFkZFwiIDogXCJFZGl0XCI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3ZpZGVyQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgbGV0IG9iamVjdEF0dHJpYnV0ZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgICAgIGxldCBpc0VuY3J5cHRlZDogYm9vbGVhbiA9IHByb3ZpZGVyQXR0cmlidXRlc1tpXS5pc0VuY3J5cHRlZDtcclxuXHJcbiAgICAgIGxldCBBdHRyaWJ1dGVOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIEF0dHJpYnV0ZU5hbWUuTmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJBdHRyaWJ1dGVOYW1lXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIEF0dHJpYnV0ZU5hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLlZhbHVlID0gcHJvdmlkZXJBdHRyaWJ1dGVzW2ldLm5hbWU7XHJcbiAgICAgIEF0dHJpYnV0ZU5hbWUuTWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuXHJcbiAgICAgIGxldCBBdHRyaWJ1dGVWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkF0dHJpYnV0ZVZhbHVlXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5UeXBlID0gaXNFbmNyeXB0ZWQgPyBJbnB1dFR5cGUuUGFzc3dvcmQgOiBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuVmFsdWUgPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0udmFsdWU7XHJcbiAgICAgIEF0dHJpYnV0ZVZhbHVlLlJlbW92ZURlZmF1bHRQYXNzd29yZFZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5NYXhMZW5ndGggPSAxMDA7XHJcblxyXG4gICAgICBsZXQgQXR0cmlidXRlRW5jcnlwdGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVFbmNyeXB0ZWQuTmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJBdHRyaWJ1dGVFbmNyeXB0ZWRcIiArIGk7XHJcbiAgICAgIEF0dHJpYnV0ZUVuY3J5cHRlZC5WYWx1ZSA9IHByb3ZpZGVyQXR0cmlidXRlc1tpXS5pc0VuY3J5cHRlZDtcclxuXHJcbiAgICAgIG9iamVjdEF0dHJpYnV0ZU9wdGlvbnMucHVzaChBdHRyaWJ1dGVOYW1lLCBBdHRyaWJ1dGVWYWx1ZSwgQXR0cmlidXRlRW5jcnlwdGVkKTtcclxuICAgICAgYXR0cmlidXRlc09wdGlvbnMucHVzaChvYmplY3RBdHRyaWJ1dGVPcHRpb25zKTtcclxuICAgICAgYXR0cmlidXRlc0NvdW50ICs9IDE7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFthdHRyaWJ1dGVzT3B0aW9ucywgYXR0cmlidXRlc0NvdW50XTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUF0dHJpYnV0ZShkZWxldGVkQXR0cmlidXRlOiBhbnksIGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgbGV0IGRlbGV0ZWRBdHRySW5kZXg6IG51bWJlciA9IHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRBdHRyaWJ1dGUpO1xyXG4gICAgICBpZiAoZGVsZXRlZEF0dHJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRBdHRySW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZEF0dHJpYnV0ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkQXR0cmlidXRlW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBkZWxldGVkQXR0ckluZGV4OiBudW1iZXIgPSB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLmluZGV4T2YoZGVsZXRlZEF0dHJpYnV0ZSk7XHJcbiAgICAgIGlmIChkZWxldGVkQXR0ckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRBdHRySW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZEF0dHJpYnV0ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtLnJlbW92ZUNvbnRyb2woZGVsZXRlZEF0dHJpYnV0ZVtpXS5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuY3J5cHRlZENoYW5nZShpc0NoZWNrZWQsIG9wdGlvbiwgaXNBZGQpIHtcclxuICAgIGxldCB2YWx1ZUF0dHJpYnV0ZUluZGljYXRvciA9IGlzQWRkID8gXCJBZGRBdHRyaWJ1dGVWYWx1ZVwiIDogXCJFZGl0QXR0cmlidXRlVmFsdWVcIjtcclxuICAgIGxldCByZWFsdGVkVmFsdWVPcHRpb24gPSBvcHRpb24uZmluZChvYmogPT4ge1xyXG4gICAgICByZXR1cm4gb2JqLk5hbWUuc3RhcnRzV2l0aCh2YWx1ZUF0dHJpYnV0ZUluZGljYXRvcilcclxuICAgIH0pO1xyXG4gICAgaWYgKGlzQ2hlY2tlZClcclxuICAgICAgcmVhbHRlZFZhbHVlT3B0aW9uLlR5cGUgPSBJbnB1dFR5cGUuUGFzc3dvcmQ7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlYWx0ZWRWYWx1ZU9wdGlvbi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8vQWRkIHByb3ZpZGVyXHJcbiAgc2hvd0FkZFByb3ZpZGVyTW9kYWwoYWRkUHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSBmYWxzZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHRoaXMuT3JnYW5pemF0aW9uc0xpc3QgPSByZXN1bHRPYmoub3JnYW5pemF0aW9ucztcclxuICAgICAgdGhpcy5UeXBlc0xpc3QgPSByZXN1bHRPYmoucHJvdmlkZXJUeXBlcztcclxuXHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IFtdO1xyXG4gICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc0NvdW50ID0gMDtcclxuICAgICAgdGhpcy5Jc0F0dHJpYnV0ZXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5BZGRQcm92aWRlckZvcm1cclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFByb3ZpZGVyTW9kZWw7XHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICAgIHRoaXMuQWRkTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuTmFtZSA9IFwiUHJvdmlkZXJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5MYWJlbEtleSA9IFwiUHJvdmlkZXJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGROYW1lLk1heExlbmd0aCA9IDEwMDtcclxuXHJcblxyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLk5hbWUgPSBcIkRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzY3JpcHRpb24uTGFiZWxLZXkgPSBcIlByb3ZpZGVyRGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbi5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkRGVzY3JpcHRpb24uTWF4TGVuZ3RoID0gMjUwO1xyXG5cclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuTmFtZSA9IFwiT3JnYW5pemF0aW9uSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5MYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uXCJcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLk9yZ2FuaXphdGlvbnNMaXN0XHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLk5hbWUgPSBcIlR5cGVGdWxsTmFtZVwiXHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuTGFiZWxLZXkgPSBcIlByb3ZpZGVyVHlwZVwiXHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuRGF0YVNvdXJjZSA9IHRoaXMuVHlwZXNMaXN0XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGFkZFByb3ZpZGVyTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRBZGRQcm92aWRlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFByb3ZpZGVyRm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgQWRkTW9kZWw6IFByb3ZpZGVyTW9kZWwgPSBuZXcgUHJvdmlkZXJNb2RlbCgpO1xyXG4gICAgQWRkTW9kZWwuUHJvdmlkZXJOYW1lID0gUmVzdWx0TW9kZWwuUHJvdmlkZXJOYW1lO1xyXG4gICAgQWRkTW9kZWwuRGVzY3JpcHRpb24gPSBSZXN1bHRNb2RlbC5EZXNjcmlwdGlvbjtcclxuXHJcbiAgICBBZGRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEID0gUmVzdWx0TW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRDtcclxuICAgIEFkZE1vZGVsLlByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEID0gdGhpcy5BZGRQcm92aWRlclR5cGVJdGVtSURfR1VJRDtcclxuICAgIEFkZE1vZGVsLlR5cGVGdWxsTmFtZSA9IFJlc3VsdE1vZGVsLlR5cGVGdWxsTmFtZTtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNDb3VudDsgaisrKSB7XHJcbiAgICAgIGxldCBhZGRBdHRyaWJ1dGVOYW1lID0gUmVzdWx0TW9kZWxbXCJBZGRBdHRyaWJ1dGVOYW1lXCIgKyBqXTtcclxuICAgICAgaWYgKGFkZEF0dHJpYnV0ZU5hbWUgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgbGV0IGFkZEF0dHJpYnV0ZVZhbHVlID0gUmVzdWx0TW9kZWxbXCJBZGRBdHRyaWJ1dGVWYWx1ZVwiICsgal07XHJcbiAgICAgIGxldCBhZGRBdHRyaWJ1dGVFbmNyeXB0ZWQgPSBSZXN1bHRNb2RlbFtcIkFkZEF0dHJpYnV0ZUVuY3J5cHRlZFwiICsgal07XHJcblxyXG4gICAgICBsZXQgcHJvdmlkZXJBdHRyOiBQcm92aWRlckF0dHJpYnV0ZU1vZGVsID0gbmV3IFByb3ZpZGVyQXR0cmlidXRlTW9kZWwoKTtcclxuICAgICAgcHJvdmlkZXJBdHRyLk5hbWUgPSBhZGRBdHRyaWJ1dGVOYW1lO1xyXG4gICAgICBwcm92aWRlckF0dHIuVmFsdWUgPSBhZGRBdHRyaWJ1dGVWYWx1ZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLklzRW5jcnlwdGVkID0gYWRkQXR0cmlidXRlRW5jcnlwdGVkO1xyXG4gICAgICBBZGRNb2RlbC5Qcm92aWRlckF0dHJpYnV0ZXMucHVzaChwcm92aWRlckF0dHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZFByb3ZpZGVyRnVuY3Rpb24gPSAoQWRkTW9kZWw6IFByb3ZpZGVyTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgaWYgKEFkZE1vZGVsLlByb3ZpZGVyQXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2hvd05vQXR0cmlidXRlc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5BZGRQcm92aWRlcihBZGRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0VkaXQgcHJvdmlkZXJcclxuICBzaG93RWRpdFByb3ZpZGVyTW9kYWwocHJvdmlkZXJJRDogc3RyaW5nLCBlZGl0UHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSBmYWxzZTtcclxuICAgIHRoaXMuUHJvdmlkZXJJZCA9IHByb3ZpZGVySUQ7XHJcblxyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuR2V0RWRpdFByb3ZpZGVyRGF0YShwcm92aWRlcklEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgbGV0IHByb3ZpZGVyID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuVHlwZXNMaXN0ID0gbGlzdHMucHJvdmlkZXJUeXBlcztcclxuXHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5FZGl0UHJvdmlkZXJGb3JtXHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFByb3ZpZGVyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0UHJvdmlkZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucy5QYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGVcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXROYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTmFtZSA9IFwiUHJvdmlkZXJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTGFiZWxLZXkgPSBcIlByb3ZpZGVyTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5WYWx1ZSA9IHByb3ZpZGVyLnByb3ZpZGVyTmFtZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5NYXhMZW5ndGggPSAxMDA7XHJcblxyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbiA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uTmFtZSA9IFwiRGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLlZhbHVlID0gcHJvdmlkZXIuZGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk1heExlbmd0aCA9IDI1MDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5OYW1lID0gXCJUeXBlRnVsbE5hbWVcIlxyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5MYWJlbEtleSA9IFwiUHJvdmlkZXJUeXBlXCJcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuRGF0YVNvdXJjZSA9IHRoaXMuVHlwZXNMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuU2VsZWN0ZWRJdGVtcyA9IHByb3ZpZGVyLnR5cGVGdWxsTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEID0gcHJvdmlkZXIucHJvdmlkZXJUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEX0dVSUQgPSBwcm92aWRlci5vcmdhbml6YXRpb25JRF9HVUlEPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIGxldCBlZGl0QXR0cmlidXRlc1Jlc3VsdDogYW55ID0gdGhpcy5nZXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zKHByb3ZpZGVyLnByb3ZpZGVyQXR0cmlidXRlcywgZmFsc2UpO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gZWRpdEF0dHJpYnV0ZXNSZXN1bHRbMF07XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc0NvdW50ID0gZWRpdEF0dHJpYnV0ZXNSZXN1bHRbMV07XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZWRpdFByb3ZpZGVyTW9kYWwpO1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG4gIGdldEVkaXRQcm92aWRlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRQcm92aWRlckZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IEVkaXRNb2RlbCA9IG5ldyBQcm92aWRlck1vZGVsKCk7XHJcblxyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLlByb3ZpZGVySWQ7XHJcbiAgICBFZGl0TW9kZWwuUHJvdmlkZXJOYW1lID0gUmVzdWx0TW9kZWwuUHJvdmlkZXJOYW1lOyAvLygjIzEpXHJcbiAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24gPSBSZXN1bHRNb2RlbC5EZXNjcmlwdGlvblxyXG4gICAgRWRpdE1vZGVsLlR5cGVGdWxsTmFtZSA9IFJlc3VsdE1vZGVsLlR5cGVGdWxsTmFtZTtcclxuICAgIEVkaXRNb2RlbC5Qcm92aWRlclR5cGVJdGVtSURfR1VJRCA9IHRoaXMuRWRpdFByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEO1xyXG4gICAgRWRpdE1vZGVsLk9yZ2FuaXphdGlvbklEX0dVSUQgPSB0aGlzLkVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEX0dVSUQ7XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNDb3VudDsgaisrKSB7XHJcbiAgICAgIGxldCBlZGl0QXR0cmlidXRlTmFtZSA9IFJlc3VsdE1vZGVsW1wiRWRpdEF0dHJpYnV0ZU5hbWVcIiArIGpdO1xyXG4gICAgICBpZiAoZWRpdEF0dHJpYnV0ZU5hbWUgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICBjb250aW51ZTtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiRWRpdEF0dHJpYnV0ZVZhbHVlXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWQgPSBSZXN1bHRNb2RlbFtcIkVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWRcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IHByb3ZpZGVyQXR0cjogUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCA9IG5ldyBQcm92aWRlckF0dHJpYnV0ZU1vZGVsKCk7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5OYW1lID0gZWRpdEF0dHJpYnV0ZU5hbWU7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5WYWx1ZSA9IGVkaXRBdHRyaWJ1dGVWYWx1ZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLklzRW5jcnlwdGVkID0gZWRpdEF0dHJpYnV0ZUVuY3J5cHRlZDtcclxuICAgICAgRWRpdE1vZGVsLlByb3ZpZGVyQXR0cmlidXRlcy5wdXNoKHByb3ZpZGVyQXR0cik7XHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFByb3ZpZGVyRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIGlmIChFZGl0TW9kZWwuUHJvdmlkZXJBdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkVkaXRQcm92aWRlcihFZGl0TW9kZWwpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0RlbGV0ZSBwcm92aWRlclxyXG4gIHNob3dEZWxldGVQcm92aWRlck1vZGFsKHByb3ZpZGVySUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVQcm92aWRlcklkID0gcHJvdmlkZXJJRDtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVQcm92aWRlcklkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVQcm92aWRlcjtcclxuICAgIHRoaXMuRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUNvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVByb3ZpZGVyID0gKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkRlbGV0ZVByb3ZpZGVyKGlkKTtcclxuICB9XHJcblxyXG4gIC8vRGVmYXVsdCBwcm92aWRlclxyXG4gIHNob3dEZWZhdWx0UHJvdmlkZXJNb2RhbChkZWZhdWx0UHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJzID0gW107XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5HZXREZWZhdWx0UHJvdmlkZXJzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGxpc3QgPSByZXN1bHQgYXMgYW55O1xyXG5cclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybVxyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldERlZmF1bHRQcm92aWRlck1vZGVsO1xyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJvdmlkZXI6IGFueSA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgIGxldCBQcm92aWRlck9wdGlvbiA9IG5ldyBSYWRpb0J1dHRvbk9wdGlvbnMoKTtcclxuICAgICAgICBQcm92aWRlck9wdGlvbi5OYW1lID0gXCJwcm92aWRlck9wdGlvbl9cIiArIHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgbGV0IGl0ZW1zOiBSYWRpb0J1dHRvbkl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcHJvdmlkZXIucHJvdmlkZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBsZXQgcHJvdmlkZXJJdGVtID0gcHJvdmlkZXIucHJvdmlkZXJzW2pdO1xyXG4gICAgICAgICAgbGV0IGl0ZW0gPSBuZXcgUmFkaW9CdXR0b25JdGVtKCk7XHJcbiAgICAgICAgICBpdGVtLlRleHQgPSBwcm92aWRlckl0ZW0udGV4dDtcclxuICAgICAgICAgIGl0ZW0uVmFsdWUgPSBwcm92aWRlckl0ZW0udmFsdWU7XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgUHJvdmlkZXJPcHRpb24uSXRlbXMgPSBpdGVtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzZWxlY3RlZFByb3ZpZGVyID0gcHJvdmlkZXIucHJvdmlkZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5zZWxlY3RlZCA9PSB0cnVlOyB9KVswXTtcclxuICAgICAgICBQcm92aWRlck9wdGlvbi5WYWx1ZSA9IHtcclxuICAgICAgICAgIFRleHQ6IHNlbGVjdGVkUHJvdmlkZXIudGV4dCxcclxuICAgICAgICAgIFZhbHVlOiBzZWxlY3RlZFByb3ZpZGVyLnZhbHVlXHJcbiAgICAgICAgfTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZGVmUHJvdmlkZXIgPSB7XHJcbiAgICAgICAgICBOYW1lOiBwcm92aWRlci5wcm92aWRlclR5cGVJdGVtTmFtZSxcclxuICAgICAgICAgIElEOiBwcm92aWRlci5wcm92aWRlclR5cGVJdGVtSURfR1VJRCxcclxuICAgICAgICAgIFByb3ZpZGVyc09wdGlvbjogUHJvdmlkZXJPcHRpb25cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVycy5wdXNoKGRlZlByb3ZpZGVyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGRlZmF1bHRQcm92aWRlck1vZGFsKTtcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXREZWZhdWx0UHJvdmlkZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtLnZhbHVlO1xyXG4gICAgbGV0IGRlZmF1bHRQcm92aWRlcnNNb2RlbDogRGVmYXVsdFByb3ZpZGVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5EZWZhdWx0UHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwcm92aWRlcklEID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJzW2ldLklEO1xyXG4gICAgICBsZXQgc2VsZWN0ZWREZWZQcm92aWRlcklEID0gUmVzdWx0TW9kZWxbXCJwcm92aWRlck9wdGlvbl9cIiArIHByb3ZpZGVySURdO1xyXG4gICAgICBsZXQgZGVmUHJvdmlkZU1vZGVsOiBEZWZhdWx0UHJvdmlkZXJNb2RlbCA9IHtcclxuICAgICAgICBQcm92aWRlclR5cGVJdGVtSURfR1VJRDogcHJvdmlkZXJJRCxcclxuICAgICAgICBTZWxlY3RlZFByb3ZpZGVySURfR1VJRDogc2VsZWN0ZWREZWZQcm92aWRlcklELFxyXG4gICAgICAgIFByb3ZpZGVyVHlwZUl0ZW1OYW1lOiBcIlwiLFxyXG4gICAgICAgIFByb3ZpZGVyczogW11cclxuICAgICAgfTtcclxuICAgICAgZGVmYXVsdFByb3ZpZGVyc01vZGVsLnB1c2goZGVmUHJvdmlkZU1vZGVsKTtcclxuXHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goZGVmYXVsdFByb3ZpZGVyc01vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFByb3ZpZGVyRnVuY3Rpb24gPSAoRGVmYXVsdFByb3ZpZGVyTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLlN1Ym1pdERlZmF1bHRQcm92aWRlcnMoRGVmYXVsdFByb3ZpZGVyTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL0dlbmVyYXRlIHByb3ZpZGVyIGpzb25cclxuICBnZW5lcmF0ZVByb3ZpZGVySnNvbigpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdlbmVyYXRlUHJvdmlkZXJKc29uKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgQmxvYihbRmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyc1wiKSArIFwiLmpzb25cIjtcclxuICAgICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgLy9UZXN0IEVtYWlsIGZ1bmN0aW9uc1xyXG4gIHNob3dUZXN0RW1haWxNb2RhbChwcm92aWRlcklEOiBzdHJpbmcsIHByb3ZpZGVyTmFtZTogc3RyaW5nLCB0ZXN0RU1haWxNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudGVzdEVtYWlsUHJvdmlkZXJJZCA9IHByb3ZpZGVySUQ7XHJcbiAgICB0aGlzLnRlc3RFbWFpbFByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZTtcclxuXHJcbiAgICB0aGlzLnRlc3RFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMudGVzdEVtYWlsRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMudGVzdEVtYWlsRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy50ZXN0RW1haWxGb3JtXHJcbiAgICB0aGlzLnRlc3RFbWFpbEZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldFRlc3RFbWFpbE1vZGVsO1xyXG4gICAgdGhpcy50ZXN0RW1haWxGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFRlc3RFbWFpbEZ1bmN0aW9uO1xyXG5cclxuXHJcbiAgICB0aGlzLmVtYWlsVG8gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1haWxUby5OYW1lID0gXCJlbWFpbFRvXCI7XHJcbiAgICB0aGlzLmVtYWlsVG8uTGFiZWxLZXkgPSBcIlRvXCI7XHJcbiAgICB0aGlzLmVtYWlsVG8uVHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgIHRoaXMuZW1haWxUby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5lbWFpbFN1YmplY3QuTmFtZSA9IFwiZW1haWxTdWJqZWN0XCI7XHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdC5MYWJlbEtleSA9IFwiRW1haWxTdWJqZWN0XCI7XHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVtYWlsQm9keSA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1haWxCb2R5Lk5hbWUgPSBcImVtYWlsQm9keVwiO1xyXG4gICAgdGhpcy5lbWFpbEJvZHkuTGFiZWxLZXkgPSBcIkVtYWlsQm9keVwiO1xyXG4gICAgdGhpcy5lbWFpbEJvZHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0ZXN0RU1haWxNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0RW1haWxNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IHJlc3VsdE1vZGVsID0gdGhpcy50ZXN0RW1haWxGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCB0ZXN0RW1haWxNb2RlbCA9IG5ldyBFbWFpbFByb3ZpZGVyVGVzdGVyTW9kZWwoKTtcclxuXHJcbiAgICB0ZXN0RW1haWxNb2RlbC5Qcm92aWRlcklEID0gdGhpcy50ZXN0RW1haWxQcm92aWRlcklkO1xyXG4gICAgdGVzdEVtYWlsTW9kZWwuUHJvdmlkZXJOYW1lID0gdGhpcy50ZXN0RW1haWxQcm92aWRlck5hbWU7XHJcbiAgICB0ZXN0RW1haWxNb2RlbC5Ub0VtYWlsID0gcmVzdWx0TW9kZWwuZW1haWxUb1xyXG4gICAgdGVzdEVtYWlsTW9kZWwuU3ViamVjdCA9IHJlc3VsdE1vZGVsLmVtYWlsU3ViamVjdDtcclxuICAgIHRlc3RFbWFpbE1vZGVsLkJvZHkgPSByZXN1bHRNb2RlbC5lbWFpbEJvZHk7XHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKHRlc3RFbWFpbE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVzdEVtYWlsRnVuY3Rpb24gPSAodGVzdEVtYWlsTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLlRlc3RFbWFpbCh0ZXN0RW1haWxNb2RlbClcclxuICB9XHJcblxyXG4gIC8vVGVzdCBTTVMgZnVuY3Rpb25zXHJcbiAgc2hvd1Rlc3RTTVNNb2RhbChwcm92aWRlcklEOiBzdHJpbmcsIHByb3ZpZGVyTmFtZTogc3RyaW5nLCB0ZXN0U01TTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRlc3RTTVNQcm92aWRlcklkID0gcHJvdmlkZXJJRDtcclxuICAgIHRoaXMudGVzdFNNU1Byb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZTtcclxuXHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy50ZXN0U01TRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy50ZXN0U01TRm9ybVxyXG4gICAgdGhpcy50ZXN0U01TRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0VGVzdFNNU01vZGVsO1xyXG4gICAgdGhpcy50ZXN0U01TRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0U01TRnVuY3Rpb247XHJcblxyXG5cclxuICAgIHRoaXMuc21zVG8gPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNtc1RvLk5hbWUgPSBcInNtc1RvXCI7XHJcbiAgICB0aGlzLnNtc1RvLkxhYmVsS2V5ID0gXCJUb1wiO1xyXG4gICAgdGhpcy5zbXNUby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNtc0JvZHkgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNtc0JvZHkuTmFtZSA9IFwic21zQm9keVwiO1xyXG4gICAgdGhpcy5zbXNCb2R5LkxhYmVsS2V5ID0gXCJTTVNcIjtcclxuICAgIHRoaXMuc21zQm9keS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRlc3RTTVNNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0U01TTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCByZXN1bHRNb2RlbCA9IHRoaXMudGVzdFNNU0Zvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IHRlc3RTTVNNb2RlbCA9IG5ldyBTTVNQcm92aWRlclRlc3Rlck1vZGVsKCk7XHJcblxyXG4gICAgbGV0IGludGVybmF0aW9uYWxOdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAocmVzdWx0TW9kZWwuc21zVG8gIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gcmVzdWx0TW9kZWwuc21zVG8uaW50ZXJuYXRpb25hbE51bWJlciBhcyBzdHJpbmc7XHJcbiAgICAgIGludGVybmF0aW9uYWxOdW1iZXIgPSBpbnRlcm5hdGlvbmFsTnVtYmVyLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0U01TTW9kZWwuUHJvdmlkZXJJRCA9IHRoaXMudGVzdFNNU1Byb3ZpZGVySWQ7XHJcbiAgICB0ZXN0U01TTW9kZWwuUHJvdmlkZXJOYW1lID0gdGhpcy50ZXN0U01TUHJvdmlkZXJOYW1lO1xyXG4gICAgdGVzdFNNU01vZGVsLlRvTW9iaWxlTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlclxyXG4gICAgdGVzdFNNU01vZGVsLk1lc3NhZ2UgPSByZXN1bHRNb2RlbC5zbXNCb2R5O1xyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaCh0ZXN0U01TTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0U01TRnVuY3Rpb24gPSAodGVzdFNNU01vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5UZXN0U01TKHRlc3RTTVNNb2RlbClcclxuICB9XHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJQcm92aWRlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpNZW51IC0tPlxyXG4gICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogU2hvd1BhZ2VDb250ZW50PT10cnVlPydibG9jayc6J25vbmUnfVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTGlzdHMoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBpZD1cIkZpbHRlcnNEcm9wZG93blwiIHRpdGxlPVwiRmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRmlsdGVyXCIpfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJGaWx0ZXJzRHJvcGRvd25cIiBjbGFzcz1cIiBmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5ICB3LTI1MHB4IHctbWQtNTAwcHggZnctYm9sZCBweS0zIFwiPlxyXG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNwcm92aWRlclR5cGVzRERMIFtvcHRpb25zXT1cInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI3NvcnRpbmdGaWx0ZXJEREwgW29wdGlvbnNdPVwic29ydGluZ0ZpbHRlck9wdGlvblwiIFtncm91cF09XCJQcm92aWRlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnkgcHYtcmVzZXQgYnRuLXNtXCIgbmFtZT1cInByb3ZpZGVyRmlsdGVyc0J0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b24gaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJnZW5lcmF0ZVByb3ZpZGVySnNvbigpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgYm5zaWdodHMtYnRuLWV4cG9ydFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlLWV4cG9ydCBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZVByb3ZpZGVySnNvblwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT0ndXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbGVjdERlZmF1bHRQcm92aWRlclwiKScgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgXCIgKGNsaWNrKT1cInNob3dEZWZhdWx0UHJvdmlkZXJNb2RhbChEZWZhdWx0UHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaGFuZC1wb2ludGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbGVjdERlZmF1bHRQcm92aWRlclwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPSd1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpJyBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2hvd0FkZFByb3ZpZGVyTW9kYWwoQWRkUHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+ICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICAgIDwhLS0gYmVnaW46OkJvZHkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdGF0dXNcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlZmF1bHRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiAqbmdGb3I9XCJsZXQgcHJvdmlkZXJHcm91cCBvZiBjbGllbnRTaWRlUGFnaW5nUmVzdWx0XCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwcm92aWRlckdyb3VwLnByb3ZpZGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1kYXJrXCI+e3twcm92aWRlci5wcm92aWRlck5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2Pnt7cHJvdmlkZXIuZGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCIgKm5nSWY9XCJwcm92aWRlci5pc1J1bm5pbmc7ZWxzZSBvdGhlcl9jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUnVubmluZ1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlcl9jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdG9wcGVkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzIGZ3LWJvbGRlclwiICpuZ0lmPVwicHJvdmlkZXIuaXNEZWZhdWx0O2Vsc2UgZGVmYXVsdF9ub1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlllc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0X25vPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQgZnctYm9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOb1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cInNob3dFZGl0UHJvdmlkZXJNb2RhbChwcm92aWRlci5pRF9HVUlELCBFZGl0UHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVQcm92aWRlck1vZGFsKHByb3ZpZGVyLmlEX0dVSUQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwicHJvdmlkZXIuaXNFTWFpbCAmJiBwcm92aWRlci5pc1J1bm5pbmdcIiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Rlc3RFbWFpbE1vZGFsKHByb3ZpZGVyLmlEX0dVSUQscHJvdmlkZXIucHJvdmlkZXJOYW1lLFRlc3RFbWFpbE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdEVtYWlsXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cInByb3ZpZGVyLmlzU01TICYmIHByb3ZpZGVyLmlzUnVubmluZ1wiIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVzdFNNU01vZGFsKHByb3ZpZGVyLmlEX0dVSUQscHJvdmlkZXIucHJvdmlkZXJOYW1lLFRlc3RTTVNNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RTTVNcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJwcm92aWRlckdyb3VwLnByb3ZpZGVycy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8dGJvZHkgKm5nSWY9XCJjbGllbnRTaWRlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0UHJvdmlkZXJMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiUHJvdmlkZXJQYWdpbmdcIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCIgI1Byb3ZpZGVyUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tZW5kOjpQcm92aWRlcnMgbGlzdC0tPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gQWRkIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0FkZFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyXCIpfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRQcm92aWRlckZvcm1PcHRpb25zXCI+XHJcblxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZE5hbWVcIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJBZGREZXNjcmlwdGlvblwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkT3JnYW5pemF0aW9uT3B0aW9uc1wiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFR5cGVPcHRpb25zXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJzZXRBZGRQcm92aWRlckF0dHJpYnV0ZXMoJGV2ZW50KVwiPlxyXG4gICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiSXNBdHRyaWJ1dGVzTG9hZGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZU5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyQXR0cmlidXRlVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuY3J5cHRlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCIgKE9uQ2hhbmdlKT1cImVuY3J5cHRlZENoYW5nZSgkZXZlbnQsb3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVBdHRyaWJ1dGUob3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dOb0F0dHJpYnV0ZXNFcnJvclwiIGNvbHNwYW49XCI0XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBdExlYXN0T25lSXRlbVJlcXVpcmVkXCIpfX1cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlUHJvdmlkZXJNb2RhbCBpZD1cIkNsb3NlQWRkUHJvdmlkZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tIEVkaXQgbW9kZWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdE5hbWVcIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkVkaXREZXNjcmlwdGlvblwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VHlwZU9wdGlvbnNcIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJzZXRFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzKCRldmVudClcIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZU5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyQXR0cmlidXRlVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuY3J5cHRlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCIgKE9uQ2hhbmdlKT1cImVuY3J5cHRlZENoYW5nZSgkZXZlbnQsb3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVBdHRyaWJ1dGUob3B0aW9uLGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd05vQXR0cmlidXRlc0Vycm9yXCIgY29sc3Bhbj1cIjRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkF0TGVhc3RPbmVJdGVtUmVxdWlyZWRcIil9fVxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VFZGl0UHJvdmlkZXJNb2RhbCBpZD1cIkNsb3NlRWRpdFByb3ZpZGVyTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tZGVsZXRlIE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cIkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cIkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiICNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuPCEtLURlZmF1bHQgUHJvdmlkZXIgIE1vZGFsLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRGVmYXVsdFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbGVjdERlZmF1bHRQcm92aWRlclwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJEZWZhdWx0UHJvdmlkZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBkZWZQcm92aWRlciBvZiBEZWZhdWx0UHJvdmlkZXJzO2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1tdXRlZCBtYi00IGZ3LWJvbGRlc3RcIj57e2RlZlByb3ZpZGVyLk5hbWV9fTwvaDM+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHZhbHVlPVwie3tkZWZQcm92aWRlci5JRH19XCIgLz5cclxuICAgICAgICAgIDxCQlNGLVJhZGlvQnV0dG9uIFtvcHRpb25zXT1cImRlZlByb3ZpZGVyLlByb3ZpZGVyc09wdGlvblwiIFtncm91cF09XCJEZWZhdWx0UHJvdmlkZXJGb3JtXCI+PC9CQlNGLVJhZGlvQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZURlZmF1bHRQcm92aWRlck1vZGFsIGlkPVwiQ2xvc2VEZWZhdWx0UHJvdmlkZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBtZS0zIFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLVRlc3QgRW1haWwgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNUZXN0RW1haWxNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyXCIpfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJ0ZXN0RW1haWxGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJlbWFpbFRvXCIgW2dyb3VwXT1cInRlc3RFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiZW1haWxTdWJqZWN0XCIgW2dyb3VwXT1cInRlc3RFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cImVtYWlsQm9keVwiIFtncm91cF09XCJ0ZXN0RW1haWxGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0XCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1UZXN0IFNNUyBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI1Rlc3RTTVNNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFNNU1NlcnZpY2VQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwidGVzdFNNU0Zvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJzbXNUb1wiIFtncm91cF09XCJ0ZXN0U01TRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVBob25lPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cInNtc0JvZHlcIiBbZ3JvdXBdPVwidGVzdFNNU0Zvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
|