From f2173a9fa9ebd947f232dc30b8f7bf8ec72b185c Mon Sep 17 00:00:00 2001 From: Eric <01714308@yto.net.cn> Date: Mon, 9 Feb 2026 11:24:51 +0800 Subject: [PATCH] jdk 17 --- demo/backend/.gitattributes | 2 + demo/backend/.gitignore | 33 + demo/backend/mvnw | 295 ++ demo/backend/mvnw.cmd | 189 + demo/backend/pom.xml | 63 + .../com/example/demo/DemoApplication.java | 13 + .../src/main/java/com/example/demo/test.http | 41 + .../src/main/resources/application.yml | 70 + .../example/demo/DemoApplicationTests.java | 13 + demo/frontend/.gitignore | 24 + demo/frontend/README.md | 5 + demo/frontend/index.html | 13 + demo/frontend/package.json | 24 + demo/frontend/pnpm-lock.yaml | 976 ++++ demo/frontend/pnpm-workspace.yaml | 2 + demo/frontend/public/vite.svg | 1 + demo/frontend/src/App.vue | 9 + demo/frontend/src/assets/vue.svg | 1 + demo/frontend/src/components/Home.vue | 37 + demo/frontend/src/main.ts | 18 + demo/frontend/src/router/index.ts | 31 + demo/frontend/src/style.css | 79 + demo/frontend/tsconfig.app.json | 16 + demo/frontend/tsconfig.json | 7 + demo/frontend/tsconfig.node.json | 26 + demo/frontend/vite.config.ts | 85 + idp/backend/idp-starter/.gitattributes | 2 + idp/backend/idp-starter/.gitignore | 33 + idp/backend/idp-starter/mvnw | 295 ++ idp/backend/idp-starter/mvnw.cmd | 189 + idp/backend/idp-starter/pom.xml | 168 + .../lingniu/idp/IdpStarterApplication.java | 15 + .../org/lingniu/idp/annotation/Anonymous.java | 15 + .../org/lingniu/idp/annotation/DataScope.java | 29 + .../lingniu/idp/annotation/DataSource.java | 24 + .../java/org/lingniu/idp/annotation/Log.java | 48 + .../lingniu/idp/annotation/RateLimiter.java | 37 + .../lingniu/idp/annotation/RepeatSubmit.java | 26 + .../org/lingniu/idp/annotation/Sensitive.java | 25 + .../lingniu/idp/common/redis/RedisCache.java | 273 ++ .../java/org/lingniu/idp/common/xss/Xss.java | 29 + .../lingniu/idp/common/xss/XssValidator.java | 40 + .../idp/config/AuthorizationServerConfig.java | 202 + .../org/lingniu/idp/config/CaptchaConfig.java | 85 + .../org/lingniu/idp/config/I18nConfig.java | 43 + .../org/lingniu/idp/config/JwtProperties.java | 67 + .../idp/config/KaptchaTextCreator.java | 69 + .../idp/config/OidcUserInfoMapper.java | 106 + .../org/lingniu/idp/config/ProjectConfig.java | 85 + .../org/lingniu/idp/config/RedisConfig.java | 70 + .../lingniu/idp/config/SecurityConfig.java | 117 + .../lingniu/idp/config/ThreadPoolConfig.java | 64 + .../idp/config/TomcatServerConfig.java | 47 + .../FastJson2JsonRedisSerializer.java | 53 + .../serializer/SensitiveJsonSerializer.java | 68 + .../lingniu/idp/constant/CacheConstants.java | 55 + .../org/lingniu/idp/constant/Constants.java | 176 + .../lingniu/idp/constant/UserConstants.java | 81 + .../idp/controller/CaptchaController.java | 97 + .../idp/controller/SysLoginController.java | 45 + .../org/lingniu/idp/controller/login.http | 48 + .../org/lingniu/idp/enums/BusinessStatus.java | 20 + .../org/lingniu/idp/enums/BusinessType.java | 59 + .../org/lingniu/idp/enums/CustomScopes.java | 5 + .../java/org/lingniu/idp/enums/DataScope.java | 24 + .../org/lingniu/idp/enums/DataSourceType.java | 19 + .../lingniu/idp/enums/DesensitizedType.java | 60 + .../org/lingniu/idp/enums/DeviceType.java | 24 + .../org/lingniu/idp/enums/HttpMethod.java | 37 + .../java/org/lingniu/idp/enums/LimitType.java | 20 + .../org/lingniu/idp/enums/OperatorType.java | 24 + .../org/lingniu/idp/enums/RevokeReason.java | 25 + .../org/lingniu/idp/enums/UserStatus.java | 30 + .../idp/exception/DemoModeException.java | 15 + .../idp/exception/GlobalException.java | 58 + .../idp/exception/ServiceException.java | 74 + .../lingniu/idp/exception/UtilException.java | 26 + .../idp/exception/base/BaseException.java | 97 + .../exception/user/BlackListException.java | 18 + .../idp/exception/user/CaptchaException.java | 18 + .../user/CaptchaExpireException.java | 18 + .../idp/exception/user/UserException.java | 18 + .../user/UserNotExistsException.java | 18 + .../user/UserPasswordNotMatchException.java | 18 + ...UserPasswordRetryLimitExceedException.java | 16 + .../org/lingniu/idp/manager/AsyncManager.java | 56 + .../lingniu/idp/manager/ShutdownManager.java | 40 + .../idp/manager/factory/AsyncFactory.java | 103 + .../lingniu/idp/mapper/SysConfigMapper.java | 79 + .../org/lingniu/idp/mapper/SysDeptMapper.java | 122 + .../idp/mapper/SysLogininforMapper.java | 45 + .../org/lingniu/idp/mapper/SysMenuMapper.java | 128 + .../lingniu/idp/mapper/SysOperLogMapper.java | 51 + .../org/lingniu/idp/mapper/SysPostMapper.java | 102 + .../lingniu/idp/mapper/SysRoleDeptMapper.java | 47 + .../org/lingniu/idp/mapper/SysRoleMapper.java | 110 + .../lingniu/idp/mapper/SysRoleMenuMapper.java | 47 + .../org/lingniu/idp/mapper/SysUserMapper.java | 150 + .../lingniu/idp/mapper/SysUserPostMapper.java | 47 + .../lingniu/idp/mapper/SysUserRoleMapper.java | 65 + .../lingniu/idp/model/base/AjaxResult.java | 187 + .../lingniu/idp/model/base/BaseEntity.java | 119 + .../lingniu/idp/model/base/CommonResult.java | 80 + .../lingniu/idp/model/base/TreeSelect.java | 94 + .../idp/model/dto/AccountLoginDto.java | 35 + .../org/lingniu/idp/model/dto/LoginUser.java | 169 + .../idp/model/dto/RegisterAccountDto.java | 11 + .../lingniu/idp/model/entity/SysCache.java | 81 + .../lingniu/idp/model/entity/SysConfig.java | 104 + .../org/lingniu/idp/model/entity/SysDept.java | 102 + .../idp/model/entity/SysLogininfor.java | 134 + .../org/lingniu/idp/model/entity/SysMenu.java | 278 ++ .../lingniu/idp/model/entity/SysOperLog.java | 251 + .../org/lingniu/idp/model/entity/SysPost.java | 72 + .../org/lingniu/idp/model/entity/SysRole.java | 111 + .../lingniu/idp/model/entity/SysRoleDept.java | 46 + .../lingniu/idp/model/entity/SysRoleMenu.java | 46 + .../org/lingniu/idp/model/entity/SysUser.java | 141 + .../idp/model/entity/SysUserOnline.java | 113 + .../lingniu/idp/model/entity/SysUserPost.java | 46 + .../lingniu/idp/model/entity/SysUserRole.java | 46 + .../lingniu/idp/model/vo/AccessTokenInfo.java | 246 + .../lingniu/idp/model/vo/DataPermission.java | 20 + .../java/org/lingniu/idp/model/vo/MetaVo.java | 107 + .../idp/model/vo/RefreshTokenInfo.java | 436 ++ .../org/lingniu/idp/model/vo/RouterVo.java | 149 + .../org/lingniu/idp/model/vo/TokenInfo.java | 20 + .../context/AuthenticationContextHolder.java | 28 + .../context/PermissionContextHolder.java | 27 + .../SmsCodeAuthenticationConverter.java | 25 + .../filter/IdpAuthenticationFilter.java | 83 + .../MobilePasswordAuthenticationFilter.java | 35 + .../granttype/CaptchaCodeGrantType.java | 7 + .../security/granttype/SmsCodeGrantType.java | 7 + .../handler/AuthenticationEntryPointImpl.java | 35 + .../handler/GlobalExceptionHandler.java | 145 + .../security/handler/LoginSuccessHandler.java | 47 + .../handler/LogoutSuccessHandlerImpl.java | 51 + .../handler/Oauth2CodeSuccessHandler.java | 49 + .../MobilePasswordAuthenticationProvider.java | 45 + .../SmsCodeAuthenticationProvider.java | 74 + .../token/BaseAuthenticationToken.java | 70 + .../MobilePasswordAuthenticationToken.java | 31 + .../token/SmsCodeAuthenticationToken.java | 45 + .../idp/service/ISysConfigService.java | 89 + .../lingniu/idp/service/ISysDeptService.java | 128 + .../idp/service/ISysLogininforService.java | 40 + .../lingniu/idp/service/ISysMenuService.java | 144 + .../idp/service/ISysOperLogService.java | 48 + .../lingniu/idp/service/ISysPostService.java | 99 + .../lingniu/idp/service/ISysRoleService.java | 173 + .../idp/service/ISysUserOnlineService.java | 48 + .../lingniu/idp/service/ISysUserService.java | 217 + .../idp/service/core/CaptchaService.java | 72 + .../idp/service/core/SmsCodeService.java | 82 + .../service/core/SysPermissionService.java | 200 + .../service/core/UserDetailsServiceImpl.java | 62 + .../service/core/login/IdpTokenService.java | 202 + .../idp/service/core/login/LoginService.java | 177 + .../core/login/RedisAccessTokenService.java | 84 + .../core/login/RedisRefreshTokenService.java | 72 + .../service/core/login/SecurityEnhancer.java | 138 + .../service/impl/SysConfigServiceImpl.java | 233 + .../idp/service/impl/SysDeptServiceImpl.java | 345 ++ .../impl/SysLogininforServiceImpl.java | 65 + .../idp/service/impl/SysMenuServiceImpl.java | 543 +++ .../service/impl/SysOperLogServiceImpl.java | 76 + .../idp/service/impl/SysPostServiceImpl.java | 178 + .../idp/service/impl/SysRoleServiceImpl.java | 427 ++ .../impl/SysUserOnlineServiceImpl.java | 96 + .../idp/service/impl/SysUserServiceImpl.java | 566 +++ .../idp/utils/ClientCredentialUtil.java | 92 + .../java/org/lingniu/idp/utils/DateUtils.java | 188 + .../lingniu/idp/utils/DesensitizedUtil.java | 49 + .../idp/utils/DeviceFingerprintUtil.java | 32 + .../org/lingniu/idp/utils/EscapeUtil.java | 166 + .../org/lingniu/idp/utils/HTMLFilter.java | 566 +++ .../java/org/lingniu/idp/utils/JsonUtils.java | 46 + .../java/org/lingniu/idp/utils/LogUtils.java | 18 + .../org/lingniu/idp/utils/MessageUtils.java | 26 + .../org/lingniu/idp/utils/SecurityUtils.java | 179 + .../org/lingniu/idp/utils/ServletUtils.java | 219 + .../org/lingniu/idp/utils/StringUtils.java | 718 +++ .../java/org/lingniu/idp/utils/Threads.java | 96 + .../org/lingniu/idp/utils/bean/BeanUtils.java | 110 + .../idp/utils/bean/BeanValidators.java | 26 + .../lingniu/idp/utils/http/HttpHelper.java | 56 + .../org/lingniu/idp/utils/http/HttpUtils.java | 285 ++ .../idp/utils/http/UserAgentUtils.java | 255 + .../lingniu/idp/utils/ip/AddressUtils.java | 57 + .../org/lingniu/idp/utils/ip/IpUtils.java | 383 ++ .../java/org/lingniu/idp/utils/jwt/Jwks.java | 83 + .../org/lingniu/idp/utils/jwt/JwtUtil.java | 389 ++ .../idp/utils/jwt/RsaKeyGenerator.java | 31 + .../org/lingniu/idp/utils/sign/Base64.java | 291 ++ .../org/lingniu/idp/utils/sign/Md5Utils.java | 68 + .../lingniu/idp/utils/spring/SpringUtils.java | 164 + .../lingniu/idp/utils/text/CharsetKit.java | 87 + .../org/lingniu/idp/utils/text/Convert.java | 1020 ++++ .../lingniu/idp/utils/text/StrFormatter.java | 92 + .../org/lingniu/idp/utils/uuid/IdUtils.java | 49 + .../java/org/lingniu/idp/utils/uuid/Seq.java | 87 + .../java/org/lingniu/idp/utils/uuid/UUID.java | 485 ++ .../src/main/resources/application.yml | 115 + .../idp-starter/src/main/resources/auth.sql | 54 + .../main/resources/i18n/messages.properties | 38 + .../src/main/resources/keystore.p12 | Bin 0 -> 6047 bytes .../main/resources/mapper/SysConfigMapper.xml | 117 + .../main/resources/mapper/SysDeptMapper.xml | 169 + .../resources/mapper/SysLogininforMapper.xml | 57 + .../main/resources/mapper/SysMenuMapper.xml | 206 + .../resources/mapper/SysOperLogMapper.xml | 87 + .../main/resources/mapper/SysPostMapper.xml | 122 + .../resources/mapper/SysRoleDeptMapper.xml | 34 + .../main/resources/mapper/SysRoleMapper.xml | 152 + .../resources/mapper/SysRoleMenuMapper.xml | 34 + .../main/resources/mapper/SysUserMapper.xml | 178 + .../resources/mapper/SysUserPostMapper.xml | 34 + .../resources/mapper/SysUserRoleMapper.xml | 44 + .../idp/IdpStarterApplicationTests.java | 13 + idp/frontend/.env.development | 10 + idp/frontend/.env.production | 13 + idp/frontend/.env.staging | 13 + idp/frontend/crypto-js.d.ts | 26 + idp/frontend/index.html | 215 + idp/frontend/package.json | 35 + idp/frontend/pnpm-lock.yaml | 4326 +++++++++++++++++ idp/frontend/src/App.vue | 17 + idp/frontend/src/api/login.ts | 103 + idp/frontend/src/assets/401_images/401.gif | Bin 0 -> 164227 bytes idp/frontend/src/assets/404_images/404.png | Bin 0 -> 98071 bytes .../src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes idp/frontend/src/assets/icons/svg/404.svg | 1 + idp/frontend/src/assets/icons/svg/bug.svg | 1 + idp/frontend/src/assets/icons/svg/build.svg | 1 + idp/frontend/src/assets/icons/svg/button.svg | 1 + .../src/assets/icons/svg/cascader.svg | 1 + idp/frontend/src/assets/icons/svg/chart.svg | 1 + .../src/assets/icons/svg/checkbox.svg | 1 + .../src/assets/icons/svg/clipboard.svg | 1 + idp/frontend/src/assets/icons/svg/code.svg | 1 + idp/frontend/src/assets/icons/svg/color.svg | 1 + .../src/assets/icons/svg/component.svg | 1 + .../src/assets/icons/svg/dashboard.svg | 1 + .../src/assets/icons/svg/date-range.svg | 1 + idp/frontend/src/assets/icons/svg/date.svg | 1 + idp/frontend/src/assets/icons/svg/dict.svg | 1 + .../src/assets/icons/svg/documentation.svg | 1 + .../src/assets/icons/svg/download.svg | 1 + idp/frontend/src/assets/icons/svg/drag.svg | 1 + idp/frontend/src/assets/icons/svg/druid.svg | 1 + idp/frontend/src/assets/icons/svg/edit.svg | 1 + .../src/assets/icons/svg/education.svg | 1 + idp/frontend/src/assets/icons/svg/email.svg | 1 + idp/frontend/src/assets/icons/svg/enter.svg | 1 + idp/frontend/src/assets/icons/svg/example.svg | 1 + idp/frontend/src/assets/icons/svg/excel.svg | 1 + .../src/assets/icons/svg/exit-fullscreen.svg | 1 + .../src/assets/icons/svg/eye-open.svg | 1 + idp/frontend/src/assets/icons/svg/eye.svg | 1 + idp/frontend/src/assets/icons/svg/form.svg | 1 + .../src/assets/icons/svg/fullscreen.svg | 1 + idp/frontend/src/assets/icons/svg/github.svg | 1 + idp/frontend/src/assets/icons/svg/guide.svg | 1 + idp/frontend/src/assets/icons/svg/icon.svg | 1 + idp/frontend/src/assets/icons/svg/input.svg | 1 + .../src/assets/icons/svg/international.svg | 1 + idp/frontend/src/assets/icons/svg/job.svg | 1 + .../src/assets/icons/svg/language.svg | 1 + idp/frontend/src/assets/icons/svg/link.svg | 1 + idp/frontend/src/assets/icons/svg/list.svg | 1 + idp/frontend/src/assets/icons/svg/lock.svg | 1 + idp/frontend/src/assets/icons/svg/log.svg | 1 + .../src/assets/icons/svg/logininfor.svg | 1 + idp/frontend/src/assets/icons/svg/message.svg | 1 + idp/frontend/src/assets/icons/svg/money.svg | 1 + idp/frontend/src/assets/icons/svg/monitor.svg | 2 + idp/frontend/src/assets/icons/svg/moon.svg | 1 + idp/frontend/src/assets/icons/svg/more-up.svg | 1 + idp/frontend/src/assets/icons/svg/nested.svg | 1 + idp/frontend/src/assets/icons/svg/number.svg | 1 + idp/frontend/src/assets/icons/svg/online.svg | 1 + .../src/assets/icons/svg/password.svg | 1 + idp/frontend/src/assets/icons/svg/pdf.svg | 1 + idp/frontend/src/assets/icons/svg/people.svg | 1 + idp/frontend/src/assets/icons/svg/peoples.svg | 1 + idp/frontend/src/assets/icons/svg/phone.svg | 1 + idp/frontend/src/assets/icons/svg/post.svg | 1 + idp/frontend/src/assets/icons/svg/qq.svg | 1 + .../src/assets/icons/svg/question.svg | 1 + idp/frontend/src/assets/icons/svg/radio.svg | 1 + idp/frontend/src/assets/icons/svg/rate.svg | 1 + .../src/assets/icons/svg/redis-list.svg | 2 + idp/frontend/src/assets/icons/svg/redis.svg | 1 + idp/frontend/src/assets/icons/svg/row.svg | 1 + idp/frontend/src/assets/icons/svg/search.svg | 1 + idp/frontend/src/assets/icons/svg/select.svg | 1 + idp/frontend/src/assets/icons/svg/server.svg | 1 + .../src/assets/icons/svg/shopping.svg | 1 + idp/frontend/src/assets/icons/svg/size.svg | 1 + idp/frontend/src/assets/icons/svg/skill.svg | 1 + idp/frontend/src/assets/icons/svg/slider.svg | 1 + idp/frontend/src/assets/icons/svg/star.svg | 1 + idp/frontend/src/assets/icons/svg/sunny.svg | 1 + idp/frontend/src/assets/icons/svg/swagger.svg | 1 + idp/frontend/src/assets/icons/svg/switch.svg | 1 + idp/frontend/src/assets/icons/svg/system.svg | 2 + idp/frontend/src/assets/icons/svg/tab.svg | 1 + idp/frontend/src/assets/icons/svg/table.svg | 1 + .../src/assets/icons/svg/textarea.svg | 1 + idp/frontend/src/assets/icons/svg/theme.svg | 1 + .../src/assets/icons/svg/time-range.svg | 1 + idp/frontend/src/assets/icons/svg/time.svg | 1 + idp/frontend/src/assets/icons/svg/tool.svg | 1 + .../src/assets/icons/svg/tree-table.svg | 1 + idp/frontend/src/assets/icons/svg/tree.svg | 1 + idp/frontend/src/assets/icons/svg/upload.svg | 1 + idp/frontend/src/assets/icons/svg/user.svg | 1 + .../src/assets/icons/svg/validCode.svg | 1 + idp/frontend/src/assets/icons/svg/wechat.svg | 1 + idp/frontend/src/assets/icons/svg/zip.svg | 1 + idp/frontend/src/assets/images/login.png | Bin 0 -> 2859847 bytes idp/frontend/src/assets/styles/btn.scss | 99 + .../src/assets/styles/element-ui.scss | 96 + idp/frontend/src/assets/styles/idp.scss | 308 ++ idp/frontend/src/assets/styles/index.scss | 179 + idp/frontend/src/assets/styles/mixin.scss | 66 + idp/frontend/src/assets/styles/sidebar.scss | 238 + .../src/assets/styles/transition.scss | 80 + .../src/assets/styles/variables.module.scss | 271 ++ idp/frontend/src/components/SvgIcon/index.ts | 3 + idp/frontend/src/components/SvgIcon/index.vue | 46 + .../src/components/SvgIcon/svgicon.ts | 13 + idp/frontend/src/main.ts | 18 + idp/frontend/src/router/index.ts | 87 + idp/frontend/src/settings.ts | 57 + idp/frontend/src/stores/auth.ts | 264 + idp/frontend/src/stores/index.ts | 5 + idp/frontend/src/stores/user.ts | 108 + idp/frontend/src/types/crypto-js.d.ts | 36 + idp/frontend/src/types/index.ts | 55 + idp/frontend/src/utils/auth.ts | 15 + idp/frontend/src/utils/cache.ts | 93 + idp/frontend/src/utils/encryptor.ts | 69 + idp/frontend/src/utils/errorCode.ts | 20 + idp/frontend/src/utils/jsencrypt.ts | 27 + idp/frontend/src/utils/request.ts | 179 + idp/frontend/src/utils/storage.ts | 358 ++ idp/frontend/src/utils/validate.ts | 114 + idp/frontend/src/views/LoginPage.vue | 258 + .../src/views/login/PasswordLogin.vue | 126 + idp/frontend/src/views/login/SmsLogin.vue | 162 + idp/frontend/src/views/login/Sso.vue | 96 + .../src/views/login/ThirdPartyLogin.vue | 193 + idp/frontend/src/vite-env.d.ts | 18 + idp/frontend/tsconfig.json | 32 + idp/frontend/tsconfig.node.json | 16 + idp/frontend/vite-env.d.ts | 27 + idp/frontend/vite.config.ts | 79 + idp/frontend/vite/plugins/auto-import.ts | 13 + idp/frontend/vite/plugins/compression.ts | 33 + idp/frontend/vite/plugins/index.ts | 20 + idp/frontend/vite/plugins/setup-extend.ts | 6 + idp/frontend/vite/plugins/svg-icon.ts | 11 + sdk/backend/oauth2-login-sdk/pom.xml | 135 + .../lingniu/sdk/common/redis/RedisCache.java | 271 ++ .../FastJson2JsonRedisSerializer.java | 53 + .../sdk/config/JacksonConfiguration.java | 97 + .../lingniu/sdk/config/SdkRedisConfig.java | 68 + .../lingniu/sdk/config/SecurityConfig.java | 105 + .../lingniu/sdk/constant/CacheConstants.java | 24 + .../org/lingniu/sdk/constant/Constants.java | 174 + .../lingniu/sdk/constant/UserConstants.java | 81 + .../sdk/filter/IdpAuthenticationFilter.java | 54 + .../sdk/handler/LoginSuccessHandler.java | 61 + .../sdk/handler/LogoutIdpSuccessHandler.java | 36 + .../lingniu/sdk/handler/RedirectHandler.java | 30 + .../lingniu/sdk/model/base/CommonResult.java | 78 + .../sdk/model/token/AccessTokenInfo.java | 152 + .../sdk/model/token/RefreshTokenInfo.java | 226 + .../lingniu/sdk/model/token/TokenInfo.java | 22 + .../sdk/model/user/DataPermission.java | 23 + .../org/lingniu/sdk/model/user/UserDept.java | 36 + .../org/lingniu/sdk/model/user/UserInfo.java | 78 + .../org/lingniu/sdk/model/user/UserPost.java | 31 + .../sdk/service/RedisAccessTokenService.java | 89 + ...RedisOAuth2AuthorizedClientRepository.java | 248 + .../RedisOAuth2AuthorizedClientService.java | 50 + .../sdk/service/RedisRefreshTokenService.java | 81 + .../org/lingniu/sdk/service/TokenService.java | 240 + .../lingniu/sdk/utils/HttpClientUtils.java | 111 + .../org/lingniu/sdk/web/UserController.java | 41 + .../lingniu/sdk/common/redis/RedisCache.class | Bin 0 -> 8580 bytes .../FastJson2JsonRedisSerializer.class | Bin 0 -> 2779 bytes .../sdk/config/JacksonConfiguration.class | Bin 0 -> 5682 bytes .../lingniu/sdk/config/SdkRedisConfig.class | Bin 0 -> 4357 bytes .../lingniu/sdk/config/SecurityConfig.class | Bin 0 -> 10219 bytes .../lingniu/sdk/constant/CacheConstants.class | Bin 0 -> 667 bytes .../org/lingniu/sdk/constant/Constants.class | Bin 0 -> 2265 bytes .../lingniu/sdk/constant/UserConstants.class | Bin 0 -> 1187 bytes .../sdk/filter/IdpAuthenticationFilter.class | Bin 0 -> 2871 bytes .../sdk/handler/LoginSuccessHandler.class | Bin 0 -> 4093 bytes .../sdk/handler/LogoutIdpSuccessHandler.class | Bin 0 -> 2234 bytes .../lingniu/sdk/handler/RedirectHandler.class | Bin 0 -> 1824 bytes .../lingniu/sdk/model/base/CommonResult.class | Bin 0 -> 5103 bytes ...cessTokenInfo$AccessTokenInfoBuilder.class | Bin 0 -> 3089 bytes .../sdk/model/token/AccessTokenInfo.class | Bin 0 -> 9051 bytes ...eshTokenInfo$RefreshTokenInfoBuilder.class | Bin 0 -> 3513 bytes .../sdk/model/token/RefreshTokenInfo.class | Bin 0 -> 11185 bytes .../token/TokenInfo$TokenInfoBuilder.class | Bin 0 -> 2060 bytes .../lingniu/sdk/model/token/TokenInfo.class | Bin 0 -> 3314 bytes .../sdk/model/user/DataPermission.class | Bin 0 -> 3399 bytes .../org/lingniu/sdk/model/user/UserDept.class | Bin 0 -> 4957 bytes .../org/lingniu/sdk/model/user/UserInfo.class | Bin 0 -> 8028 bytes .../org/lingniu/sdk/model/user/UserPost.class | Bin 0 -> 4018 bytes .../sdk/service/RedisAccessTokenService.class | Bin 0 -> 3379 bytes ...isOAuth2AuthorizedClientRepository$1.class | Bin 0 -> 1073 bytes ...edisOAuth2AuthorizedClientRepository.class | Bin 0 -> 11722 bytes .../RedisOAuth2AuthorizedClientService.class | Bin 0 -> 2813 bytes .../service/RedisRefreshTokenService.class | Bin 0 -> 3190 bytes .../lingniu/sdk/service/TokenService.class | Bin 0 -> 15526 bytes .../lingniu/sdk/utils/HttpClientUtils.class | Bin 0 -> 6993 bytes .../org/lingniu/sdk/web/UserController.class | Bin 0 -> 3870 bytes .../target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 30 + .../compile/default-compile/inputFiles.lst | 26 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 .../target/oauth2-login-sdk-1.0-SNAPSHOT.jar | Bin 0 -> 65432 bytes sdk/frontend/oauth2-login-sdk/README.md | 533 ++ .../oauth2-login-sdk/dist/core/auth.d.ts | 101 + .../oauth2-login-sdk/dist/core/auth.d.ts.map | 1 + .../oauth2-login-sdk/dist/core/auth.js | 241 + .../oauth2-login-sdk/dist/core/auth.js.map | 1 + .../oauth2-login-sdk/dist/core/http.d.ts | 155 + .../oauth2-login-sdk/dist/core/http.d.ts.map | 1 + .../oauth2-login-sdk/dist/core/http.js | 274 ++ .../oauth2-login-sdk/dist/core/http.js.map | 1 + .../oauth2-login-sdk/dist/core/token.d.ts | 32 + .../oauth2-login-sdk/dist/core/token.d.ts.map | 1 + .../oauth2-login-sdk/dist/core/token.js | 38 + .../oauth2-login-sdk/dist/core/token.js.map | 1 + .../oauth2-login-sdk/dist/guards/router.d.ts | 55 + .../dist/guards/router.d.ts.map | 1 + .../oauth2-login-sdk/dist/guards/router.js | 89 + .../dist/guards/router.js.map | 1 + sdk/frontend/oauth2-login-sdk/dist/index.d.ts | 20 + .../oauth2-login-sdk/dist/index.d.ts.map | 1 + .../oauth2-login-sdk/dist/index.esm.js | 1192 +++++ .../oauth2-login-sdk/dist/index.esm.js.map | 1 + sdk/frontend/oauth2-login-sdk/dist/index.js | 1211 +++++ .../oauth2-login-sdk/dist/index.js.map | 1 + .../oauth2-login-sdk/dist/plugins/vue.d.ts | 56 + .../dist/plugins/vue.d.ts.map | 1 + .../oauth2-login-sdk/dist/plugins/vue.js | 93 + .../oauth2-login-sdk/dist/plugins/vue.js.map | 1 + .../oauth2-login-sdk/dist/types/config.d.ts | 39 + .../dist/types/config.d.ts.map | 1 + .../oauth2-login-sdk/dist/types/config.js | 2 + .../oauth2-login-sdk/dist/types/config.js.map | 1 + .../oauth2-login-sdk/dist/types/index.d.ts | 80 + .../dist/types/index.d.ts.map | 1 + .../oauth2-login-sdk/dist/types/index.js | 3 + .../oauth2-login-sdk/dist/types/index.js.map | 1 + .../oauth2-login-sdk/dist/types/user.d.ts | 83 + .../oauth2-login-sdk/dist/types/user.d.ts.map | 1 + .../oauth2-login-sdk/dist/types/user.js | 2 + .../oauth2-login-sdk/dist/types/user.js.map | 1 + .../oauth2-login-sdk/dist/utils/storage.d.ts | 108 + .../dist/utils/storage.d.ts.map | 1 + .../oauth2-login-sdk/dist/utils/storage.js | 316 ++ .../dist/utils/storage.js.map | 1 + .../oauth2-login-sdk/dist/utils/url.d.ts | 55 + .../oauth2-login-sdk/dist/utils/url.d.ts.map | 1 + .../oauth2-login-sdk/dist/utils/url.js | 100 + .../oauth2-login-sdk/dist/utils/url.js.map | 1 + sdk/frontend/oauth2-login-sdk/package.json | 41 + sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml | 2103 ++++++++ .../oauth2-login-sdk/rollup.config.js | 23 + .../oauth2-login-sdk/src/core/auth.ts | 280 ++ .../oauth2-login-sdk/src/core/http.ts | 370 ++ .../oauth2-login-sdk/src/core/token.ts | 45 + .../oauth2-login-sdk/src/guards/router.ts | 130 + sdk/frontend/oauth2-login-sdk/src/index.ts | 94 + .../oauth2-login-sdk/src/plugins/vue.ts | 121 + .../oauth2-login-sdk/src/types/config.ts | 40 + .../oauth2-login-sdk/src/types/index.ts | 94 + .../oauth2-login-sdk/src/types/user.ts | 88 + .../oauth2-login-sdk/src/utils/storage.ts | 358 ++ .../oauth2-login-sdk/src/utils/url.ts | 125 + sdk/frontend/oauth2-login-sdk/tsconfig.json | 27 + 491 files changed, 43791 insertions(+) create mode 100644 demo/backend/.gitattributes create mode 100644 demo/backend/.gitignore create mode 100644 demo/backend/mvnw create mode 100644 demo/backend/mvnw.cmd create mode 100644 demo/backend/pom.xml create mode 100644 demo/backend/src/main/java/com/example/demo/DemoApplication.java create mode 100644 demo/backend/src/main/java/com/example/demo/test.http create mode 100644 demo/backend/src/main/resources/application.yml create mode 100644 demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java create mode 100644 demo/frontend/.gitignore create mode 100644 demo/frontend/README.md create mode 100644 demo/frontend/index.html create mode 100644 demo/frontend/package.json create mode 100644 demo/frontend/pnpm-lock.yaml create mode 100644 demo/frontend/pnpm-workspace.yaml create mode 100644 demo/frontend/public/vite.svg create mode 100644 demo/frontend/src/App.vue create mode 100644 demo/frontend/src/assets/vue.svg create mode 100644 demo/frontend/src/components/Home.vue create mode 100644 demo/frontend/src/main.ts create mode 100644 demo/frontend/src/router/index.ts create mode 100644 demo/frontend/src/style.css create mode 100644 demo/frontend/tsconfig.app.json create mode 100644 demo/frontend/tsconfig.json create mode 100644 demo/frontend/tsconfig.node.json create mode 100644 demo/frontend/vite.config.ts create mode 100644 idp/backend/idp-starter/.gitattributes create mode 100644 idp/backend/idp-starter/.gitignore create mode 100644 idp/backend/idp-starter/mvnw create mode 100644 idp/backend/idp-starter/mvnw.cmd create mode 100644 idp/backend/idp-starter/pom.xml create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/IdpStarterApplication.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Anonymous.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataScope.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataSource.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Log.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RateLimiter.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RepeatSubmit.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Sensitive.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/redis/RedisCache.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/Xss.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/XssValidator.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/I18nConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/JwtProperties.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/KaptchaTextCreator.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/OidcUserInfoMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ProjectConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/RedisConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/SecurityConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ThreadPoolConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/TomcatServerConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/FastJson2JsonRedisSerializer.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/SensitiveJsonSerializer.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/CacheConstants.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/Constants.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/UserConstants.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/CaptchaController.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/SysLoginController.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessStatus.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/CustomScopes.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataScope.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataSourceType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DesensitizedType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DeviceType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/HttpMethod.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/LimitType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/OperatorType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/RevokeReason.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/UserStatus.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/DemoModeException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/GlobalException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/ServiceException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/UtilException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/base/BaseException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/BlackListException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaExpireException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserNotExistsException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordNotMatchException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordRetryLimitExceedException.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/AsyncManager.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/ShutdownManager.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/factory/AsyncFactory.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysConfigMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysDeptMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysLogininforMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysMenuMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysOperLogMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysPostMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleDeptMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMenuMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserPostMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserRoleMapper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/AjaxResult.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/BaseEntity.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/CommonResult.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/TreeSelect.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/AccountLoginDto.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/LoginUser.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/RegisterAccountDto.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysCache.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysConfig.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysDept.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysLogininfor.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysMenu.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysOperLog.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysPost.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRole.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleDept.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleMenu.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUser.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserOnline.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserPost.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserRole.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/DataPermission.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/MetaVo.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RefreshTokenInfo.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RouterVo.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/TokenInfo.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/AuthenticationContextHolder.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/PermissionContextHolder.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/converter/SmsCodeAuthenticationConverter.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/IdpAuthenticationFilter.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/login/MobilePasswordAuthenticationFilter.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/CaptchaCodeGrantType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/SmsCodeGrantType.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/AuthenticationEntryPointImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/GlobalExceptionHandler.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LoginSuccessHandler.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LogoutSuccessHandlerImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/Oauth2CodeSuccessHandler.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/MobilePasswordAuthenticationProvider.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/SmsCodeAuthenticationProvider.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/BaseAuthenticationToken.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/MobilePasswordAuthenticationToken.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/SmsCodeAuthenticationToken.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysConfigService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysDeptService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysLogininforService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysMenuService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysOperLogService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysPostService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysRoleService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserOnlineService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/CaptchaService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SmsCodeService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SysPermissionService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/UserDetailsServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/IdpTokenService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/LoginService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisAccessTokenService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisRefreshTokenService.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/SecurityEnhancer.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysConfigServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysDeptServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysLogininforServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysMenuServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysOperLogServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysPostServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysRoleServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserOnlineServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserServiceImpl.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DateUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DesensitizedUtil.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DeviceFingerprintUtil.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/EscapeUtil.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/HTMLFilter.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/JsonUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/LogUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/MessageUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/SecurityUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ServletUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/StringUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/Threads.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanValidators.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpHelper.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/UserAgentUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/AddressUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/IpUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/Jwks.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/JwtUtil.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/RsaKeyGenerator.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Base64.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Md5Utils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/spring/SpringUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/CharsetKit.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/Convert.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/StrFormatter.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/IdUtils.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/Seq.java create mode 100644 idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/UUID.java create mode 100644 idp/backend/idp-starter/src/main/resources/application.yml create mode 100644 idp/backend/idp-starter/src/main/resources/auth.sql create mode 100644 idp/backend/idp-starter/src/main/resources/i18n/messages.properties create mode 100644 idp/backend/idp-starter/src/main/resources/keystore.p12 create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysConfigMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysDeptMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysLogininforMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysMenuMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysOperLogMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysPostMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysRoleDeptMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysRoleMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysRoleMenuMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysUserMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysUserPostMapper.xml create mode 100644 idp/backend/idp-starter/src/main/resources/mapper/SysUserRoleMapper.xml create mode 100644 idp/backend/idp-starter/src/test/java/org/lingniu/idp/IdpStarterApplicationTests.java create mode 100644 idp/frontend/.env.development create mode 100644 idp/frontend/.env.production create mode 100644 idp/frontend/.env.staging create mode 100644 idp/frontend/crypto-js.d.ts create mode 100644 idp/frontend/index.html create mode 100644 idp/frontend/package.json create mode 100644 idp/frontend/pnpm-lock.yaml create mode 100644 idp/frontend/src/App.vue create mode 100644 idp/frontend/src/api/login.ts create mode 100644 idp/frontend/src/assets/401_images/401.gif create mode 100644 idp/frontend/src/assets/404_images/404.png create mode 100644 idp/frontend/src/assets/404_images/404_cloud.png create mode 100644 idp/frontend/src/assets/icons/svg/404.svg create mode 100644 idp/frontend/src/assets/icons/svg/bug.svg create mode 100644 idp/frontend/src/assets/icons/svg/build.svg create mode 100644 idp/frontend/src/assets/icons/svg/button.svg create mode 100644 idp/frontend/src/assets/icons/svg/cascader.svg create mode 100644 idp/frontend/src/assets/icons/svg/chart.svg create mode 100644 idp/frontend/src/assets/icons/svg/checkbox.svg create mode 100644 idp/frontend/src/assets/icons/svg/clipboard.svg create mode 100644 idp/frontend/src/assets/icons/svg/code.svg create mode 100644 idp/frontend/src/assets/icons/svg/color.svg create mode 100644 idp/frontend/src/assets/icons/svg/component.svg create mode 100644 idp/frontend/src/assets/icons/svg/dashboard.svg create mode 100644 idp/frontend/src/assets/icons/svg/date-range.svg create mode 100644 idp/frontend/src/assets/icons/svg/date.svg create mode 100644 idp/frontend/src/assets/icons/svg/dict.svg create mode 100644 idp/frontend/src/assets/icons/svg/documentation.svg create mode 100644 idp/frontend/src/assets/icons/svg/download.svg create mode 100644 idp/frontend/src/assets/icons/svg/drag.svg create mode 100644 idp/frontend/src/assets/icons/svg/druid.svg create mode 100644 idp/frontend/src/assets/icons/svg/edit.svg create mode 100644 idp/frontend/src/assets/icons/svg/education.svg create mode 100644 idp/frontend/src/assets/icons/svg/email.svg create mode 100644 idp/frontend/src/assets/icons/svg/enter.svg create mode 100644 idp/frontend/src/assets/icons/svg/example.svg create mode 100644 idp/frontend/src/assets/icons/svg/excel.svg create mode 100644 idp/frontend/src/assets/icons/svg/exit-fullscreen.svg create mode 100644 idp/frontend/src/assets/icons/svg/eye-open.svg create mode 100644 idp/frontend/src/assets/icons/svg/eye.svg create mode 100644 idp/frontend/src/assets/icons/svg/form.svg create mode 100644 idp/frontend/src/assets/icons/svg/fullscreen.svg create mode 100644 idp/frontend/src/assets/icons/svg/github.svg create mode 100644 idp/frontend/src/assets/icons/svg/guide.svg create mode 100644 idp/frontend/src/assets/icons/svg/icon.svg create mode 100644 idp/frontend/src/assets/icons/svg/input.svg create mode 100644 idp/frontend/src/assets/icons/svg/international.svg create mode 100644 idp/frontend/src/assets/icons/svg/job.svg create mode 100644 idp/frontend/src/assets/icons/svg/language.svg create mode 100644 idp/frontend/src/assets/icons/svg/link.svg create mode 100644 idp/frontend/src/assets/icons/svg/list.svg create mode 100644 idp/frontend/src/assets/icons/svg/lock.svg create mode 100644 idp/frontend/src/assets/icons/svg/log.svg create mode 100644 idp/frontend/src/assets/icons/svg/logininfor.svg create mode 100644 idp/frontend/src/assets/icons/svg/message.svg create mode 100644 idp/frontend/src/assets/icons/svg/money.svg create mode 100644 idp/frontend/src/assets/icons/svg/monitor.svg create mode 100644 idp/frontend/src/assets/icons/svg/moon.svg create mode 100644 idp/frontend/src/assets/icons/svg/more-up.svg create mode 100644 idp/frontend/src/assets/icons/svg/nested.svg create mode 100644 idp/frontend/src/assets/icons/svg/number.svg create mode 100644 idp/frontend/src/assets/icons/svg/online.svg create mode 100644 idp/frontend/src/assets/icons/svg/password.svg create mode 100644 idp/frontend/src/assets/icons/svg/pdf.svg create mode 100644 idp/frontend/src/assets/icons/svg/people.svg create mode 100644 idp/frontend/src/assets/icons/svg/peoples.svg create mode 100644 idp/frontend/src/assets/icons/svg/phone.svg create mode 100644 idp/frontend/src/assets/icons/svg/post.svg create mode 100644 idp/frontend/src/assets/icons/svg/qq.svg create mode 100644 idp/frontend/src/assets/icons/svg/question.svg create mode 100644 idp/frontend/src/assets/icons/svg/radio.svg create mode 100644 idp/frontend/src/assets/icons/svg/rate.svg create mode 100644 idp/frontend/src/assets/icons/svg/redis-list.svg create mode 100644 idp/frontend/src/assets/icons/svg/redis.svg create mode 100644 idp/frontend/src/assets/icons/svg/row.svg create mode 100644 idp/frontend/src/assets/icons/svg/search.svg create mode 100644 idp/frontend/src/assets/icons/svg/select.svg create mode 100644 idp/frontend/src/assets/icons/svg/server.svg create mode 100644 idp/frontend/src/assets/icons/svg/shopping.svg create mode 100644 idp/frontend/src/assets/icons/svg/size.svg create mode 100644 idp/frontend/src/assets/icons/svg/skill.svg create mode 100644 idp/frontend/src/assets/icons/svg/slider.svg create mode 100644 idp/frontend/src/assets/icons/svg/star.svg create mode 100644 idp/frontend/src/assets/icons/svg/sunny.svg create mode 100644 idp/frontend/src/assets/icons/svg/swagger.svg create mode 100644 idp/frontend/src/assets/icons/svg/switch.svg create mode 100644 idp/frontend/src/assets/icons/svg/system.svg create mode 100644 idp/frontend/src/assets/icons/svg/tab.svg create mode 100644 idp/frontend/src/assets/icons/svg/table.svg create mode 100644 idp/frontend/src/assets/icons/svg/textarea.svg create mode 100644 idp/frontend/src/assets/icons/svg/theme.svg create mode 100644 idp/frontend/src/assets/icons/svg/time-range.svg create mode 100644 idp/frontend/src/assets/icons/svg/time.svg create mode 100644 idp/frontend/src/assets/icons/svg/tool.svg create mode 100644 idp/frontend/src/assets/icons/svg/tree-table.svg create mode 100644 idp/frontend/src/assets/icons/svg/tree.svg create mode 100644 idp/frontend/src/assets/icons/svg/upload.svg create mode 100644 idp/frontend/src/assets/icons/svg/user.svg create mode 100644 idp/frontend/src/assets/icons/svg/validCode.svg create mode 100644 idp/frontend/src/assets/icons/svg/wechat.svg create mode 100644 idp/frontend/src/assets/icons/svg/zip.svg create mode 100644 idp/frontend/src/assets/images/login.png create mode 100644 idp/frontend/src/assets/styles/btn.scss create mode 100644 idp/frontend/src/assets/styles/element-ui.scss create mode 100644 idp/frontend/src/assets/styles/idp.scss create mode 100644 idp/frontend/src/assets/styles/index.scss create mode 100644 idp/frontend/src/assets/styles/mixin.scss create mode 100644 idp/frontend/src/assets/styles/sidebar.scss create mode 100644 idp/frontend/src/assets/styles/transition.scss create mode 100644 idp/frontend/src/assets/styles/variables.module.scss create mode 100644 idp/frontend/src/components/SvgIcon/index.ts create mode 100644 idp/frontend/src/components/SvgIcon/index.vue create mode 100644 idp/frontend/src/components/SvgIcon/svgicon.ts create mode 100644 idp/frontend/src/main.ts create mode 100644 idp/frontend/src/router/index.ts create mode 100644 idp/frontend/src/settings.ts create mode 100644 idp/frontend/src/stores/auth.ts create mode 100644 idp/frontend/src/stores/index.ts create mode 100644 idp/frontend/src/stores/user.ts create mode 100644 idp/frontend/src/types/crypto-js.d.ts create mode 100644 idp/frontend/src/types/index.ts create mode 100644 idp/frontend/src/utils/auth.ts create mode 100644 idp/frontend/src/utils/cache.ts create mode 100644 idp/frontend/src/utils/encryptor.ts create mode 100644 idp/frontend/src/utils/errorCode.ts create mode 100644 idp/frontend/src/utils/jsencrypt.ts create mode 100644 idp/frontend/src/utils/request.ts create mode 100644 idp/frontend/src/utils/storage.ts create mode 100644 idp/frontend/src/utils/validate.ts create mode 100644 idp/frontend/src/views/LoginPage.vue create mode 100644 idp/frontend/src/views/login/PasswordLogin.vue create mode 100644 idp/frontend/src/views/login/SmsLogin.vue create mode 100644 idp/frontend/src/views/login/Sso.vue create mode 100644 idp/frontend/src/views/login/ThirdPartyLogin.vue create mode 100644 idp/frontend/src/vite-env.d.ts create mode 100644 idp/frontend/tsconfig.json create mode 100644 idp/frontend/tsconfig.node.json create mode 100644 idp/frontend/vite-env.d.ts create mode 100644 idp/frontend/vite.config.ts create mode 100644 idp/frontend/vite/plugins/auto-import.ts create mode 100644 idp/frontend/vite/plugins/compression.ts create mode 100644 idp/frontend/vite/plugins/index.ts create mode 100644 idp/frontend/vite/plugins/setup-extend.ts create mode 100644 idp/frontend/vite/plugins/svg-icon.ts create mode 100644 sdk/backend/oauth2-login-sdk/pom.xml create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/redis/RedisCache.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/JacksonConfiguration.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SdkRedisConfig.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SecurityConfig.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/CacheConstants.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/Constants.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/UserConstants.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/filter/IdpAuthenticationFilter.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LoginSuccessHandler.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LogoutIdpSuccessHandler.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/RedirectHandler.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/base/CommonResult.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/RefreshTokenInfo.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/TokenInfo.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/DataPermission.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserDept.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserInfo.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserPost.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisAccessTokenService.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientService.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisRefreshTokenService.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/TokenService.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/utils/HttpClientUtils.java create mode 100644 sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/web/UserController.java create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/common/redis/RedisCache.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/JacksonConfiguration.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/SdkRedisConfig.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/SecurityConfig.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/constant/CacheConstants.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/constant/Constants.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/constant/UserConstants.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/filter/IdpAuthenticationFilter.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/handler/LoginSuccessHandler.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/handler/LogoutIdpSuccessHandler.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/handler/RedirectHandler.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/base/CommonResult.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/AccessTokenInfo$AccessTokenInfoBuilder.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/AccessTokenInfo.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/RefreshTokenInfo$RefreshTokenInfoBuilder.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/RefreshTokenInfo.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/TokenInfo$TokenInfoBuilder.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/TokenInfo.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/DataPermission.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserDept.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserInfo.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserPost.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisAccessTokenService.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository$1.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientService.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisRefreshTokenService.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/TokenService.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/utils/HttpClientUtils.class create mode 100644 sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/web/UserController.class create mode 100644 sdk/backend/oauth2-login-sdk/target/maven-archiver/pom.properties create mode 100644 sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 sdk/backend/oauth2-login-sdk/target/oauth2-login-sdk-1.0-SNAPSHOT.jar create mode 100644 sdk/frontend/oauth2-login-sdk/README.md create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/auth.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/auth.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/http.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/http.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/token.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/core/token.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/guards/router.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/guards/router.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/index.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/index.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/index.esm.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/index.esm.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/index.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/index.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/config.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/config.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/index.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/index.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/user.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/types/user.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/storage.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/storage.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts.map create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/url.js create mode 100644 sdk/frontend/oauth2-login-sdk/dist/utils/url.js.map create mode 100644 sdk/frontend/oauth2-login-sdk/package.json create mode 100644 sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml create mode 100644 sdk/frontend/oauth2-login-sdk/rollup.config.js create mode 100644 sdk/frontend/oauth2-login-sdk/src/core/auth.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/core/http.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/core/token.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/guards/router.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/index.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/types/config.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/types/index.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/types/user.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/utils/storage.ts create mode 100644 sdk/frontend/oauth2-login-sdk/src/utils/url.ts create mode 100644 sdk/frontend/oauth2-login-sdk/tsconfig.json diff --git a/demo/backend/.gitattributes b/demo/backend/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/demo/backend/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/demo/backend/.gitignore b/demo/backend/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/demo/backend/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/demo/backend/mvnw b/demo/backend/mvnw new file mode 100644 index 0000000..bd8896b --- /dev/null +++ b/demo/backend/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/demo/backend/mvnw.cmd b/demo/backend/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/demo/backend/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/demo/backend/pom.xml b/demo/backend/pom.xml new file mode 100644 index 0000000..3e3d6cb --- /dev/null +++ b/demo/backend/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.10 + + + org.lingniu + demo + 0.0.1-SNAPSHOT + demo + demo + + + + + + + + + + + + + + + 17 + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.lingniu + oauth2-login-sdk + 1.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/demo/backend/src/main/java/com/example/demo/DemoApplication.java b/demo/backend/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..70629e9 --- /dev/null +++ b/demo/backend/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = {"org.lingniu.**"}) +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + +} diff --git a/demo/backend/src/main/java/com/example/demo/test.http b/demo/backend/src/main/java/com/example/demo/test.http new file mode 100644 index 0000000..4a0bfa1 --- /dev/null +++ b/demo/backend/src/main/java/com/example/demo/test.http @@ -0,0 +1,41 @@ +# @no-redirect +GET localhost:10001/oauth2/authorization/demo + +### +POST http://localhost:8000/oauth2/authorize +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Idp: 387cec08371f4ebfb61074d41a94046e +Cookie: idp_refresh_token=7bb21a0dcac94aec99f08ae6a2d6db30 + +response_type=code&client_id=b55c88c20db94790a60a5075&scope=openid%20profile%20perms&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D&redirect_uri=http://localhost:9506/oauth2/callback&nonce=rXdsOr0tczTckUSP_RKZ5ABmP575Z4JrTLOxCQ1nt3U + + +#### +GET http://localhost:10001/login/oauth2/code/demo?code=ua3zRRX2YMHsGmYaY4CGEvtklZbCzNtT5sOjguXzhY68zoKqnA83NlQXtG1dN-X_mv4Sn5MaYERkymxk9EWJzpHA_RB523keRb25jmIt5LgUjWJtwD4gJmQJulPOXFO1&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D + +### +GET http://localhost:10001/idp/routes +#Authorization: 85a9f4d6fef34763b4437830ec331570 +Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw +#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef + + +### +GET http://localhost:8000/account/getRouters +#Authorization: 85a9f4d6fef34763b4437830ec331570 +Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw +#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef +Accept: application/json + +#### +GET http://localhost:10001/idp/routes +#Authorization: 85a9f4d6fef34763b4437830ec331570 +Authorization: 41deb286d03b42139bc3559cbbcc9995 +#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef +Accept: application/json + +### +POST http://localhost:10001/logout +Cookie: app_refresh_token=02237ce2c5d14e8088be3d462b69df99 + diff --git a/demo/backend/src/main/resources/application.yml b/demo/backend/src/main/resources/application.yml new file mode 100644 index 0000000..611d34a --- /dev/null +++ b/demo/backend/src/main/resources/application.yml @@ -0,0 +1,70 @@ +spring: + application: + name: demo + # redis \u914D\u7F6E + security: + oauth2: + resourceserver: + jwt: + jwk-set-uri: http://localhost:8000/oauth2/jwks + client: + registration: + demo: + client-id: b55c88c20db94790a60a5075 + client-secret: UqVAS8UiehSFJSR8_CygnYGR5M79LuGuGiDwATtcGqg + client-name: DEMO + authorization-grant-type: authorization_code + redirect-uri: http://localhost:9506/oauth2/callback + scope: + - openid + - profile + # 返回权限 + - perms + provider: idp + + provider: + idp: +# issuer-uri: http://localhost:8000 + authorization-uri: http://localhost/sso + token-uri: http://localhost:8000/oauth2/token + user-info-uri: http://localhost:8000/userinfo + jwk-set-uri: http://localhost:8000/oauth2/jwks + user-name-attribute: sub + data: + redis: + # \u5730\u5740 + host: localhost + # \u7AEF\u53E3\uFF0C\u9ED8\u8BA4\u4E3A6379 + port: 6379 + # \u6570\u636E\u5E93\u7D22\u5F15 + database: 0 + # \u5BC6\u7801 + password: + # \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4 + timeout: 10s + lettuce: + pool: + # \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5 + min-idle: 0 + # \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5 + max-idle: 8 + # \u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570 + max-active: 8 + # #\u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 + max-wait: -1ms + + + + + +logging: + level: + root: info + org.springframework.web: debug + org.springframework.security: debug + org.springframework.security.oauth2: debug + + +server: + port: 10001 + diff --git a/demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java b/demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java new file mode 100644 index 0000000..eaa9969 --- /dev/null +++ b/demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DemoApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/demo/frontend/.gitignore b/demo/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/demo/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/demo/frontend/README.md b/demo/frontend/README.md new file mode 100644 index 0000000..33895ab --- /dev/null +++ b/demo/frontend/README.md @@ -0,0 +1,5 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/demo/frontend/package.json b/demo/frontend/package.json new file mode 100644 index 0000000..35b915a --- /dev/null +++ b/demo/frontend/package.json @@ -0,0 +1,24 @@ +{ + "name": "demo-sdk", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "oauth2-login-sdk": "link:C:/Users/admin/AppData/Local/pnpm/global/5/node_modules/oauth2-login-sdk", + "vue": "^3.5.24", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@types/node": "^24.10.1", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/tsconfig": "^0.8.1", + "typescript": "~5.9.3", + "vite": "^7.2.4", + "vue-tsc": "^3.1.4" + } +} diff --git a/demo/frontend/pnpm-lock.yaml b/demo/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..621cd77 --- /dev/null +++ b/demo/frontend/pnpm-lock.yaml @@ -0,0 +1,976 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + oauth2-login-sdk: link:C:/Users/admin/AppData/Local/pnpm/global/5/node_modules/oauth2-login-sdk + +importers: + + .: + dependencies: + oauth2-login-sdk: + specifier: link:C:/Users/admin/AppData/Local/pnpm/global/5/node_modules/oauth2-login-sdk + version: link:C:/Users/admin/AppData/Local/pnpm/global/5/node_modules/oauth2-login-sdk + vue: + specifier: ^3.5.24 + version: 3.5.27(typescript@5.9.3) + vue-router: + specifier: ^4.3.0 + version: 4.6.4(vue@3.5.27(typescript@5.9.3)) + devDependencies: + '@types/node': + specifier: ^24.10.1 + version: 24.10.10 + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.4(vite@7.3.1(@types/node@24.10.10))(vue@3.5.27(typescript@5.9.3)) + '@vue/tsconfig': + specifier: ^0.8.1 + version: 0.8.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) + typescript: + specifier: ~5.9.3 + version: 5.9.3 + vite: + specifier: ^7.2.4 + version: 7.3.1(@types/node@24.10.10) + vue-tsc: + specifier: ^3.1.4 + version: 3.2.4(typescript@5.9.3) + +packages: + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/node@24.10.10': + resolution: {integrity: sha512-+0/4J266CBGPUq/ELg7QUHhN25WYjE0wYTPSQJn1xeu8DOlIOPxXxrNGiLmfAWl7HMMgWFWXpt9IDjMWrF5Iow==} + + '@vitejs/plugin-vue@6.0.4': + resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vue: ^3.2.25 + + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} + + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} + + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} + + '@vue/compiler-core@3.5.27': + resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} + + '@vue/compiler-dom@3.5.27': + resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} + + '@vue/compiler-sfc@3.5.27': + resolution: {integrity: sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==} + + '@vue/compiler-ssr@3.5.27': + resolution: {integrity: sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/language-core@3.2.4': + resolution: {integrity: sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==} + + '@vue/reactivity@3.5.27': + resolution: {integrity: sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==} + + '@vue/runtime-core@3.5.27': + resolution: {integrity: sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==} + + '@vue/runtime-dom@3.5.27': + resolution: {integrity: sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==} + + '@vue/server-renderer@3.5.27': + resolution: {integrity: sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==} + peerDependencies: + vue: 3.5.27 + + '@vue/shared@3.5.27': + resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} + + '@vue/tsconfig@0.8.1': + resolution: {integrity: sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==} + peerDependencies: + typescript: 5.x + vue: ^3.4.0 + peerDependenciesMeta: + typescript: + optional: true + vue: + optional: true + + alien-signals@3.1.2: + resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-router@4.6.4: + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} + peerDependencies: + vue: ^3.5.0 + + vue-tsc@3.2.4: + resolution: {integrity: sha512-xj3YCvSLNDKt1iF9OcImWHhmYcihVu9p4b9s4PGR/qp6yhW+tZJaypGxHScRyOrdnHvaOeF+YkZOdKwbgGvp5g==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.27: + resolution: {integrity: sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + +snapshots: + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@rolldown/pluginutils@1.0.0-rc.2': {} + + '@rollup/rollup-android-arm-eabi@4.57.1': + optional: true + + '@rollup/rollup-android-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-x64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.57.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.57.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.57.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@types/estree@1.0.8': {} + + '@types/node@24.10.10': + dependencies: + undici-types: 7.16.0 + + '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@24.10.10))(vue@3.5.27(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 7.3.1(@types/node@24.10.10) + vue: 3.5.27(typescript@5.9.3) + + '@volar/language-core@2.4.27': + dependencies: + '@volar/source-map': 2.4.27 + + '@volar/source-map@2.4.27': {} + + '@volar/typescript@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/compiler-core@3.5.27': + dependencies: + '@babel/parser': 7.29.0 + '@vue/shared': 3.5.27 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.27': + dependencies: + '@vue/compiler-core': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/compiler-sfc@3.5.27': + dependencies: + '@babel/parser': 7.29.0 + '@vue/compiler-core': 3.5.27 + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-ssr': 3.5.27 + '@vue/shared': 3.5.27 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.27': + dependencies: + '@vue/compiler-dom': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/devtools-api@6.6.4': {} + + '@vue/language-core@3.2.4': + dependencies: + '@volar/language-core': 2.4.27 + '@vue/compiler-dom': 3.5.27 + '@vue/shared': 3.5.27 + alien-signals: 3.1.2 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.3 + + '@vue/reactivity@3.5.27': + dependencies: + '@vue/shared': 3.5.27 + + '@vue/runtime-core@3.5.27': + dependencies: + '@vue/reactivity': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/runtime-dom@3.5.27': + dependencies: + '@vue/reactivity': 3.5.27 + '@vue/runtime-core': 3.5.27 + '@vue/shared': 3.5.27 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.27 + '@vue/shared': 3.5.27 + vue: 3.5.27(typescript@5.9.3) + + '@vue/shared@3.5.27': {} + + '@vue/tsconfig@0.8.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))': + optionalDependencies: + typescript: 5.9.3 + vue: 3.5.27(typescript@5.9.3) + + alien-signals@3.1.2: {} + + csstype@3.2.3: {} + + entities@7.0.1: {} + + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + estree-walker@2.0.2: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fsevents@2.3.3: + optional: true + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + muggle-string@0.4.1: {} + + nanoid@3.3.11: {} + + path-browserify@1.0.1: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + rollup@4.57.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 + fsevents: 2.3.3 + + source-map-js@1.2.1: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + typescript@5.9.3: {} + + undici-types@7.16.0: {} + + vite@7.3.1(@types/node@24.10.10): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.57.1 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.10 + fsevents: 2.3.3 + + vscode-uri@3.1.0: {} + + vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.27(typescript@5.9.3) + + vue-tsc@3.2.4(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.27 + '@vue/language-core': 3.2.4 + typescript: 5.9.3 + + vue@3.5.27(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-sfc': 3.5.27 + '@vue/runtime-dom': 3.5.27 + '@vue/server-renderer': 3.5.27(vue@3.5.27(typescript@5.9.3)) + '@vue/shared': 3.5.27 + optionalDependencies: + typescript: 5.9.3 diff --git a/demo/frontend/pnpm-workspace.yaml b/demo/frontend/pnpm-workspace.yaml new file mode 100644 index 0000000..77e2017 --- /dev/null +++ b/demo/frontend/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +overrides: + oauth2-login-sdk: link:C:/Users/admin/AppData/Local/pnpm/global/5/node_modules/oauth2-login-sdk diff --git a/demo/frontend/public/vite.svg b/demo/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/demo/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/demo/frontend/src/App.vue b/demo/frontend/src/App.vue new file mode 100644 index 0000000..59b75db --- /dev/null +++ b/demo/frontend/src/App.vue @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/demo/frontend/src/assets/vue.svg b/demo/frontend/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/demo/frontend/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/demo/frontend/src/components/Home.vue b/demo/frontend/src/components/Home.vue new file mode 100644 index 0000000..cb56f8a --- /dev/null +++ b/demo/frontend/src/components/Home.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/demo/frontend/src/main.ts b/demo/frontend/src/main.ts new file mode 100644 index 0000000..cd35530 --- /dev/null +++ b/demo/frontend/src/main.ts @@ -0,0 +1,18 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' +import router from './router' +import unifiedLoginSDK from "oauth2-login-sdk"; + +// 初始化配置 +unifiedLoginSDK.init({ + clientId: 'b55c88c20db94790a60a5075', + registrationId: 'demo', + storageType: 'localStorage', + basepath: '/demo-api', + idpLogoutUrl: 'http://localhost/logout', + homePage: 'http://localhost:9506/home' +}); +const app = createApp(App) +app.use(router) +app.mount('#app') diff --git a/demo/frontend/src/router/index.ts b/demo/frontend/src/router/index.ts new file mode 100644 index 0000000..6e39902 --- /dev/null +++ b/demo/frontend/src/router/index.ts @@ -0,0 +1,31 @@ +import { createRouter, createWebHistory } from 'vue-router' +import unifiedLoginSDK from 'oauth2-login-sdk'; +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + redirect: '/home' + }, + { + path: '/', + name: 'home', + component: () => import('../components/Home.vue') + } + ] +}) +router.beforeEach(async (to, _from, next) => { + debugger + if (!unifiedLoginSDK.isAuthenticated()) { + if (to.path === '/oauth2/callback') { + await unifiedLoginSDK.handleCallback() + }else{ + await unifiedLoginSDK.login() + } + } else { + next() + } +}) + +export default router \ No newline at end of file diff --git a/demo/frontend/src/style.css b/demo/frontend/src/style.css new file mode 100644 index 0000000..f691315 --- /dev/null +++ b/demo/frontend/src/style.css @@ -0,0 +1,79 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/demo/frontend/tsconfig.app.json b/demo/frontend/tsconfig.app.json new file mode 100644 index 0000000..8d16e42 --- /dev/null +++ b/demo/frontend/tsconfig.app.json @@ -0,0 +1,16 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/demo/frontend/tsconfig.json b/demo/frontend/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/demo/frontend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/demo/frontend/tsconfig.node.json b/demo/frontend/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/demo/frontend/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/demo/frontend/vite.config.ts b/demo/frontend/vite.config.ts new file mode 100644 index 0000000..81e0f7e --- /dev/null +++ b/demo/frontend/vite.config.ts @@ -0,0 +1,85 @@ +import { defineConfig, loadEnv } from 'vite' +import vue from '@vitejs/plugin-vue' +import { resolve } from 'path' + +// https://vitejs.dev/config/ +export default defineConfig(({ mode }) => { + // 加载环境变量 + const env = loadEnv(mode, process.cwd(), '') + + // 定义基础 URL,支持环境变量 + const baseUrl = env.VITE_API_BASE_URL || 'http://localhost:10001' + const apiPrefix = env.VITE_API_PREFIX || '/demo-api' + + return { + plugins: [vue()], + + // 基础路径 + base: env.VITE_BASE_PATH || '/', + + // 解析配置 + resolve: { + alias: { + '@': resolve(__dirname, 'src'), + }, + extensions: ['.js', '.ts', '.jsx', '.tsx', '.vue', '.json'] + }, + + // 开发服务器配置 + server: { + port: 9506, + host: true, // 监听所有地址 + open: true, // 自动打开浏览器 + cors: true, // 启用 CORS + + // 代理配置 + proxy: { + // API 代理(修正了 rewrite 路径) + [apiPrefix]: { + target: baseUrl, + changeOrigin: true, + rewrite: (path) => path.replace(new RegExp(`^${apiPrefix}`), '') + }, + + // WebSocket 代理(如果需要) + '/ws': { + target: baseUrl.replace('http', 'ws'), + ws: true, + changeOrigin: true + } + } + }, + + // 构建配置 + build: { + outDir: 'dist', + sourcemap: mode !== 'production', + chunkSizeWarningLimit: 1600, + rollupOptions: { + output: { + manualChunks: { + vue: ['vue', 'vue-router', 'vuex/pinia'], + vendor: ['axios', 'lodash', 'dayjs'], + ui: ['element-plus', 'ant-design-vue'] // 根据实际使用的 UI 库调整 + } + } + } + }, + + // 预览配置 + preview: { + port: 9507, + host: true, + open: true + }, + + // CSS 配置 + css: { + preprocessorOptions: { + scss: { + additionalData: `@import "@/styles/variables.scss";` + } + } + } + } +}) \ No newline at end of file diff --git a/idp/backend/idp-starter/.gitattributes b/idp/backend/idp-starter/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/idp/backend/idp-starter/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/idp/backend/idp-starter/.gitignore b/idp/backend/idp-starter/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/idp/backend/idp-starter/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/idp/backend/idp-starter/mvnw b/idp/backend/idp-starter/mvnw new file mode 100644 index 0000000..bd8896b --- /dev/null +++ b/idp/backend/idp-starter/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/idp/backend/idp-starter/mvnw.cmd b/idp/backend/idp-starter/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/idp/backend/idp-starter/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/idp/backend/idp-starter/pom.xml b/idp/backend/idp-starter/pom.xml new file mode 100644 index 0000000..e4c6c9b --- /dev/null +++ b/idp/backend/idp-starter/pom.xml @@ -0,0 +1,168 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.10 + + + org.lingniu + idp-starter + 0.0.1-SNAPSHOT + idp-starter + idp-starter + + + + + + + + + + + + + + + 17 + 1.5.5 + 8.0.33 + 3.5.10 + 5.8.40 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-oauth2-authorization-server + + + org.springframework.boot + spring-boot-starter-oauth2-client + + + org.springframework.boot + spring-boot-starter-oauth2-resource-server + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.session + spring-session-data-redis + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + + + cn.hutool + hutool-all + ${hutool.version} + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + + + com.fasterxml.jackson.core + jackson-core + 2.19.4 + compile + + + com.fasterxml.jackson.core + jackson-databind + 2.19.4 + compile + + + org.apache.commons + commons-lang3 + 3.20.0 + compile + + + com.alibaba.fastjson2 + fastjson2 + 2.0.60 + compile + + + org.springframework.boot + spring-boot-starter-validation + + + pro.fessional + kaptcha + 2.3.3 + compile + + + nl.basjes.parse.useragent + yauaa + 7.32.0 + compile + + + mysql + mysql-connector-java + ${mysql.version} + + + + + + com.nimbusds + nimbus-jose-jwt + 10.0.2 + compile + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/IdpStarterApplication.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/IdpStarterApplication.java new file mode 100644 index 0000000..245a877 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/IdpStarterApplication.java @@ -0,0 +1,15 @@ +package org.lingniu.idp; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@MapperScan("org.lingniu.**.mapper") +public class IdpStarterApplication { + + public static void main(String[] args) { + SpringApplication.run(IdpStarterApplication.class, args); + } + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Anonymous.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Anonymous.java new file mode 100644 index 0000000..61b01a3 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Anonymous.java @@ -0,0 +1,15 @@ +package org.lingniu.idp.annotation; + +import java.lang.annotation.*; + +/** + * 匿名访问不鉴权注解 + * + * @author portal + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Anonymous +{ +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataScope.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataScope.java new file mode 100644 index 0000000..8637d3a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataScope.java @@ -0,0 +1,29 @@ +package org.lingniu.idp.annotation; + +import java.lang.annotation.*; + +/** + * 数据权限过滤注解 + * + * @author portal + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope +{ + /** + * 部门表的别名 + */ + public String deptAlias() default ""; + + /** + * 用户表的别名 + */ + public String userAlias() default ""; + + /** + * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来 + */ + public String permission() default ""; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataSource.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataSource.java new file mode 100644 index 0000000..bb29148 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/DataSource.java @@ -0,0 +1,24 @@ +package org.lingniu.idp.annotation; + +import org.lingniu.idp.enums.DataSourceType; + +import java.lang.annotation.*; + +/** + * 自定义多数据源切换注解 + * + * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 + * + * @author portal + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface DataSource +{ + /** + * 切换数据源名称 + */ + public DataSourceType value() default DataSourceType.MASTER; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Log.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Log.java new file mode 100644 index 0000000..8387885 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Log.java @@ -0,0 +1,48 @@ +package org.lingniu.idp.annotation; + +import org.lingniu.idp.enums.BusinessType; +import org.lingniu.idp.enums.OperatorType; + +import java.lang.annotation.*; + +/** + * 自定义操作日志记录注解 + * + * @author portal + * + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log +{ + /** + * 模块 + */ + public String title() default ""; + + /** + * 功能 + */ + public BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + public OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + public boolean isSaveRequestData() default true; + + /** + * 是否保存响应的参数 + */ + public boolean isSaveResponseData() default true; + + /** + * 排除指定的请求参数 + */ + public String[] excludeParamNames() default {}; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RateLimiter.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RateLimiter.java new file mode 100644 index 0000000..144810e --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RateLimiter.java @@ -0,0 +1,37 @@ +package org.lingniu.idp.annotation; + +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.enums.LimitType; + +import java.lang.annotation.*; + +/** + * 限流注解 + * + * @author portal + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter +{ + /** + * 限流key + */ + public String key() default CacheConstants.RATE_LIMIT_KEY; + + /** + * 限流时间,单位秒 + */ + public int time() default 60; + + /** + * 限流次数 + */ + public int count() default 100; + + /** + * 限流类型 + */ + public LimitType limitType() default LimitType.DEFAULT; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RepeatSubmit.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RepeatSubmit.java new file mode 100644 index 0000000..72a21e4 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/RepeatSubmit.java @@ -0,0 +1,26 @@ +package org.lingniu.idp.annotation; + +import java.lang.annotation.*; + +/** + * 自定义注解防止表单重复提交 + * + * @author portal + * + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit +{ + /** + * 间隔时间(ms),小于此时间视为重复提交 + */ + public int interval() default 5000; + + /** + * 提示消息 + */ + public String message() default "不允许重复提交,请稍候再试"; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Sensitive.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Sensitive.java new file mode 100644 index 0000000..a7e95cf --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/annotation/Sensitive.java @@ -0,0 +1,25 @@ +package org.lingniu.idp.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.lingniu.idp.config.serializer.SensitiveJsonSerializer; +import org.lingniu.idp.enums.DesensitizedType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 数据脱敏注解 + * + * @author portal + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@JacksonAnnotationsInside +@JsonSerialize(using = SensitiveJsonSerializer.class) +public @interface Sensitive +{ + DesensitizedType desensitizedType(); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/redis/RedisCache.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/redis/RedisCache.java new file mode 100644 index 0000000..530c14d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/redis/RedisCache.java @@ -0,0 +1,273 @@ +package org.lingniu.idp.common.redis; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * spring redis 工具类 + * + * @author portal + **/ +@SuppressWarnings(value = { "unchecked", "rawtypes" }) +@Component +public class RedisCache +{ + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) + { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) + { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) + { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) + { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * @return 有效时间 + */ + public long getExpire(final String key) + { + return redisTemplate.getExpire(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) + { + return redisTemplate.hasKey(key); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) + { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) + { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public boolean deleteObject(final Collection collection) + { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) + { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) + { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) + { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) + { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) + { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) + { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) + { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) + { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) + { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) + { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return 是否成功 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) + { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + public boolean deleteCacheSetValue(final String key, final String hKey) + { + return redisTemplate.opsForSet().remove(key, hKey) > 0; + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) + { + return redisTemplate.keys(pattern); + } + + public void setCacheSet(String key, String value) { + redisTemplate.opsForSet().add(key,value); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/Xss.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/Xss.java new file mode 100644 index 0000000..74fb9e3 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/Xss.java @@ -0,0 +1,29 @@ +package org.lingniu.idp.common.xss; + + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author portal + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) +@Constraint(validatedBy = { XssValidator.class }) +public @interface Xss +{ + String message() + + default "不允许任何脚本运行"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/XssValidator.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/XssValidator.java new file mode 100644 index 0000000..d70b912 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/common/xss/XssValidator.java @@ -0,0 +1,40 @@ +package org.lingniu.idp.common.xss; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import org.lingniu.idp.utils.StringUtils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 自定义xss校验注解实现 + * + * @author portal + */ +public class XssValidator implements ConstraintValidator +{ + private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) + { + if (StringUtils.isBlank(value)) + { + return true; + } + return !containsHtml(value); + } + + public static boolean containsHtml(String value) + { + StringBuilder sHtml = new StringBuilder(); + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + while (matcher.find()) + { + sHtml.append(matcher.group()); + } + return pattern.matcher(sHtml).matches(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java new file mode 100644 index 0000000..6c13364 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java @@ -0,0 +1,202 @@ +package org.lingniu.idp.config; + +import com.nimbusds.jose.jwk.JWKSet; +import com.nimbusds.jose.jwk.RSAKey; +import com.nimbusds.jose.jwk.source.ImmutableJWKSet; +import com.nimbusds.jose.jwk.source.JWKSource; +import com.nimbusds.jose.proc.SecurityContext; +import org.lingniu.idp.enums.CustomScopes; +import org.lingniu.idp.security.filter.IdpAuthenticationFilter; +import org.lingniu.idp.security.granttype.SmsCodeGrantType; +import org.lingniu.idp.security.handler.Oauth2CodeSuccessHandler; +import org.lingniu.idp.service.core.UserDetailsServiceImpl; +import org.lingniu.idp.service.core.login.IdpTokenService; +import org.lingniu.idp.service.core.login.LoginService; +import org.lingniu.idp.service.core.login.RedisAccessTokenService; +import org.lingniu.idp.utils.jwt.Jwks; +import org.lingniu.idp.utils.jwt.JwtUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.ClientAuthenticationMethod; +import org.springframework.security.oauth2.core.oidc.OidcScopes; +import org.springframework.security.oauth2.core.oidc.OidcUserInfo; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationService; +import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; +import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; +import org.springframework.security.oauth2.server.authorization.client.JdbcRegisteredClientRepository; +import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; +import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration; +import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer; +import org.springframework.security.oauth2.server.authorization.oidc.authentication.OidcUserInfoAuthenticationContext; +import org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat; +import org.springframework.security.oauth2.server.authorization.settings.TokenSettings; +import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; +import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; +import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.security.web.util.matcher.MediaTypeRequestMatcher; + +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.time.Duration; +import java.util.UUID; +import java.util.function.Function; + +import static org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer.authorizationServer; + +@Configuration +public class AuthorizationServerConfig { + +// @Autowired +// private SmsCodeAuthenticationProvider smsCodeAuthenticationProvider; + private static final String CUSTOM_CONSENT_PAGE_URI = "http://localhost/oauth2/consent"; + @Autowired + private JwtUtil jwtUtil; + @Autowired + private IdpTokenService idpTokenService; + @Autowired + private UserDetailsServiceImpl userDetailsService; + @Autowired + private OidcUserInfoMapper oidcUserInfoMapper; + + @Bean + @Order(1) + public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception { + OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = authorizationServer(); + http + .securityMatcher(authorizationServerConfigurer.getEndpointsMatcher()) + .with(authorizationServerConfigurer, (authorizationServer) -> + authorizationServer + .authorizationEndpoint(authorizationEndpoint -> + authorizationEndpoint.consentPage(CUSTOM_CONSENT_PAGE_URI) + .authorizationResponseHandler(new Oauth2CodeSuccessHandler()) + ) + .tokenEndpoint(oAuth2TokenEndpointConfigurer -> {}) + .oidc(Customizer.withDefaults()) + .oidc(oidcConfigurer -> + oidcConfigurer.userInfoEndpoint(oidcUserInfoEndpointConfigurer -> + oidcUserInfoEndpointConfigurer.userInfoMapper(oidcUserInfoMapper) + ) + ) // Enable OpenID Connect 1.0 + ) + .addFilterAfter(jwtAuthenticationFilter(), LogoutFilter.class) + .oauth2ResourceServer(oauth2ResourceServer -> + oauth2ResourceServer.jwt(Customizer.withDefaults())) + .authorizeHttpRequests((authorize) -> + authorize.anyRequest().authenticated() + ) + // Redirect to the /login page when not authenticated from the authorization endpoint + // NOTE: DefaultSecurityConfig is configured with formLogin.loginPage("/login") + .exceptionHandling((exceptions) -> exceptions + .defaultAuthenticationEntryPointFor( + new LoginUrlAuthenticationEntryPoint("http://localhost/login"), + new MediaTypeRequestMatcher(MediaType.TEXT_HTML) + ) + ); + return http.build(); + } + @Bean + public JdbcRegisteredClientRepository registeredClientRepository(JdbcTemplate jdbcTemplate) { + RegisteredClient client = RegisteredClient.withId("68dc155a-1034-4cd8-91dc-fca206e2f6d3") + .clientId("2c6f1d9ff78641c78d72a848") + //l3X95am7RaX8-Uu9-5nDYmD9-OFU-8_GHmkfnKfaS_0 + .clientSecret("{bcrypt}$2a$10$JDoQUK5aWvYiZZDpgSC8k.qPGfqbYtXAF5H1IW/e2quGWA8Zr6ffq") + .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN) + .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS) + .authorizationGrantType(SmsCodeGrantType.SMS_CODE) // 添加自定义Grant Type + .clientName("PORTAL") + .redirectUri("http://localhost:81/callback") + .scope(OidcScopes.OPENID) + .scope(OidcScopes.PROFILE) + .scope(CustomScopes.PERMS.name().toLowerCase()) + .tokenSettings(TokenSettings.builder().accessTokenTimeToLive(Duration.ofHours(12)).refreshTokenTimeToLive(Duration.ofDays(7)).build()) + .scope("message.read") + .scope("message.write") + .build(); + RegisteredClient demo = RegisteredClient.withId("c81008aa-b33f-4ebc-bba7-3c6d0eee23b9") + .clientId("b55c88c20db94790a60a5075") + //l3X95am7RaX8-Uu9-5nDYmD9-OFU-8_GHmkfnKfaS_0 + .clientSecret("{bcrypt}$2a$10$gLsAsObi5ffOddmkf5YchOtT3olfcAmSTt75X6H/mHBVYf8DXnIwi") + .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN) + .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS) + .authorizationGrantType(SmsCodeGrantType.SMS_CODE) // 添加自定义Grant Type + .clientName("DEMO") + .redirectUri("http://localhost:9506/oauth2/callback") + .scope(OidcScopes.OPENID) + .scope(OidcScopes.PROFILE) + .scope(CustomScopes.PERMS.name().toLowerCase()) + .tokenSettings(TokenSettings.builder().accessTokenTimeToLive(Duration.ofHours(12)).refreshTokenTimeToLive(Duration.ofDays(7)).build()) + .scope("read") + .scope("write") + .build(); + // Save registered client's in db as if in-memory + JdbcRegisteredClientRepository registeredClientRepository = new JdbcRegisteredClientRepository(jdbcTemplate); + registeredClientRepository.save(client); + registeredClientRepository.save(demo); + return registeredClientRepository; + } + +// @Bean +// public OAuth2TokenGenerator tokenGenerator(CustomAccessTokenGenerator accessTokenGenerator,OAuth2RefreshTokenGenerator refreshTokenGenerator) { +// CustomAccessTokenGenerator accessTokenGenerator = new CustomAccessTokenGenerator(); +// OAuth2RefreshTokenGenerator refreshTokenGenerator = new OAuth2RefreshTokenGenerator(); +// return new DelegatingOAuth2TokenGenerator( +// accessTokenGenerator, refreshTokenGenerator +// ); +// } +@Bean +public OAuth2AuthorizationService authorizationService(JdbcTemplate jdbcTemplate) { + return new JdbcOAuth2AuthorizationService(jdbcTemplate,registeredClientRepository(jdbcTemplate)); +} + + /** + * 自定义JWT认证过滤器 + */ + @Bean + public IdpAuthenticationFilter jwtAuthenticationFilter() { + return new IdpAuthenticationFilter(idpTokenService,userDetailsService); + } + /** + * 主JWK源,使用应用配置的RSA密钥 + */ + @Bean + public JWKSource jwkSource() { + try { + // 从JwtUtil中获取密钥 + RSAPublicKey publicKey = jwtUtil.getPublicKey(); + RSAPrivateKey privateKey = jwtUtil.getPrivateKey(); + + // 创建RSA JWK,包含私钥(用于签名) + RSAKey rsaKey = Jwks.generateRsa( + publicKey, + privateKey, + "idp" // 密钥ID + ); + + JWKSet jwkSet = new JWKSet(rsaKey); + + // 使用ImmutableJWKSet包装 + return new ImmutableJWKSet<>(jwkSet); + + } catch (Exception e) { + throw new RuntimeException("初始化JWK源失败", e); + } + } + @Bean + public JwtDecoder jwtDecoder(JWKSource jwkSource) { + return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java new file mode 100644 index 0000000..ef25bdf --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java @@ -0,0 +1,85 @@ +package org.lingniu.idp.config; + +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.util.Config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +import static com.google.code.kaptcha.Constants.*; + +/** + * 验证码配置 + * + * @author portal + */ +@Configuration +public class CaptchaConfig +{ + @Bean(name = "captchaProducer") + public DefaultKaptcha getKaptchaBean() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } + + @Bean(name = "captchaProducerMath") + public DefaultKaptcha getKaptchaBeanMath() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 边框颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath"); + // 验证码文本生成器 + properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "org.lingniu.idp.config.KaptchaTextCreator"); + // 验证码文本字符间距 默认为2 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 验证码噪点颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); + // 干扰实现类 + properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/I18nConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/I18nConfig.java new file mode 100644 index 0000000..ca16a66 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/I18nConfig.java @@ -0,0 +1,43 @@ +package org.lingniu.idp.config; + +import org.lingniu.idp.constant.Constants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; + +/** + * 资源文件配置加载 + * + * @author portal + */ +@Configuration +public class I18nConfig implements WebMvcConfigurer +{ + @Bean + public LocaleResolver localeResolver() + { + SessionLocaleResolver slr = new SessionLocaleResolver(); + // 默认语言 + slr.setDefaultLocale(Constants.DEFAULT_LOCALE); + return slr; + } + + @Bean + public LocaleChangeInterceptor localeChangeInterceptor() + { + LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); + // 参数名 + lci.setParamName("lang"); + return lci; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(localeChangeInterceptor()); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/JwtProperties.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/JwtProperties.java new file mode 100644 index 0000000..49f2276 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/JwtProperties.java @@ -0,0 +1,67 @@ +package org.lingniu.idp.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import java.time.Duration; + +@Component +@ConfigurationProperties(prefix = "idp.jwt") +public class JwtProperties { + + // 令牌配置 + private String header = "Authorization"; + private String prefix = "Bearer "; + private Duration expiration = Duration.ofHours(1); + private Duration refreshExpiration = Duration.ofDays(7); + + // RSA 密钥配置(支持文件路径或直接内容) + private RsaKey rsa = new RsaKey(); + + // RSA 密钥内部类 + @Setter + @Getter + public static class RsaKey { + // Getter 和 Setter + /** + * 私钥路径或内容(用于签名) + * 优先级:content > location + */ + private String privateKey; + + /** + * 公钥路径或内容(用于验证) + * 优先级:content > location + */ + private String publicKey; + + /** + * 密钥算法,默认 RSA + */ + private String algorithm = "RSA"; + + /** + * 密钥长度,默认 2048 + */ + private int keySize = 2048; + + } + + // Getter 和 Setter(原有) + public String getHeader() { return header; } + public void setHeader(String header) { this.header = header; } + + public String getPrefix() { return prefix; } + public void setPrefix(String prefix) { this.prefix = prefix; } + + public Duration getExpiration() { return expiration; } + public void setExpiration(Duration expiration) { this.expiration = expiration; } + + public Duration getRefreshExpiration() { return refreshExpiration; } + public void setRefreshExpiration(Duration refreshExpiration) { this.refreshExpiration = refreshExpiration; } + + // RSA 配置 Getter 和 Setter + public RsaKey getRsa() { return rsa; } + public void setRsa(RsaKey rsa) { this.rsa = rsa; } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/KaptchaTextCreator.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/KaptchaTextCreator.java new file mode 100644 index 0000000..b334f43 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/KaptchaTextCreator.java @@ -0,0 +1,69 @@ +package org.lingniu.idp.config; + +import com.google.code.kaptcha.text.impl.DefaultTextCreator; + +import java.util.Random; + +/** + * 验证码文本生成器 + * + * @author portal + */ +public class KaptchaTextCreator extends DefaultTextCreator +{ + private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(","); + + @Override + public String getText() + { + Integer result = 0; + Random random = new Random(); + int x = random.nextInt(10); + int y = random.nextInt(10); + StringBuilder suChinese = new StringBuilder(); + int randomoperands = random.nextInt(3); + if (randomoperands == 0) + { + result = x * y; + suChinese.append(CNUMBERS[x]); + suChinese.append("*"); + suChinese.append(CNUMBERS[y]); + } + else if (randomoperands == 1) + { + if ((x != 0) && y % x == 0) + { + result = y / x; + suChinese.append(CNUMBERS[y]); + suChinese.append("/"); + suChinese.append(CNUMBERS[x]); + } + else + { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + } + else + { + if (x >= y) + { + result = x - y; + suChinese.append(CNUMBERS[x]); + suChinese.append("-"); + suChinese.append(CNUMBERS[y]); + } + else + { + result = y - x; + suChinese.append(CNUMBERS[y]); + suChinese.append("-"); + suChinese.append(CNUMBERS[x]); + } + } + suChinese.append("=?@" + result); + return suChinese.toString(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/OidcUserInfoMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/OidcUserInfoMapper.java new file mode 100644 index 0000000..7979926 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/OidcUserInfoMapper.java @@ -0,0 +1,106 @@ +package org.lingniu.idp.config; + +import org.lingniu.idp.enums.CustomScopes; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.service.core.SysPermissionService; +import org.lingniu.idp.service.core.login.LoginService; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.core.oidc.OidcIdToken; +import org.springframework.security.oauth2.core.oidc.OidcScopes; +import org.springframework.security.oauth2.core.oidc.OidcUserInfo; +import org.springframework.security.oauth2.core.oidc.StandardClaimNames; +import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; +import org.springframework.security.oauth2.server.authorization.oidc.authentication.OidcUserInfoAuthenticationContext; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.function.Function; + +@Component +public class OidcUserInfoMapper + implements Function { + + private final LoginService loginService; + + + // @formatter:off + private static final List EMAIL_CLAIMS = Arrays.asList( + StandardClaimNames.EMAIL, + StandardClaimNames.EMAIL_VERIFIED + ); + private static final List PHONE_CLAIMS = Arrays.asList( + StandardClaimNames.PHONE_NUMBER, + StandardClaimNames.PHONE_NUMBER_VERIFIED + ); + private static final List PROFILE_CLAIMS = Arrays.asList( + StandardClaimNames.NAME, + StandardClaimNames.FAMILY_NAME, + StandardClaimNames.GIVEN_NAME, + StandardClaimNames.MIDDLE_NAME, + StandardClaimNames.NICKNAME, + StandardClaimNames.PREFERRED_USERNAME, + StandardClaimNames.PROFILE, + StandardClaimNames.PICTURE, + StandardClaimNames.WEBSITE, + StandardClaimNames.GENDER, + StandardClaimNames.BIRTHDATE, + StandardClaimNames.ZONEINFO, + StandardClaimNames.LOCALE, + StandardClaimNames.UPDATED_AT + ); + + public OidcUserInfoMapper(LoginService loginService) {this.loginService = loginService;} + // @formatter:on + + @Override + public OidcUserInfo apply(OidcUserInfoAuthenticationContext authenticationContext) { + OAuth2Authorization authorization = authenticationContext.getAuthorization(); + OidcIdToken idToken = authorization.getToken(OidcIdToken.class).getToken(); + OAuth2AccessToken accessToken = authenticationContext.getAccessToken(); + Map scopeRequestedClaims = getClaimsRequestedByScope(idToken.getClaims(), + accessToken.getScopes()); + String userName = authorization.getPrincipalName(); + SysUser sysUser = loginService.getUserDetail(userName); + scopeRequestedClaims.put("userId",sysUser.getUserId()); + scopeRequestedClaims.put("currentDeptId",sysUser.getDeptId()); + scopeRequestedClaims.put("username",sysUser.getUserName()); + scopeRequestedClaims.put("userDepts",sysUser.getDeptList()); + scopeRequestedClaims.put("userPosts",sysUser.getPosts()); + scopeRequestedClaims.put("nickName",sysUser.getNickName()); + scopeRequestedClaims.put("sex",sysUser.getSex()); + if(accessToken.getScopes().contains(CustomScopes.PERMS.name().toLowerCase())){ + Map permissionInfo = loginService.getPermissionInfo(sysUser); + scopeRequestedClaims.putAll(permissionInfo); + + } + return new OidcUserInfo(scopeRequestedClaims); + } + + private static Map getClaimsRequestedByScope(Map claims, + Set requestedScopes) { + Set scopeRequestedClaimNames = new HashSet<>(32); + scopeRequestedClaimNames.add(StandardClaimNames.SUB); + + if (requestedScopes.contains(OidcScopes.ADDRESS)) { + scopeRequestedClaimNames.add(StandardClaimNames.ADDRESS); + } + if (requestedScopes.contains(OidcScopes.EMAIL)) { + scopeRequestedClaimNames.addAll(EMAIL_CLAIMS); + } + if (requestedScopes.contains(OidcScopes.PHONE)) { + scopeRequestedClaimNames.addAll(PHONE_CLAIMS); + } + if (requestedScopes.contains(OidcScopes.PROFILE)) { + scopeRequestedClaimNames.addAll(PROFILE_CLAIMS); + } + + + + Map requestedClaims = new HashMap<>(claims); + requestedClaims.keySet().removeIf((claimName) -> !scopeRequestedClaimNames.contains(claimName)); + + return requestedClaims; + } + + } \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ProjectConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ProjectConfig.java new file mode 100644 index 0000000..d58d949 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ProjectConfig.java @@ -0,0 +1,85 @@ +package org.lingniu.idp.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 读取项目相关配置 + * + * @author q + */ +@Setter +@Getter +@Component +@ConfigurationProperties(prefix = "project") +public class ProjectConfig +{ + /** 项目名称 */ + private String name; + + /** 版本 */ + private String version; + + /** 版权年份 */ + private String copyrightYear; + + /** 上传路径 */ + @Getter + private static String profile; + + /** 获取地址开关 */ + @Getter + private static boolean addressEnabled; + + /** 验证码类型 */ + @Getter + private static String captchaType; + + public void setProfile(String profile) + { + ProjectConfig.profile = profile; + } + + public void setAddressEnabled(boolean addressEnabled) + { + ProjectConfig.addressEnabled = addressEnabled; + } + + public void setCaptchaType(String captchaType) { + ProjectConfig.captchaType = captchaType; + } + + /** + * 获取导入上传路径 + */ + public static String getImportPath() + { + return getProfile() + "/import"; + } + + /** + * 获取头像上传路径 + */ + public static String getAvatarPath() + { + return getProfile() + "/avatar"; + } + + /** + * 获取下载路径 + */ + public static String getDownloadPath() + { + return getProfile() + "/download/"; + } + + /** + * 获取上传路径 + */ + public static String getUploadPath() + { + return getProfile() + "/upload"; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/RedisConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/RedisConfig.java new file mode 100644 index 0000000..b8cecc1 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/RedisConfig.java @@ -0,0 +1,70 @@ +package org.lingniu.idp.config; + +import org.lingniu.idp.config.serializer.FastJson2JsonRedisSerializer; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * redis配置 + * + * @author portal + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport +{ + @Bean + @SuppressWarnings(value = { "unchecked", "rawtypes" }) + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) + { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + + // 使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + + // Hash的key也采用StringRedisSerializer的序列化方式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } + + @Bean + public DefaultRedisScript limitScript() + { + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(limitScriptText()); + redisScript.setResultType(Long.class); + return redisScript; + } + + /** + * 限流脚本 + */ + private String limitScriptText() + { + return "local key = KEYS[1]\n" + + "local count = tonumber(ARGV[1])\n" + + "local time = tonumber(ARGV[2])\n" + + "local current = redis.call('get', key);\n" + + "if current and tonumber(current) > count then\n" + + " return tonumber(current);\n" + + "end\n" + + "current = redis.call('incr', key)\n" + + "if tonumber(current) == 1 then\n" + + " redis.call('expire', key, time)\n" + + "end\n" + + "return tonumber(current);"; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/SecurityConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/SecurityConfig.java new file mode 100644 index 0000000..11b9ce8 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/SecurityConfig.java @@ -0,0 +1,117 @@ +package org.lingniu.idp.config; + +import org.lingniu.idp.security.filter.login.MobilePasswordAuthenticationFilter; +import org.lingniu.idp.security.handler.AuthenticationEntryPointImpl; +import org.lingniu.idp.security.handler.LoginSuccessHandler; +import org.lingniu.idp.security.handler.LogoutSuccessHandlerImpl; +import org.lingniu.idp.security.provider.MobilePasswordAuthenticationProvider; +import org.lingniu.idp.security.provider.SmsCodeAuthenticationProvider; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; +import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import java.util.Arrays; +import java.util.List; + +@Configuration +//@EnableWebSecurity +public class SecurityConfig { + + + + + private final AuthenticationEntryPointImpl unauthorizedHandler; + private final LogoutSuccessHandlerImpl logoutSuccessHandler; + private final MobilePasswordAuthenticationProvider mobilePasswordAuthenticationProvider; + private final SmsCodeAuthenticationProvider smsCodeAuthenticationProvider; + private final LoginSuccessHandler successHandler; + + public SecurityConfig(AuthenticationEntryPointImpl unauthorizedHandler, LogoutSuccessHandlerImpl logoutSuccessHandler, MobilePasswordAuthenticationProvider mobilePasswordAuthenticationProvider, SmsCodeAuthenticationProvider smsCodeAuthenticationProvider, LoginSuccessHandler successHandler) { + this.unauthorizedHandler = unauthorizedHandler; + this.logoutSuccessHandler = logoutSuccessHandler; + this.mobilePasswordAuthenticationProvider = mobilePasswordAuthenticationProvider; + this.smsCodeAuthenticationProvider = smsCodeAuthenticationProvider; + this.successHandler = successHandler; + } + + @Bean + @Order(2) + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .csrf(AbstractHttpConfigurer::disable) + // 禁用HTTP响应标头 + .headers((headersCustomizer) -> { + headersCustomizer.cacheControl(HeadersConfigurer.CacheControlConfig::disable).frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin); + }) + // 认证失败处理类 + .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) + // 基于token,所以不需要session + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(authorize -> authorize + .requestMatchers( + "/api/login/**", + "/captcha/image" + ).permitAll() + .anyRequest().authenticated() + ) + .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())) + // 添加Logout filter + .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler)) + .rememberMe(remember -> remember + .tokenValiditySeconds(7 * 24 * 60 * 60) // 7天 + .key("remember-me-idp") + ); + addFilters(http); + + return http.build(); + } + private void addFilters(HttpSecurity http){ + MobilePasswordAuthenticationFilter mobilePasswordAuthenticationFilter = new MobilePasswordAuthenticationFilter(authenticationManager()); + mobilePasswordAuthenticationFilter.setAuthenticationSuccessHandler(successHandler); + http.addFilterBefore(mobilePasswordAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); + } + /** + * 自定义JWT认证转换器 + */ + @Bean + public JwtAuthenticationConverter jwtAuthenticationConverter() { + JwtGrantedAuthoritiesConverter grantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter(); + grantedAuthoritiesConverter.setAuthorityPrefix("ROLE_"); + grantedAuthoritiesConverter.setAuthoritiesClaimName("roles"); + + JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter(); + jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(grantedAuthoritiesConverter); + + return jwtAuthenticationConverter; + } + + @Bean + public AuthenticationManager authenticationManager() { + List providers = Arrays.asList( + mobilePasswordAuthenticationProvider, + smsCodeAuthenticationProvider + ); + + return new ProviderManager(providers); + } + + public static void main(String[] args) { + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + String portal = bCryptPasswordEncoder.encode("portal"); + System.out.println(portal); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ThreadPoolConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ThreadPoolConfig.java new file mode 100644 index 0000000..0edf355 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/ThreadPoolConfig.java @@ -0,0 +1,64 @@ +package org.lingniu.idp.config; + +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.lingniu.idp.utils.Threads; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 线程池配置 + * + * @author portal + **/ +@Configuration +public class ThreadPoolConfig +{ + // 核心线程池大小 + private int corePoolSize = 50; + + // 最大可创建的线程数 + private int maxPoolSize = 200; + + // 队列最大长度 + private int queueCapacity = 1000; + + // 线程池维护线程所允许的空闲时间 + private int keepAliveSeconds = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() + { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(maxPoolSize); + executor.setCorePoolSize(corePoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(keepAliveSeconds); + // 线程池对拒绝任务(无线程可用)的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + /** + * 执行周期性或定时任务 + */ + @Bean(name = "scheduledExecutorService") + protected ScheduledExecutorService scheduledExecutorService() + { + return new ScheduledThreadPoolExecutor(corePoolSize, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + new ThreadPoolExecutor.CallerRunsPolicy()) + { + @Override + protected void afterExecute(Runnable r, Throwable t) + { + super.afterExecute(r, t); + Threads.printException(r, t); + } + }; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/TomcatServerConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/TomcatServerConfig.java new file mode 100644 index 0000000..bb7083c --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/TomcatServerConfig.java @@ -0,0 +1,47 @@ +/* + * Copyright 2020-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.lingniu.idp.config; + +import org.apache.catalina.connector.Connector; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Joe Grandja + * @since 1.3 + */ +@Profile("!test") // Exclude this from DemoAuthorizationServerApplicationTests and DemoAuthorizationServerConsentTests +@Configuration(proxyBeanMethods = false) +public class TomcatServerConfig { + + @Bean + public WebServerFactoryCustomizer connectorCustomizer() { + return (tomcat) -> tomcat.addAdditionalTomcatConnectors(createHttpConnector()); + } + + private Connector createHttpConnector() { + Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL); + connector.setScheme("http"); + connector.setPort(8000); + connector.setSecure(false); + connector.setRedirectPort(8443); + return connector; + } + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/FastJson2JsonRedisSerializer.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..98e7e5d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/FastJson2JsonRedisSerializer.java @@ -0,0 +1,53 @@ +package org.lingniu.idp.config.serializer; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.filter.Filter; +import org.lingniu.idp.constant.Constants; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.Charset; + +/** + * Redis使用FastJson序列化 + * + * @author portal + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer +{ + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); + + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) + { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException + { + if (t == null) + { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException + { + if (bytes == null || bytes.length <= 0) + { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz, AUTO_TYPE_FILTER); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/SensitiveJsonSerializer.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/SensitiveJsonSerializer.java new file mode 100644 index 0000000..6ac0362 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/serializer/SensitiveJsonSerializer.java @@ -0,0 +1,68 @@ +package org.lingniu.idp.config.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import org.lingniu.idp.annotation.Sensitive; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.enums.DesensitizedType; +import org.lingniu.idp.utils.SecurityUtils; + +import java.io.IOException; +import java.util.Objects; + +/** + * 数据脱敏序列化过滤 + * + * @author portal + */ +public class SensitiveJsonSerializer extends JsonSerializer implements ContextualSerializer +{ + private DesensitizedType desensitizedType; + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException + { + if (desensitization()) + { + gen.writeString(desensitizedType.desensitizer().apply(value)); + } + else + { + gen.writeString(value); + } + } + + @Override + public JsonSerializer createContextual(SerializerProvider prov, BeanProperty property) + throws JsonMappingException + { + Sensitive annotation = property.getAnnotation(Sensitive.class); + if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) + { + this.desensitizedType = annotation.desensitizedType(); + return this; + } + return prov.findValueSerializer(property.getType(), property); + } + + /** + * 是否需要脱敏处理 + */ + private boolean desensitization() + { + try + { + LoginUser securityUser = SecurityUtils.getLoginUser(); + // 管理员不脱敏 + return !securityUser.getUser().isAdmin(); + } + catch (Exception e) + { + return true; + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/CacheConstants.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/CacheConstants.java new file mode 100644 index 0000000..07347f7 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/CacheConstants.java @@ -0,0 +1,55 @@ +package org.lingniu.idp.constant; + +/** + * 缓存的key 常量 + * + */ +public class CacheConstants +{ + public static final String prefix = "idp_"; + /** + * 登录用户 redis key + */ + public static final String LOGIN_TOKEN_KEY = prefix + "login_tokens:"; + + /** + * 验证码 redis key + */ + public static final String CAPTCHA_CODE_KEY = prefix + "captcha_codes:"; + + /** + * 参数管理 cache key + */ + public static final String SYS_CONFIG_KEY = prefix + "sys_config:"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = prefix + "sys_dict:"; + + /** + * 防重提交 redis key + */ + public static final String REPEAT_SUBMIT_KEY = prefix + "repeat_submit:"; + + /** + * 限流 redis key + */ + public static final String RATE_LIMIT_KEY = prefix + "rate_limit:"; + + /** + * 登录账户密码错误次数 redis key + */ + public static final String PWD_ERR_CNT_KEY = prefix + "pwd_err_cnt:"; + + // Access Token存储: String结构 + // 格式: access_token:{token} + public static final String ACCESS_TOKEN_KEY = prefix + "access_token:%s"; + + // Refresh Token存储: Hash结构 + // 格式: refresh_token:{token} + public static final String REFRESH_TOKEN_KEY = prefix + "refresh_token:%s"; + + // 用户会话管理 + public static final String USER_SESSIONS = prefix + "user_sessions:%s"; // userId -> session列表 +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/Constants.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/Constants.java new file mode 100644 index 0000000..d1cc360 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/Constants.java @@ -0,0 +1,176 @@ +package org.lingniu.idp.constant; + +import com.nimbusds.openid.connect.sdk.claims.ClaimType; +import com.nimbusds.openid.connect.sdk.claims.CommonClaimsSet; + +import java.util.Locale; + +/** + * 通用常量信息 + * + * @author portal + */ +public class Constants +{ + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * 系统语言 + */ + public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE; + + + /** + * www主域 + */ + public static final String WWW = "www."; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 注册 + */ + public static final String REGISTER = "Register"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 所有权限标识 + */ + public static final String ALL_PERMISSION = "*:*:*"; + + /** + * 管理员角色权限标识 + */ + public static final String SUPER_ADMIN = "admin"; + + /** + * 角色权限分隔符 + */ + public static final String ROLE_DELIMITER = ","; + + /** + * 权限标识分隔符 + */ + public static final String PERMISSION_DELIMITER = ","; + + /** + * 验证码有效期(分钟) + */ + public static final Integer CAPTCHA_EXPIRATION = 2; + + /** + * 令牌 + */ + public static final String TOKEN = "token"; + + /** + * 令牌前缀 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 令牌前缀 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + + /** + * 用户ID + */ + public static final String JWT_USERID = "userid"; + + /** + * 用户名称 + */ + public static final String JWT_USERNAME = CommonClaimsSet.SUB_CLAIM_NAME; + + /** + * 用户头像 + */ + public static final String JWT_AVATAR = "avatar"; + + /** + * 创建时间 + */ + public static final String JWT_CREATED = "created"; + + /** + * 用户权限 + */ + public static final String JWT_AUTHORITIES = "authorities"; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi:"; + + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 远程方法调用 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; + + /** + * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全) + */ + public static final String[] JSON_WHITELIST_STR = { "com.portal" }; + + /** + * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) + */ + public static final String[] JOB_WHITELIST_STR = { "com.portal.quartz.task" }; + + /** + * 定时任务违规的字符 + */ + public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework", "org.apache", "org.lingniu.idp.utils.file", "org.lingniu.idp.config", "com.portal.generator" }; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/UserConstants.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/UserConstants.java new file mode 100644 index 0000000..895bdbf --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/constant/UserConstants.java @@ -0,0 +1,81 @@ +package org.lingniu.idp.constant; + +/** + * 用户常量信息 + * + * @author portal + */ +public class UserConstants +{ + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** 正常状态 */ + public static final String NORMAL = "0"; + + /** 异常状态 */ + public static final String EXCEPTION = "1"; + + /** 用户封禁状态 */ + public static final String USER_DISABLE = "1"; + + /** 角色正常状态 */ + public static final String ROLE_NORMAL = "0"; + + /** 角色封禁状态 */ + public static final String ROLE_DISABLE = "1"; + + /** 部门正常状态 */ + public static final String DEPT_NORMAL = "0"; + + /** 部门停用状态 */ + public static final String DEPT_DISABLE = "1"; + + /** 字典正常状态 */ + public static final String DICT_NORMAL = "0"; + + /** 是否为系统默认(是) */ + public static final String YES = "Y"; + + /** 是否菜单外链(是) */ + public static final String YES_FRAME = "0"; + + /** 是否菜单外链(否) */ + public static final String NO_FRAME = "1"; + + /** 菜单类型(目录) */ + public static final String TYPE_DIR = "M"; + + /** 菜单类型(菜单) */ + public static final String TYPE_MENU = "C"; + + /** 菜单类型(按钮) */ + public static final String TYPE_BUTTON = "F"; + + /** Layout组件标识 */ + public final static String LAYOUT = "Layout"; + + /** ParentView组件标识 */ + public final static String PARENT_VIEW = "ParentView"; + + /** InnerLink组件标识 */ + public final static String INNER_LINK = "InnerLink"; + + /** 校验是否唯一的返回标识 */ + public final static boolean UNIQUE = true; + public final static boolean NOT_UNIQUE = false; + + /** + * 用户名长度限制 + */ + public static final int USERNAME_MIN_LENGTH = 2; + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 密码长度限制 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/CaptchaController.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/CaptchaController.java new file mode 100644 index 0000000..31bc6dd --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/CaptchaController.java @@ -0,0 +1,97 @@ +package org.lingniu.idp.controller; + +import com.google.code.kaptcha.Producer; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.idp.config.ProjectConfig; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.model.base.AjaxResult; +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.utils.sign.Base64; +import org.lingniu.idp.utils.uuid.IdUtils; +import org.lingniu.idp.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +/** + * 验证码操作处理 + * + * @author portal + */ +@RestController +@RequestMapping("/captcha") +public class CaptchaController +{ + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysConfigService configService; + /** + * 生成验证码 + */ + @GetMapping("/image") + public AjaxResult getCode(HttpServletResponse response) throws IOException + { + AjaxResult ajax = AjaxResult.success(); + boolean captchaEnabled = configService.selectCaptchaEnabled(); + ajax.put("captchaEnabled", captchaEnabled); + if (!captchaEnabled) + { + return ajax; + } + + // 保存验证码信息 + String uuid = IdUtils.simpleUUID(); + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + // 生成验证码 + String captchaType = ProjectConfig.getCaptchaType(); + if ("math".equals(captchaType)) + { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } + else if ("char".equals(captchaType)) + { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try + { + ImageIO.write(image, "jpg", os); + } + catch (IOException e) + { + return AjaxResult.error(e.getMessage()); + } + + ajax.put("uuid", uuid); + ajax.put("img", Base64.encode(os.toByteArray())); + return ajax; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/SysLoginController.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/SysLoginController.java new file mode 100644 index 0000000..1bc84d0 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/SysLoginController.java @@ -0,0 +1,45 @@ +package org.lingniu.idp.controller; + +import org.lingniu.idp.model.base.AjaxResult; +import org.lingniu.idp.model.entity.SysMenu; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.service.ISysMenuService; +import org.lingniu.idp.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 登录验证 + * + * @author portal + */ +@RestController +@RequestMapping("/idp") +public class SysLoginController +{ + + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysMenuService menuService; + + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @GetMapping("getRouters") + public AjaxResult getRouters(@AuthenticationPrincipal Jwt jwt) + { + SysUser sysUser = sysUserService.selectUserByUserName(jwt.getSubject()); + List menus = menuService.selectMenuTreeByUserId(sysUser.getUserId()); + return AjaxResult.success(menuService.buildMenus(menus)); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http new file mode 100644 index 0000000..46dd375 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http @@ -0,0 +1,48 @@ +### 验证码 +# @no-redirect +GET http://localhost:8000/captcha/image + +### 密码登录 054aae95108e409dadc12af52f556a70 +# @no-redirect +POST http://localhost:8000/api/login/account +Content-Type: application/x-www-form-urlencoded +Accept: application/json + +username=admin&password=admin123&uuid=1316459cfa7f40429bdc0f751229eb23&code=2 + + +##### e040b13e72e84086b63da369d60887e4 +POST http://localhost:8000/oauth2/authorize +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Idp: 53c55ddb3caf44568ba429347fdad0e6 +Cookie: idp_refresh_token=7bb21a0dcac94aec99f08ae6a2d6db30 + +client_id=2c6f1d9ff78641c78d72a848&redirect_uri=http%3A%2F%2Flocalhost%3A81%2Fcallback&response_type=code&state=LXcbn1xobq6unvUCz5uwG7PcwtsNdbWg&scope=openid + +### @name 一次性授权码登录 +POST http://localhost:8000/oauth2/token +Content-Type: application/x-www-form-urlencoded +Authorization: Basic MmM2ZjFkOWZmNzg2NDFjNzhkNzJhODQ4OmkxYnBlcjFKdzJnTGVUelVOMW9uaXd1SUNQRFFnTnVRRWNZeFRLSjVpdjA= + +grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalhost%3A81%2Fcallback&code=qmkNPAOk7pKTrTcHecwfSuona-O9Kjs-bbgSthovqSZz-wBhrqh9SUVeVUEN8ct4Gr7V-Dt4xMeupw3gFslSlbxZ8t2UHl74-63rGp7xnDVUGFWAA99TVa8hOnSgABZX&state=LXcbn1xobq6unvUCz5uwG7PcwtsNdbWg + + +#### +GET http://localhost:8000/account/getInfo +Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IjJjNmYxZDlmZjc4NjQxYzc4ZDcyYTg0OCIsIm5iZiI6MTc3MDI1NTA3MiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiZXhwIjoxNzcwMjU4NjcyLCJpYXQiOjE3NzAyNTUwNzIsImp0aSI6IjVmNzAxM2EwLTU0MjctNDMyOC04ZTg0LWUwZjE0YjA4Y2IyYSJ9.KbradWCC1p6mD-JEd3IefUuzNvpNyUvGwyfuTRBVCC7jh-QGU36j4WxkeCtNJqaCBWZWQZVCJj068ysqanbRZRiSA4nADFMZnRVdBJD340TknKcGp7PbmiJfPD_uh4OzLosAu9xEUPjEW6q6rrjEqtIA9brK8NfP6A8A7aB8fYyKE0V1VO6j06AwC1CmXxUGrDgtJpU9_4NhV1Jf4cLBtECVG0pQDWMrEUNtrShPoa8gNJUUhP0gU0g-PyqBwlRhVl7Ra6T5lr4IIlsgK2D0Zu0ssFSJjZv_zhTW5Lo3xbe_DKVbWV4buJvLrHzlGBdFn7IV1-x6FwSZX10FBvXtOA +### +GET http://localhost:8000/.well-known/openid-configuration + + +### +GET http://localhost:8000/userinfo +Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IjJjNmYxZDlmZjc4NjQxYzc4ZDcyYTg0OCIsIm5iZiI6MTc3MDM2NTc1Nywic2NvcGUiOlsib3BlbmlkIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQwODk1NywiaWF0IjoxNzcwMzY1NzU3LCJqdGkiOiIwOWFjNDJjZi1jNmI4LTQ4MDMtOTkyMi0yMTYwMTk0Zjg1MzQifQ.TIrICdQ2iltZXS7PAGc1MHi_cHS9VuWgYsRZGI5t-ZoPjP1fvnkDg4OwO4In7vl1617-bUSlvl42Dm4AVZvtsnNWVVg6LXyf-Cge1kPENynnrpJzPRHkT5XwHno552UWwS6B3VtlSXsHnlK7D5BEZmsw4X5bL0fF56IPjoiaYjhgPoEp_Q9kU7b6d_2gnQAQeOst-K0yFtYtBIWl6QJX9q9Q-4maJdbuOAWqUOySTg2STKII3XYqK-r8sor4cv55itFqX4VZuhQuSQwbumLyJq55YYtl-vzYvST9zHRyeYxWaHVIhDZRNZR_AYkVB-Oj_8lASWRpDOSI10LJr4M1Qw + + +### +POST http://localhost:8000/oauth2/token +Content-Type: application/x-www-form-urlencoded +Authorization: Basic MmM2ZjFkOWZmNzg2NDFjNzhkNzJhODQ4OmkxYnBlcjFKdzJnTGVUelVOMW9uaXd1SUNQRFFnTnVRRWNZeFRLSjVpdjA= + +grant_type=refresh_token&refresh_token=_NfU5Gdy_dANJkbvjJm6cK7PxNSHyQexWMY5KthA8Hs_nOFtPnTVChsHF-dmLjzhDRZk5nHNZWV7XhxyOp5qS-nLjScsrbvVwSmZhb20QpDLaSoUGtF-ZdBawvlceXks diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessStatus.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessStatus.java new file mode 100644 index 0000000..7eb0695 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessStatus.java @@ -0,0 +1,20 @@ +package org.lingniu.idp.enums; + +/** + * 操作状态 + * + * @author portal + * + */ +public enum BusinessStatus +{ + /** + * 成功 + */ + SUCCESS, + + /** + * 失败 + */ + FAIL, +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessType.java new file mode 100644 index 0000000..6815837 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/BusinessType.java @@ -0,0 +1,59 @@ +package org.lingniu.idp.enums; + +/** + * 业务操作类型 + * + * @author portal + */ +public enum BusinessType +{ + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/CustomScopes.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/CustomScopes.java new file mode 100644 index 0000000..ff3c202 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/CustomScopes.java @@ -0,0 +1,5 @@ +package org.lingniu.idp.enums; + +public enum CustomScopes { + PERMS +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataScope.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataScope.java new file mode 100644 index 0000000..7f6ceef --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataScope.java @@ -0,0 +1,24 @@ +package org.lingniu.idp.enums; + +/** + * 1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限 + */ +public enum DataScope { + ALL(1), + CUSTOM(2), + DEPT_AND_SUB(3), + DEPT_SELF(4), + USER_SELF(5); + private Integer value; + DataScope(Integer value){ + this.value = value; + } + + public int value(){ + return value; + } + + public void setValue(Integer value) { + this.value = value; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataSourceType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataSourceType.java new file mode 100644 index 0000000..b6066be --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DataSourceType.java @@ -0,0 +1,19 @@ +package org.lingniu.idp.enums; + +/** + * 数据源 + * + * @author portal + */ +public enum DataSourceType +{ + /** + * 主库 + */ + MASTER, + + /** + * 从库 + */ + SLAVE +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DesensitizedType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DesensitizedType.java new file mode 100644 index 0000000..1085150 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DesensitizedType.java @@ -0,0 +1,60 @@ +package org.lingniu.idp.enums; + +import org.lingniu.idp.utils.DesensitizedUtil; + +import java.util.function.Function; + +/** + * 脱敏类型 + * + * @author portal + */ +public enum DesensitizedType +{ + /** + * 姓名,第2位星号替换 + */ + USERNAME(s -> s.replaceAll("(\\S)\\S(\\S*)", "$1*$2")), + + /** + * 密码,全部字符都用*代替 + */ + PASSWORD(DesensitizedUtil::password), + + /** + * 身份证,中间10位星号替换 + */ + ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{3}[Xx]|\\d{4})", "$1** **** ****$2")), + + /** + * 手机号,中间4位星号替换 + */ + PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")), + + /** + * 电子邮箱,仅显示第一个字母和@后面的地址显示,其他星号替换 + */ + EMAIL(s -> s.replaceAll("(^.)[^@]*(@.*$)", "$1****$2")), + + /** + * 银行卡号,保留最后4位,其他星号替换 + */ + BANK_CARD(s -> s.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1")), + + /** + * 车牌号码,包含普通车辆、新能源车辆 + */ + CAR_LICENSE(DesensitizedUtil::carLicense); + + private final Function desensitizer; + + DesensitizedType(Function desensitizer) + { + this.desensitizer = desensitizer; + } + + public Function desensitizer() + { + return desensitizer; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DeviceType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DeviceType.java new file mode 100644 index 0000000..f93c4c1 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/DeviceType.java @@ -0,0 +1,24 @@ +package org.lingniu.idp.enums; + + /** + * 设备类型枚举 + */ + public enum DeviceType { + WEB("网页"), + IOS("iOS"), + ANDROID("安卓"), + H5("H5"), + MINI_PROGRAM("小程序"), + DESKTOP("桌面端"), + OTHER("其他"); + + private final String description; + + DeviceType(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + } \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/HttpMethod.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/HttpMethod.java new file mode 100644 index 0000000..6f4be23 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/HttpMethod.java @@ -0,0 +1,37 @@ +package org.lingniu.idp.enums; + +import org.springframework.lang.Nullable; + +import java.util.HashMap; +import java.util.Map; + +/** + * 请求方式 + * + * @author portal + */ +public enum HttpMethod +{ + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; + + private static final Map mappings = new HashMap<>(16); + + static + { + for (HttpMethod httpMethod : values()) + { + mappings.put(httpMethod.name(), httpMethod); + } + } + + @Nullable + public static HttpMethod resolve(@Nullable String method) + { + return (method != null ? mappings.get(method) : null); + } + + public boolean matches(String method) + { + return (this == resolve(method)); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/LimitType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/LimitType.java new file mode 100644 index 0000000..0ddc070 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/LimitType.java @@ -0,0 +1,20 @@ +package org.lingniu.idp.enums; + +/** + * 限流类型 + * + * @author portal + */ + +public enum LimitType +{ + /** + * 默认策略全局限流 + */ + DEFAULT, + + /** + * 根据请求者IP进行限流 + */ + IP +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/OperatorType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/OperatorType.java new file mode 100644 index 0000000..9b6a2c4 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/OperatorType.java @@ -0,0 +1,24 @@ +package org.lingniu.idp.enums; + +/** + * 操作人类别 + * + * @author portal + */ +public enum OperatorType +{ + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/RevokeReason.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/RevokeReason.java new file mode 100644 index 0000000..a5217d0 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/RevokeReason.java @@ -0,0 +1,25 @@ +package org.lingniu.idp.enums; + +/** + * 撤销原因枚举 + */ + public enum RevokeReason { + USER_LOGOUT("用户主动登出"), + ADMIN_REVOKED("管理员撤销"), + DEVICE_CHANGED("设备变更"), + SUSPICIOUS_ACTIVITY("可疑活动"), + PASSWORD_CHANGED("密码修改"), + SESSION_EXPIRED("会话过期"), + SECURITY_POLICY("安全策略"), + OTHER("其他"); + + private final String description; + + RevokeReason(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + } \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/UserStatus.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/UserStatus.java new file mode 100644 index 0000000..e9b81ad --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/enums/UserStatus.java @@ -0,0 +1,30 @@ +package org.lingniu.idp.enums; + +/** + * 用户状态 + * + * @author portal + */ +public enum UserStatus +{ + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatus(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/DemoModeException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/DemoModeException.java new file mode 100644 index 0000000..d28d3b7 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/DemoModeException.java @@ -0,0 +1,15 @@ +package org.lingniu.idp.exception; + +/** + * 演示模式异常 + * + * @author portal + */ +public class DemoModeException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public DemoModeException() + { + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/GlobalException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/GlobalException.java new file mode 100644 index 0000000..c99beb2 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/GlobalException.java @@ -0,0 +1,58 @@ +package org.lingniu.idp.exception; + +/** + * 全局异常 + * + * @author portal + */ +public class GlobalException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public GlobalException() + { + } + + public GlobalException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public GlobalException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage() + { + return message; + } + + public GlobalException setMessage(String message) + { + this.message = message; + return this; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/ServiceException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/ServiceException.java new file mode 100644 index 0000000..49d5627 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/ServiceException.java @@ -0,0 +1,74 @@ +package org.lingniu.idp.exception; + +/** + * 业务异常 + * + * @author portal + */ +public final class ServiceException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误码 + */ + private Integer code; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException() + { + } + + public ServiceException(String message) + { + this.message = message; + } + + public ServiceException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public String getDetailMessage() + { + return detailMessage; + } + + @Override + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } + + public ServiceException setMessage(String message) + { + this.message = message; + return this; + } + + public ServiceException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/UtilException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/UtilException.java new file mode 100644 index 0000000..d2500ea --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/UtilException.java @@ -0,0 +1,26 @@ +package org.lingniu.idp.exception; + +/** + * 工具类异常 + * + * @author portal + */ +public class UtilException extends RuntimeException +{ + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException(Throwable e) + { + super(e.getMessage(), e); + } + + public UtilException(String message) + { + super(message); + } + + public UtilException(String message, Throwable throwable) + { + super(message, throwable); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/base/BaseException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/base/BaseException.java new file mode 100644 index 0000000..9e7334a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/base/BaseException.java @@ -0,0 +1,97 @@ +package org.lingniu.idp.exception.base; + +import org.lingniu.idp.utils.MessageUtils; +import org.lingniu.idp.utils.StringUtils; + +/** + * 基础异常 + * + * @author portal + */ +public class BaseException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 所属模块 + */ + private String module; + + /** + * 错误码 + */ + private String code; + + /** + * 错误码对应的参数 + */ + private Object[] args; + + /** + * 错误消息 + */ + private String defaultMessage; + + public BaseException(String module, String code, Object[] args, String defaultMessage) + { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException(String module, String code, Object[] args) + { + this(module, code, args, null); + } + + public BaseException(String module, String defaultMessage) + { + this(module, null, null, defaultMessage); + } + + public BaseException(String code, Object[] args) + { + this(null, code, args, null); + } + + public BaseException(String defaultMessage) + { + this(null, null, null, defaultMessage); + } + + @Override + public String getMessage() + { + String message = null; + if (!StringUtils.isEmpty(code)) + { + message = MessageUtils.message(code, args); + } + if (message == null) + { + message = defaultMessage; + } + return message; + } + + public String getModule() + { + return module; + } + + public String getCode() + { + return code; + } + + public Object[] getArgs() + { + return args; + } + + public String getDefaultMessage() + { + return defaultMessage; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/BlackListException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/BlackListException.java new file mode 100644 index 0000000..0ffe38a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/BlackListException.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.exception.user; + +import org.lingniu.idp.exception.user.UserException; + +/** + * 黑名单IP异常类 + * + * @author portal + */ +public class BlackListException extends UserException +{ + private static final long serialVersionUID = 1L; + + public BlackListException() + { + super("login.blocked", null); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaException.java new file mode 100644 index 0000000..e880463 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaException.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.exception.user; + +import org.lingniu.idp.exception.user.UserException; + +/** + * 验证码错误异常类 + * + * @author portal + */ +public class CaptchaException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaException() + { + super("user.jcaptcha.error", null); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaExpireException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000..8063624 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/CaptchaExpireException.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.exception.user; + +import org.lingniu.idp.exception.user.UserException; + +/** + * 验证码失效异常类 + * + * @author portal + */ +public class CaptchaExpireException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaExpireException() + { + super("user.jcaptcha.expire", null); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserException.java new file mode 100644 index 0000000..c03d76c --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserException.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.exception.user; + +import org.lingniu.idp.exception.base.BaseException; + +/** + * 用户信息异常类 + * + * @author portal + */ +public class UserException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) + { + super("user", code, args, null); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserNotExistsException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserNotExistsException.java new file mode 100644 index 0000000..7b26368 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserNotExistsException.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.exception.user; + +import org.lingniu.idp.exception.user.UserException; + +/** + * 用户不存在异常类 + * + * @author portal + */ +public class UserNotExistsException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserNotExistsException() + { + super("user.not.exists", null); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordNotMatchException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..51dc4d3 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.exception.user; + +import org.lingniu.idp.exception.user.UserException; + +/** + * 用户密码不正确或不符合规范异常类 + * + * @author portal + */ +public class UserPasswordNotMatchException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() + { + super("user.password.not.match", null); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordRetryLimitExceedException.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordRetryLimitExceedException.java new file mode 100644 index 0000000..2ede09c --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/exception/user/UserPasswordRetryLimitExceedException.java @@ -0,0 +1,16 @@ +package org.lingniu.idp.exception.user; + +/** + * 用户错误最大次数异常类 + * + * @author portal + */ +public class UserPasswordRetryLimitExceedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime) + { + super("user.password.retry.limit.exceed", new Object[] { retryLimitCount, lockTime }); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/AsyncManager.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/AsyncManager.java new file mode 100644 index 0000000..df94715 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/AsyncManager.java @@ -0,0 +1,56 @@ +package org.lingniu.idp.manager; + +import org.lingniu.idp.utils.Threads; +import org.lingniu.idp.utils.spring.SpringUtils; + +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * 异步任务管理器 + * + * @author portal + */ +public class AsyncManager +{ + /** + * 操作延迟10毫秒 + */ + private final int OPERATE_DELAY_TIME = 10; + + /** + * 异步操作任务调度线程池 + */ + private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); + + /** + * 单例模式 + */ + private AsyncManager(){} + + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() + { + return me; + } + + /** + * 执行任务 + * + * @param task 任务 + */ + public void execute(TimerTask task) + { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } + + /** + * 停止任务线程池 + */ + public void shutdown() + { + Threads.shutdownAndAwaitTermination(executor); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/ShutdownManager.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/ShutdownManager.java new file mode 100644 index 0000000..eb980de --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/ShutdownManager.java @@ -0,0 +1,40 @@ +package org.lingniu.idp.manager; + +import jakarta.annotation.PreDestroy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +/** + * 确保应用退出时能关闭后台线程 + * + * @author portal + */ +@Component +public class ShutdownManager +{ + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @PreDestroy + public void destroy() + { + shutdownAsyncManager(); + } + + /** + * 停止异步执行任务 + */ + private void shutdownAsyncManager() + { + try + { + logger.info("====关闭后台任务任务线程池===="); + AsyncManager.me().shutdown(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/factory/AsyncFactory.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/factory/AsyncFactory.java new file mode 100644 index 0000000..3c4cacf --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/manager/factory/AsyncFactory.java @@ -0,0 +1,103 @@ +package org.lingniu.idp.manager.factory; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.service.ISysLogininforService; +import org.lingniu.idp.service.ISysOperLogService; +import org.lingniu.idp.utils.LogUtils; +import org.lingniu.idp.utils.ServletUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.http.UserAgentUtils; +import org.lingniu.idp.utils.ip.AddressUtils; +import org.lingniu.idp.utils.ip.IpUtils; +import org.lingniu.idp.utils.spring.SpringUtils; + +import org.lingniu.idp.model.entity.SysLogininfor; +import org.lingniu.idp.model.entity.SysOperLog; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.TimerTask; + +/** + * 异步工厂(产生任务用) + * + * @author portal + */ +public class AsyncFactory +{ + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息 + * @param args 列表 + * @return 任务task + */ + public static TimerTask recordLogininfor(final String username, final String status, final String message, + final Object... args) + { + final String userAgent = ServletUtils.getRequest().getHeader("User-Agent"); + final String ip = IpUtils.getIpAddr(); + return new TimerTask() + { + @Override + public void run() + { + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 打印信息到日志 + sys_user_logger.info(s.toString(), args); + // 获取客户端操作系统 + String os = UserAgentUtils.getOperatingSystem(userAgent); + // 获取客户端浏览器 + String browser = UserAgentUtils.getBrowser(userAgent); + // 封装对象 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + // 日志状态 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) + { + logininfor.setStatus(Constants.SUCCESS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.FAIL); + } + // 插入数据 + SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); + } + }; + } + + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordOper(final SysOperLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); + } + }; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysConfigMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysConfigMapper.java new file mode 100644 index 0000000..3bd410e --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysConfigMapper.java @@ -0,0 +1,79 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysConfig; + +/** + * 参数配置 数据层 + * + * @author portal + */ +@Mapper +public interface SysConfigMapper +{ + /** + * 查询参数配置信息 + * + * @param config 参数配置信息 + * @return 参数配置信息 + */ + public SysConfig selectConfig(SysConfig config); + + /** + * 通过ID查询配置 + * + * @param configId 参数ID + * @return 参数配置信息 + */ + public SysConfig selectConfigById(Long configId); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + public List selectConfigList(SysConfig config); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数配置信息 + */ + public SysConfig checkConfigKeyUnique(String configKey); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int updateConfig(SysConfig config); + + /** + * 删除参数配置 + * + * @param configId 参数ID + * @return 结果 + */ + public int deleteConfigById(Long configId); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + public int deleteConfigByIds(Long[] configIds); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysDeptMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysDeptMapper.java new file mode 100644 index 0000000..d117079 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysDeptMapper.java @@ -0,0 +1,122 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.lingniu.idp.model.entity.SysDept; + +/** + * 部门管理 数据层 + * + * @author portal + */ +@Mapper +public interface SysDeptMapper +{ + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @return 部门信息集合 + */ + public List selectDeptList(SysDept dept); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @param deptCheckStrictly 部门树选择项是否关联显示 + * @return 选中部门列表 + */ + public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + public SysDept selectDeptById(Long deptId); + public List selectDeptListByUserRole(Long userId); + + /** + * 根据ID查询所有子部门 + * + * @param deptId 部门ID + * @return 部门列表 + */ + public List selectChildrenDeptById(Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + public int hasChildByDeptId(Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 + */ + public int checkDeptExistUser(Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param deptName 部门名称 + * @param parentId 父部门ID + * @return 结果 + */ + public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId); + + /** + * 新增部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int insertDept(SysDept dept); + + /** + * 修改部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int updateDept(SysDept dept); + + /** + * 修改所在部门正常状态 + * + * @param deptIds 部门ID组 + */ + public void updateDeptStatusNormal(Long[] deptIds); + + /** + * 修改子元素关系 + * + * @param depts 子元素 + * @return 结果 + */ + public int updateDeptChildren(@Param("depts") List depts); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + public int deleteDeptById(Long deptId); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysLogininforMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysLogininforMapper.java new file mode 100644 index 0000000..d97c0cb --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysLogininforMapper.java @@ -0,0 +1,45 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysLogininfor; + +/** + * 系统访问日志情况信息 数据层 + * + * @author portal + */ +@Mapper +public interface SysLogininforMapper +{ + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * @return 结果 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 清空系统登录日志 + * + * @return 结果 + */ + public int cleanLogininfor(); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysMenuMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysMenuMapper.java new file mode 100644 index 0000000..41501a4 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysMenuMapper.java @@ -0,0 +1,128 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.lingniu.idp.model.entity.SysMenu; + +/** + * 菜单表 数据层 + * + * @author portal + */ +@Mapper +public interface SysMenuMapper +{ + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu); + + /** + * 根据用户所有权限 + * + * @return 权限列表 + */ + public List selectMenuPerms(); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + public List selectMenuListByUserId(SysMenu menu); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + public List selectMenuPermsByRoleId(Long roleId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public List selectMenuPermsByUserId(Long userId); + + /** + * 根据用户ID查询菜单 + * + * @return 菜单列表 + */ + public List selectMenuTreeAll(); + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @param menuCheckStrictly 菜单树选择项是否关联显示 + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int hasChildByMenuId(Long menuId); + + /** + * 新增菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int insertMenu(SysMenu menu); + + /** + * 修改菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menuName 菜单名称 + * @param parentId 父菜单ID + * @return 结果 + */ + public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysOperLogMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..40332b8 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysOperLogMapper.java @@ -0,0 +1,51 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysOperLog; + +/** + * 操作日志 数据层 + * + * @author portal + */ +@Mapper +public interface SysOperLogMapper +{ + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog(); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysPostMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysPostMapper.java new file mode 100644 index 0000000..b2f81b1 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysPostMapper.java @@ -0,0 +1,102 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysPost; + +/** + * 岗位信息 数据层 + * + * @author portal + */ +@Mapper +public interface SysPostMapper +{ + /** + * 查询岗位数据集合 + * + * @param post 岗位信息 + * @return 岗位数据集合 + */ + public List selectPostList(SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll(); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * @return 角色对象信息 + */ + public SysPost selectPostById(Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId(Long userId); + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * @return 结果 + */ + public List selectPostsByUserName(String userName); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * @return 结果 + */ + public int deletePostById(Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * @return 结果 + */ + public int deletePostByIds(Long[] postIds); + + /** + * 修改岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int updatePost(SysPost post); + + /** + * 新增岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int insertPost(SysPost post); + + /** + * 校验岗位名称 + * + * @param postName 岗位名称 + * @return 结果 + */ + public SysPost checkPostNameUnique(String postName); + + /** + * 校验岗位编码 + * + * @param postCode 岗位编码 + * @return 结果 + */ + public SysPost checkPostCodeUnique(String postCode); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleDeptMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000..08bda28 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleDeptMapper.java @@ -0,0 +1,47 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysRoleDept; + +/** + * 角色与部门关联表 数据层 + * + * @author portal + */ +@Mapper +public interface SysRoleDeptMapper +{ + /** + * 通过角色ID删除角色和部门关联 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleDeptByRoleId(Long roleId); + + /** + * 批量删除角色部门关联信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteRoleDept(Long[] ids); + + /** + * 查询部门使用数量 + * + * @param deptId 部门ID + * @return 结果 + */ + public int selectCountRoleDeptByDeptId(Long deptId); + + /** + * 批量新增角色部门信息 + * + * @param roleDeptList 角色部门列表 + * @return 结果 + */ + public int batchRoleDept(List roleDeptList); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMapper.java new file mode 100644 index 0000000..cb146bd --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMapper.java @@ -0,0 +1,110 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysRole; + +/** + * 角色表 数据层 + * + * @author portal + */ +@Mapper +public interface SysRoleMapper +{ + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + public List selectRoleList(SysRole role); + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + public List selectRolePermissionByUserId(Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll(); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 根据用户ID查询角色 + * + * @param userName 用户名 + * @return 角色列表 + */ + public List selectRolesByUserName(String userName); + + /** + * 校验角色名称是否唯一 + * + * @param roleName 角色名称 + * @return 角色信息 + */ + public SysRole checkRoleNameUnique(String roleName); + + /** + * 校验角色权限是否唯一 + * + * @param roleKey 角色权限 + * @return 角色信息 + */ + public SysRole checkRoleKeyUnique(String roleKey); + + /** + * 修改角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int updateRole(SysRole role); + + /** + * 新增角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int insertRole(SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleById(Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + public int deleteRoleByIds(Long[] roleIds); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMenuMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..8e6de27 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysRoleMenuMapper.java @@ -0,0 +1,47 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysRoleMenu; + +/** + * 角色与菜单关联表 数据层 + * + * @author portal + */ +@Mapper +public interface SysRoleMenuMapper +{ + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int checkMenuExistRole(Long menuId); + + /** + * 通过角色ID删除角色和菜单关联 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleMenuByRoleId(Long roleId); + + /** + * 批量删除角色菜单关联信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteRoleMenu(Long[] ids); + + /** + * 批量新增角色菜单信息 + * + * @param roleMenuList 角色菜单列表 + * @return 结果 + */ + public int batchRoleMenu(List roleMenuList); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserMapper.java new file mode 100644 index 0000000..f6f189b --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserMapper.java @@ -0,0 +1,150 @@ +package org.lingniu.idp.mapper; + +import java.util.Date; +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.lingniu.idp.model.entity.SysUser; + +/** + * 用户表 数据层 + * + * @author portal + */ +@Mapper +public interface SysUserMapper +{ + /** + * 根据条件分页查询用户列表 + * + * @param sysUser 用户信息 + * @return 用户信息集合信息 + */ + public List selectUserList(SysUser sysUser); + + /** + * 根据条件分页查询已配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectAllocatedList(SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + public SysUser selectUserById(Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int insertUser(SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUser(SysUser user); + + /** + * 修改用户头像 + * + * @param userId 用户ID + * @param avatar 头像地址 + * @return 结果 + */ + public int updateUserAvatar(@Param("userId") Long userId, @Param("avatar") String avatar); + + /** + * 修改用户状态 + * + * @param userId 用户ID + * @param status 状态 + * @return 结果 + */ + public int updateUserStatus(@Param("userId") Long userId, @Param("status") String status); + + /** + * 更新用户登录信息(IP和登录时间) + * + * @param userId 用户ID + * @param loginIp 登录IP地址 + * @param loginDate 登录时间 + * @return 结果 + */ + public int updateLoginInfo(@Param("userId") Long userId, @Param("loginIp") String loginIp, @Param("loginDate") Date loginDate); + + /** + * 重置用户密码 + * + * @param userId 用户ID + * @param password 密码 + * @return 结果 + */ + public int resetUserPwd(@Param("userId") Long userId, @Param("password") String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserById(Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + public SysUser checkUserNameUnique(String userName); + + /** + * 校验手机号码是否唯一 + * + * @param phonenumber 手机号码 + * @return 结果 + */ + public SysUser checkPhoneUnique(String phonenumber); + + /** + * 校验email是否唯一 + * + * @param email 用户邮箱 + * @return 结果 + */ + public SysUser checkEmailUnique(String email); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserPostMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserPostMapper.java new file mode 100644 index 0000000..6b2f894 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserPostMapper.java @@ -0,0 +1,47 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.lingniu.idp.model.entity.SysUserPost; + +/** + * 用户与岗位关联表 数据层 + * + * @author portal + */ +@Mapper +public interface SysUserPostMapper +{ + /** + * 通过用户ID删除用户和岗位关联 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserPostByUserId(Long userId); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * @return 结果 + */ + public int countUserPostById(Long postId); + + /** + * 批量删除用户和岗位关联 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteUserPost(Long[] ids); + + /** + * 批量新增用户岗位信息 + * + * @param userPostList 用户岗位列表 + * @return 结果 + */ + public int batchUserPost(List userPostList); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserRoleMapper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..e599c42 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/mapper/SysUserRoleMapper.java @@ -0,0 +1,65 @@ +package org.lingniu.idp.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.lingniu.idp.model.entity.SysUserRole; + +/** + * 用户与角色关联表 数据层 + * + * @author portal + */ +@Mapper +public interface SysUserRoleMapper +{ + /** + * 通过用户ID删除用户和角色关联 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserRoleByUserId(Long userId); + + /** + * 批量删除用户和角色关联 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteUserRole(Long[] ids); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 批量新增用户角色信息 + * + * @param userRoleList 用户角色列表 + * @return 结果 + */ + public int batchUserRole(List userRoleList); + + /** + * 删除用户和角色关联信息 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + public int deleteUserRoleInfo(SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/AjaxResult.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/AjaxResult.java new file mode 100644 index 0000000..0b47cd8 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/AjaxResult.java @@ -0,0 +1,187 @@ +package org.lingniu.idp.model.base; + +import org.lingniu.idp.utils.StringUtils; +import org.springframework.http.HttpStatus; + +import java.util.HashMap; +import java.util.Objects; + +/** + * 操作消息提醒 + * + * @author portal + */ +public class AjaxResult extends HashMap +{ + private static final long serialVersionUID = 1L; + + /** 状态码 */ + public static final String CODE_TAG = "code"; + + /** 返回内容 */ + public static final String MSG_TAG = "msg"; + + /** 数据对象 */ + public static final String DATA_TAG = "data"; + + /** + * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 + */ + public AjaxResult() + { + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + */ + public AjaxResult(int code, String msg) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResult(int code, String msg, Object data) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + if (StringUtils.isNotNull(data)) + { + super.put(DATA_TAG, data); + } + } + + /** + * 返回成功消息 + * + * @return 成功消息 + */ + public static AjaxResult success() + { + return AjaxResult.success("操作成功"); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResult success(Object data) + { + return AjaxResult.success("操作成功", data); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @return 成功消息 + */ + public static AjaxResult success(String msg) + { + return AjaxResult.success(msg, null); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 成功消息 + */ + public static AjaxResult success(String msg, Object data) + { + return new AjaxResult(HttpStatus.OK.value(), msg, data); + } + + + + /** + * 返回错误消息 + * + * @return 错误消息 + */ + public static AjaxResult error() + { + return AjaxResult.error("操作失败"); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @return 错误消息 + */ + public static AjaxResult error(String msg) + { + return AjaxResult.error(msg, null); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 错误消息 + */ + public static AjaxResult error(String msg, Object data) + { + return new AjaxResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), msg, data); + } + + /** + * 返回错误消息 + * + * @param code 状态码 + * @param msg 返回内容 + * @return 错误消息 + */ + public static AjaxResult error(int code, String msg) + { + return new AjaxResult(code, msg, null); + } + + /** + * 是否为成功消息 + * + * @return 结果 + */ + public boolean isSuccess() + { + return Objects.equals(HttpStatus.OK.value(), this.get(CODE_TAG)); + } + + + /** + * 是否为错误消息 + * + * @return 结果 + */ + public boolean isError() + { + return Objects.equals(HttpStatus.INTERNAL_SERVER_ERROR.value(), this.get(CODE_TAG)); + } + + /** + * 方便链式调用 + * + * @param key 键 + * @param value 值 + * @return 数据对象 + */ + @Override + public AjaxResult put(String key, Object value) + { + super.put(key, value); + return this; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/BaseEntity.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/BaseEntity.java new file mode 100644 index 0000000..95a42db --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/BaseEntity.java @@ -0,0 +1,119 @@ +package org.lingniu.idp.model.base; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Entity基类 + * + * @author portal + */ +public class BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 搜索值 */ + @JsonIgnore + private String searchValue; + + /** 创建者 */ + private String createBy; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新者 */ + private String updateBy; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 备注 */ + private String remark; + + /** 请求参数 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + public String getSearchValue() + { + return searchValue; + } + + public void setSearchValue(String searchValue) + { + this.searchValue = searchValue; + } + + public String getCreateBy() + { + return createBy; + } + + public void setCreateBy(String createBy) + { + this.createBy = createBy; + } + + public Date getCreateTime() + { + return createTime; + } + + public void setCreateTime(Date createTime) + { + this.createTime = createTime; + } + + public String getUpdateBy() + { + return updateBy; + } + + public void setUpdateBy(String updateBy) + { + this.updateBy = updateBy; + } + + public Date getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(Date updateTime) + { + this.updateTime = updateTime; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } + + public Map getParams() + { + if (params == null) + { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) + { + this.params = params; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/CommonResult.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/CommonResult.java new file mode 100644 index 0000000..4402af4 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/CommonResult.java @@ -0,0 +1,80 @@ +package org.lingniu.idp.model.base; + +import cn.hutool.core.lang.Assert; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.springframework.http.HttpStatus; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Objects; + +/** + * 通用返回 + * + * @param 数据泛型 + */ +@Data +public class CommonResult implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 错误码 + * + */ + private Integer code; + /** + * 错误提示,用户可阅读 + * + */ + private String msg; + /** + * 返回数据 + */ + private T data; + + /** + * 将传入的 result 对象,转换成另外一个泛型结果的对象 + * + * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 + * + * @param result 传入的 result 对象 + * @param 返回的泛型 + * @return 新的 CommonResult 对象 + */ + public static CommonResult error(CommonResult result) { + return error(result.getCode(), result.getMsg()); + } + + public static CommonResult error(Integer code, String message) { + Assert.notEquals(HttpStatus.OK.value(), code, "code 必须是错误的!"); + CommonResult result = new CommonResult<>(); + result.code = code; + result.msg = message; + return result; + } + + + public static CommonResult success(T data) { + CommonResult result = new CommonResult<>(); + result.code = HttpStatus.OK.value(); + result.data = data; + result.msg = ""; + return result; + } + + public static boolean isSuccess(Integer code) { + return Objects.equals(code, HttpStatus.OK.value()); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isSuccess() { + return isSuccess(code); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isError() { + return !isSuccess(); + } + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/TreeSelect.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/TreeSelect.java new file mode 100644 index 0000000..74a4c4e --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/base/TreeSelect.java @@ -0,0 +1,94 @@ +package org.lingniu.idp.model.base; + +import com.fasterxml.jackson.annotation.JsonInclude; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.model.entity.SysDept; +import org.lingniu.idp.model.entity.SysMenu; +import org.lingniu.idp.utils.StringUtils; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Treeselect树结构实体类 + * + * @author portal + */ +public class TreeSelect implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private Long id; + + /** 节点名称 */ + private String label; + + /** 节点禁用 */ + private boolean disabled = false; + + /** 子节点 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + public TreeSelect() + { + + } + + public TreeSelect(SysDept dept) + { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.disabled = StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect(SysMenu menu) + { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + public boolean isDisabled() + { + return disabled; + } + + public void setDisabled(boolean disabled) + { + this.disabled = disabled; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/AccountLoginDto.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/AccountLoginDto.java new file mode 100644 index 0000000..4edaf8d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/AccountLoginDto.java @@ -0,0 +1,35 @@ +package org.lingniu.idp.model.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * 用户登录对象 + * + * @author portal + */ +@Setter +@Getter +public class AccountLoginDto +{ + /** + * 用户名 + */ + private String username; + + /** + * 用户密码 + */ + private String password; + + /** + * 验证码 + */ + private String code; + + /** + * 唯一标识 + */ + private String uuid; + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/LoginUser.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/LoginUser.java new file mode 100644 index 0000000..efd3236 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/LoginUser.java @@ -0,0 +1,169 @@ +package org.lingniu.idp.model.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import lombok.Getter; +import lombok.Setter; +import org.lingniu.idp.model.entity.SysUser; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.io.Serial; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; + +/** + * 登录用户身份权限 + * + * @author portal + */ +@Setter +@Getter +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) +@JsonIgnoreProperties(ignoreUnknown = true) +public class LoginUser implements UserDetails +{ + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 权限列表 + */ + private Set permissions; + + /** + * 用户信息 + */ + private SysUser user; + + public LoginUser() + { + } + + public LoginUser(SysUser user, Set permissions) + { + this.user = user; + this.permissions = permissions; + } + + public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) + { + this.userId = userId; + this.deptId = deptId; + this.user = user; + this.permissions = permissions; + } + + @JSONField(serialize = false) + @Override + public String getPassword() + { + return user.getPassword(); + } + + @Override + public String getUsername() + { + return user.getUserName(); + } + + /** + * 账户是否未过期,过期无法验证 + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonExpired() + { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonLocked() + { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isCredentialsNonExpired() + { + return true; + } + + /** + * 是否可用 ,禁用的用户不能身份验证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isEnabled() + { + return true; + } + + @Override + public Collection getAuthorities() + { + return null; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/RegisterAccountDto.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/RegisterAccountDto.java new file mode 100644 index 0000000..ac77212 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/dto/RegisterAccountDto.java @@ -0,0 +1,11 @@ +package org.lingniu.idp.model.dto; + +/** + * 用户注册对象 + * + * @author portal + */ +public class RegisterAccountDto extends AccountLoginDto +{ + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysCache.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysCache.java new file mode 100644 index 0000000..da2dfeb --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysCache.java @@ -0,0 +1,81 @@ +package org.lingniu.idp.model.entity; + +import org.lingniu.idp.utils.StringUtils; + +/** + * 缓存信息 + * + * @author portal + */ +public class SysCache +{ + /** 缓存名称 */ + private String cacheName = ""; + + /** 缓存键名 */ + private String cacheKey = ""; + + /** 缓存内容 */ + private String cacheValue = ""; + + /** 备注 */ + private String remark = ""; + + public SysCache() + { + + } + + public SysCache(String cacheName, String remark) + { + this.cacheName = cacheName; + this.remark = remark; + } + + public SysCache(String cacheName, String cacheKey, String cacheValue) + { + this.cacheName = StringUtils.replace(cacheName, ":", ""); + this.cacheKey = StringUtils.replace(cacheKey, cacheName, ""); + this.cacheValue = cacheValue; + } + + public String getCacheName() + { + return cacheName; + } + + public void setCacheName(String cacheName) + { + this.cacheName = cacheName; + } + + public String getCacheKey() + { + return cacheKey; + } + + public void setCacheKey(String cacheKey) + { + this.cacheKey = cacheKey; + } + + public String getCacheValue() + { + return cacheValue; + } + + public void setCacheValue(String cacheValue) + { + this.cacheValue = cacheValue; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysConfig.java new file mode 100644 index 0000000..c6a7361 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysConfig.java @@ -0,0 +1,104 @@ +package org.lingniu.idp.model.entity; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.lingniu.idp.model.base.BaseEntity; + +/** + * 参数配置表 sys_config + * + * @author portal + */ +public class SysConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 参数主键 */ + private Long configId; + + /** 参数名称 */ + private String configName; + + /** 参数键名 */ + private String configKey; + + /** 参数键值 */ + private String configValue; + + /** 系统内置(Y是 N否) */ + private String configType; + + public Long getConfigId() + { + return configId; + } + + public void setConfigId(Long configId) + { + this.configId = configId; + } + + @NotBlank(message = "参数名称不能为空") + @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") + public String getConfigName() + { + return configName; + } + + public void setConfigName(String configName) + { + this.configName = configName; + } + + @NotBlank(message = "参数键名长度不能为空") + @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") + public String getConfigKey() + { + return configKey; + } + + public void setConfigKey(String configKey) + { + this.configKey = configKey; + } + + @NotBlank(message = "参数键值不能为空") + @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") + public String getConfigValue() + { + return configValue; + } + + public void setConfigValue(String configValue) + { + this.configValue = configValue; + } + + public String getConfigType() + { + return configType; + } + + public void setConfigType(String configType) + { + this.configType = configType; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("configId", getConfigId()) + .append("configName", getConfigName()) + .append("configKey", getConfigKey()) + .append("configValue", getConfigValue()) + .append("configType", getConfigType()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysDept.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysDept.java new file mode 100644 index 0000000..d129cac --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysDept.java @@ -0,0 +1,102 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import jakarta.validation.constraints.Email; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.lingniu.idp.model.base.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +import java.io.Serial; +import java.util.ArrayList; +import java.util.List; + +/** + * 部门表 sys_dept + * + * @author portal + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class SysDept extends BaseEntity +{ + @Serial + private static final long serialVersionUID = 1L; + + /** 部门ID */ + private Long deptId; + + /** 父部门ID */ + private Long parentId; + + /** 祖级列表 */ + private String ancestors; + + /** 部门名称 */ + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + private String deptName; + + /** 显示顺序 */ + @NotNull(message = "显示顺序不能为空") + private Integer orderNum; + + /** 负责人 */ + private String leader; + + /** 联系电话 */ + @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") + private String phone; + + /** 邮箱 */ + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + private String email; + + /** 部门状态:0正常,1停用 */ + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 父部门名称 */ + private String parentName; + /**运维区域*/ + private Long areaId; + + /** 子部门 */ + private List children = new ArrayList(); + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysLogininfor.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysLogininfor.java new file mode 100644 index 0000000..58889b8 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysLogininfor.java @@ -0,0 +1,134 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.lingniu.idp.model.base.BaseEntity; + +import java.util.Date; + +/** + * 系统访问记录表 sys_logininfor + * + * @author portal + */ +public class SysLogininfor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + private Long infoId; + + /** 用户账号 */ + private String userName; + + /** 登录状态 0成功 1失败 */ + private String status; + + /** 登录IP地址 */ + private String ipaddr; + + /** 登录地点 */ + private String loginLocation; + + /** 浏览器类型 */ + private String browser; + + /** 操作系统 */ + private String os; + + /** 提示消息 */ + private String msg; + + /** 访问时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date loginTime; + + public Long getInfoId() + { + return infoId; + } + + public void setInfoId(Long infoId) + { + this.infoId = infoId; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public Date getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Date loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysMenu.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysMenu.java new file mode 100644 index 0000000..4d30f8b --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysMenu.java @@ -0,0 +1,278 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.validation.constraints.NotBlank; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.lingniu.idp.model.base.BaseEntity; + + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 菜单权限表 sys_menu + * + * @author portal + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public class SysMenu extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 菜单ID */ + private Long menuId; + + /** 菜单名称 */ + private String menuName; + + /** 父菜单名称 */ + private String parentName; + + /** 父菜单ID */ + private Long parentId; + + /** 显示顺序 */ + private Integer orderNum; + + /** 路由地址 */ + private String path; + + /** 组件路径 */ + private String component; + + /** 路由参数 */ + private String query; + + /** 路由名称,默认和路由地址相同的驼峰格式(注意:因为vue3版本的router会删除名称相同路由,为避免名字的冲突,特殊情况可以自定义) */ + private String routeName; + + /** 是否为外链(0是 1否) */ + private String isFrame; + + /** 是否缓存(0缓存 1不缓存) */ + private String isCache; + + /** 类型(M目录 C菜单 F按钮) */ + private String menuType; + + /** 显示状态(0显示 1隐藏) */ + private String visible; + + /** 菜单状态(0正常 1停用) */ + private String status; + + /** 权限字符串 */ + private String perms; + + /** 菜单图标 */ + private String icon; + + /** 子菜单 */ + private List children = new ArrayList(); + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public String getRouteName() + { + return routeName; + } + + public void setRouteName(String routeName) + { + this.routeName = routeName; + } + + public String getIsFrame() + { + return isFrame; + } + + public void setIsFrame(String isFrame) + { + this.isFrame = isFrame; + } + + public String getIsCache() + { + return isCache; + } + + public void setIsCache(String isCache) + { + this.isCache = isCache; + } + + @NotBlank(message = "菜单类型不能为空") + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("query", getQuery()) + .append("routeName", getRouteName()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysOperLog.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysOperLog.java new file mode 100644 index 0000000..14d47a9 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysOperLog.java @@ -0,0 +1,251 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.lingniu.idp.model.base.BaseEntity; + +import java.util.Date; + +/** + * 操作日志记录表 oper_log + * + * @author portal + */ +public class SysOperLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 日志主键 */ + private Long operId; + + /** 操作模块 */ + private String title; + + /** 业务类型(0其它 1新增 2修改 3删除) */ + private Integer businessType; + + /** 业务类型数组 */ + private Integer[] businessTypes; + + /** 请求方法 */ + private String method; + + /** 请求方式 */ + private String requestMethod; + + /** 操作类别(0其它 1后台用户 2手机端用户) */ + private Integer operatorType; + + /** 操作人员 */ + private String operName; + + /** 部门名称 */ + private String deptName; + + /** 请求url */ + private String operUrl; + + /** 操作地址 */ + private String operIp; + + /** 操作地点 */ + private String operLocation; + + /** 请求参数 */ + private String operParam; + + /** 返回参数 */ + private String jsonResult; + + /** 操作状态(0正常 1异常) */ + private Integer status; + + /** 错误消息 */ + private String errorMsg; + + /** 操作时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + /** 消耗时间 */ + private Long costTime; + + public Long getOperId() + { + return operId; + } + + public void setOperId(Long operId) + { + this.operId = operId; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public Integer getBusinessType() + { + return businessType; + } + + public void setBusinessType(Integer businessType) + { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() + { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) + { + this.businessTypes = businessTypes; + } + + public String getMethod() + { + return method; + } + + public void setMethod(String method) + { + this.method = method; + } + + public String getRequestMethod() + { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) + { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() + { + return operatorType; + } + + public void setOperatorType(Integer operatorType) + { + this.operatorType = operatorType; + } + + public String getOperName() + { + return operName; + } + + public void setOperName(String operName) + { + this.operName = operName; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getOperUrl() + { + return operUrl; + } + + public void setOperUrl(String operUrl) + { + this.operUrl = operUrl; + } + + public String getOperIp() + { + return operIp; + } + + public void setOperIp(String operIp) + { + this.operIp = operIp; + } + + public String getOperLocation() + { + return operLocation; + } + + public void setOperLocation(String operLocation) + { + this.operLocation = operLocation; + } + + public String getOperParam() + { + return operParam; + } + + public void setOperParam(String operParam) + { + this.operParam = operParam; + } + + public String getJsonResult() + { + return jsonResult; + } + + public void setJsonResult(String jsonResult) + { + this.jsonResult = jsonResult; + } + + public Integer getStatus() + { + return status; + } + + public void setStatus(Integer status) + { + this.status = status; + } + + public String getErrorMsg() + { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) + { + this.errorMsg = errorMsg; + } + + public Date getOperTime() + { + return operTime; + } + + public void setOperTime(Date operTime) + { + this.operTime = operTime; + } + + public Long getCostTime() + { + return costTime; + } + + public void setCostTime(Long costTime) + { + this.costTime = costTime; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysPost.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysPost.java new file mode 100644 index 0000000..771efbb --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysPost.java @@ -0,0 +1,72 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.lingniu.idp.model.base.BaseEntity; + +import java.io.Serial; + +/** + * 岗位表 sys_post + * + * @author portal + */ +@Getter +@Setter +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class SysPost extends BaseEntity +{ + + @Serial + private static final long serialVersionUID = 1L; + + /** 岗位序号 */ + private Long postId; + + /** 岗位编码 */ + @NotBlank(message = "岗位编码不能为空") + @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") + private String postCode; + + /** 岗位名称 */ + @NotBlank(message = "岗位名称不能为空") + @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") + private String postName; + + /** 岗位排序 */ + @NotNull(message = "显示顺序不能为空") + private Integer postSort; + + /** 状态(0正常 1停用) */ + private String status; + + /** 用户是否存在此岗位标识 默认不存在 */ + private boolean flag = false; + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("postId", getPostId()) + .append("postCode", getPostCode()) + .append("postName", getPostName()) + .append("postSort", getPostSort()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRole.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRole.java new file mode 100644 index 0000000..95a7579 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRole.java @@ -0,0 +1,111 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.lingniu.idp.model.base.BaseEntity; + +import java.io.Serial; +import java.util.Set; + +/** + * 角色表 sys_role + * + * @author portal + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class SysRole extends BaseEntity +{ + + @Serial + private static final long serialVersionUID = 1L; + + /** 角色ID */ + private Long roleId; + + /** 角色名称 */ + @NotBlank(message = "角色名称不能为空") + @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") + private String roleName; + + /** 角色权限 */ + @NotBlank(message = "权限字符不能为空") + @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") + private String roleKey; + + /** 角色排序 */ + @NotNull(message = "显示顺序不能为空") + private Integer roleSort; + + /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ + private String dataScope; + + /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ + private boolean menuCheckStrictly; + + /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ + private boolean deptCheckStrictly; + + /** 角色状态(0正常 1停用) */ + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 用户是否存在此角色标识 默认不存在 */ + private boolean flag = false; + + /** 菜单组 */ + private Long[] menuIds; + + /** 部门组(数据权限) */ + private Long[] deptIds; + + /** 角色菜单权限 */ + private Set permissions; + public SysRole(Long roleId){ + this.roleId = roleId; + } + public boolean isAdmin() + { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) + { + return roleId != null && 1L == roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleDept.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleDept.java new file mode 100644 index 0000000..cff8ac2 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleDept.java @@ -0,0 +1,46 @@ +package org.lingniu.idp.model.entity; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和部门关联 sys_role_dept + * + * @author portal + */ +public class SysRoleDept +{ + /** 角色ID */ + private Long roleId; + + /** 部门ID */ + private Long deptId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("deptId", getDeptId()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleMenu.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleMenu.java new file mode 100644 index 0000000..8f86d97 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysRoleMenu.java @@ -0,0 +1,46 @@ +package org.lingniu.idp.model.entity; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和菜单关联 sys_role_menu + * + * @author portal + */ +public class SysRoleMenu +{ + /** 角色ID */ + private Long roleId; + + /** 菜单ID */ + private Long menuId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("menuId", getMenuId()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUser.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUser.java new file mode 100644 index 0000000..5717ec1 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUser.java @@ -0,0 +1,141 @@ +package org.lingniu.idp.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.lingniu.idp.common.xss.Xss; +import org.lingniu.idp.model.base.BaseEntity; + +import java.io.Serial; +import java.util.Date; +import java.util.List; + +/** + * 用户对象 sys_user + * + * @author portal + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) +@JsonIgnoreProperties(ignoreUnknown = true) +@NoArgsConstructor +@Getter +@Setter +@JsonInclude(JsonInclude.Include.NON_NULL) +public class SysUser extends BaseEntity +{ + @Serial + private static final long serialVersionUID = 1L; + + /** 用户ID */ + private Long userId; + + /** 部门ID */ + private Long deptId; + + /** 用户账号 */ + @Xss(message = "用户账号不能包含脚本字符") + @NotBlank(message = "用户账号不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + private String userName; + + /** 用户昵称 */ + @Xss(message = "用户昵称不能包含脚本字符") + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + private String nickName; + + /** 用户邮箱 */ + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + private String email; + + /** 手机号码 */ + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + private String phonenumber; + + /** 用户性别 */ + private String sex; + + /** 用户头像 */ + private String avatar; + + /** 密码 */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private String password; + + /** 账号状态(0正常 1停用) */ + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 最后登录IP */ + private String loginIp; + + /** 最后登录时间 */ + private Date loginDate; + + /** 密码最后更新时间 */ + private Date pwdUpdateDate; + + private SysDept dept; + private List deptList; + private List posts; + + /** 角色对象 */ + private List roles; + + /** 角色组 */ + private Long[] roleIds; + + /** 岗位组 */ + private Long[] postIds; + + /** 角色ID */ + private Long roleId; + public SysUser(Long userId){ + this.userId = userId; + } + + public boolean isAdmin(){ + return userId!=null && userId==1; + } + public static boolean isAdmin(Long userId){ + return userId!=null && userId==1; + } + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("pwdUpdateDate", getPwdUpdateDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserOnline.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserOnline.java new file mode 100644 index 0000000..90a1652 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserOnline.java @@ -0,0 +1,113 @@ +package org.lingniu.idp.model.entity; + +/** + * 当前在线会话 + * + * @author portal + */ +public class SysUserOnline +{ + /** 会话编号 */ + private String tokenId; + + /** 部门名称 */ + private String deptName; + + /** 用户名称 */ + private String userName; + + /** 登录IP地址 */ + private String ipaddr; + + /** 登录地址 */ + private String loginLocation; + + /** 浏览器类型 */ + private String browser; + + /** 操作系统 */ + private String os; + + /** 登录时间 */ + private Long loginTime; + + public String getTokenId() + { + return tokenId; + } + + public void setTokenId(String tokenId) + { + this.tokenId = tokenId; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserPost.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserPost.java new file mode 100644 index 0000000..523272e --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserPost.java @@ -0,0 +1,46 @@ +package org.lingniu.idp.model.entity; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和岗位关联 sys_user_post + * + * @author portal + */ +public class SysUserPost +{ + /** 用户ID */ + private Long userId; + + /** 岗位ID */ + private Long postId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getPostId() + { + return postId; + } + + public void setPostId(Long postId) + { + this.postId = postId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("postId", getPostId()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserRole.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserRole.java new file mode 100644 index 0000000..4517a73 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/entity/SysUserRole.java @@ -0,0 +1,46 @@ +package org.lingniu.idp.model.entity; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和角色关联 sys_user_role + * + * @author portal + */ +public class SysUserRole +{ + /** 用户ID */ + private Long userId; + + /** 角色ID */ + private Long roleId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java new file mode 100644 index 0000000..a8d2865 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java @@ -0,0 +1,246 @@ +package org.lingniu.idp.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.lingniu.idp.enums.DeviceType; + +import java.time.Instant; +import java.util.*; + +/** + * Access Token 信息 + * 存储在 Redis String 结构中 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccessTokenInfo { + private String tokenValue; + + /** + * 用户ID + */ + private String userId; + + /** + * 用户名 + */ + private String username; + + /** + * 客户端ID + */ + private String clientId; + + /** + * 权限范围 + */ + private Set scopes; + + /** + * 颁发时间 + */ + private Instant issuedAt; + + /** + * 过期时间 + */ + private Instant expiresAt; + + /** + * 设备ID(可选,用于设备管理) + */ + private String deviceId; + + /** + * 设备类型(WEB/IOS/ANDROID) + */ + private DeviceType deviceType; + + /** + * IP地址 + */ + private String ipAddress; + + /** + * 用户代理(User-Agent) + */ + private String userAgent; + + /** + * 是否已撤销 + */ + private boolean revoked; + + /** + * 撤销时间 + */ + private Instant revokedAt; + + /** + * 关联的刷新Token ID + */ + private String refreshTokenId; + + /** + * JWT ID(如果是JWT token) + */ + private String jti; + + /** + * 附加数据(JSON格式) + */ + private String additionalInfo; + + /** + * 检查Token是否过期 + */ + public boolean isExpired() { + return expiresAt != null && Instant.now().isAfter(expiresAt); + } + + /** + * 检查Token是否有效 + */ + public boolean isValid() { + return !isExpired() && !revoked; + } + + /** + * 获取剩余有效时间(秒) + */ + public long getRemainingSeconds() { + if (expiresAt == null) { + return 0; + } + Instant now = Instant.now(); + if (now.isAfter(expiresAt)) { + return 0; + } + return expiresAt.getEpochSecond() - now.getEpochSecond(); + } + + /** + * 获取Token使用时长(秒) + */ + public long getUsedSeconds() { + if (issuedAt == null) { + return 0; + } + Instant end = revoked ? (revokedAt != null ? revokedAt : Instant.now()) : Instant.now(); + return end.getEpochSecond() - issuedAt.getEpochSecond(); + } + public Map toRevokeMap() { + Map hash = new HashMap<>(); + hash.put("revoked", Boolean.toString(revoked)); + hash.put("revokedAt", revokedAt != null ? revokedAt.toString() : ""); + return hash; + } + /** + * 转换为Map,便于Redis存储 + */ + public Map toMap() { + Map map = new HashMap<>(); + map.put("userId", userId); + map.put("username", username); + map.put("clientId", clientId); + map.put("tokenValue",tokenValue); + map.put("scopes", scopes != null ? String.join(",", scopes) : ""); + map.put("issuedAt", issuedAt != null ? issuedAt.toString() : null); + map.put("expiresAt", expiresAt != null ? expiresAt.toString() : null); + map.put("deviceId", deviceId); + map.put("deviceType", deviceType != null ? deviceType.name() : null); + map.put("ipAddress", ipAddress); + map.put("userAgent", userAgent); + map.put("revoked", Boolean.toString(revoked)); + map.put("revokedAt", revokedAt != null ? revokedAt.toString() : null); + map.put("refreshTokenId", refreshTokenId); + map.put("jti", jti); + map.put("additionalInfo", additionalInfo); + return map; + } + + /** + * 从Map创建AccessTokenInfo + */ + public static AccessTokenInfo fromMap(Map map) { + if (map == null || map.isEmpty()) { + return null; + } + + AccessTokenInfo.AccessTokenInfoBuilder builder = AccessTokenInfo.builder(); + + builder.userId((String) map.get("userId")); + builder.username((String) map.get("username")); + builder.clientId((String) map.get("clientId")); + builder.tokenValue((String) map.get("tokenValue")); + + // 处理scopes + String scopesStr = (String) map.get("scopes"); + if (scopesStr != null && !scopesStr.isEmpty()) { + builder.scopes(new HashSet<>(Arrays.asList(scopesStr.split(",")))); + } + + // 处理时间字段 + String issuedAtStr = (String) map.get("issuedAt"); + if (issuedAtStr != null) { + builder.issuedAt(Instant.parse(issuedAtStr)); + } + + String expiresAtStr = (String) map.get("expiresAt"); + if (expiresAtStr != null) { + builder.expiresAt(Instant.parse(expiresAtStr)); + } + + builder.deviceId((String) map.get("deviceId")); + + // 处理deviceType + String deviceTypeStr = (String) map.get("deviceType"); + if (deviceTypeStr != null) { + try { + builder.deviceType(DeviceType.valueOf(deviceTypeStr)); + } catch (IllegalArgumentException e) { + builder.deviceType(DeviceType.OTHER); + } + } + + builder.ipAddress((String) map.get("ipAddress")); + builder.userAgent((String) map.get("userAgent")); + + // 处理布尔值 + String revokedStr = (String) map.get("revoked"); + if (revokedStr != null) { + builder.revoked(Boolean.parseBoolean(revokedStr)); + } + + String revokedAtStr = (String) map.get("revokedAt"); + if (revokedAtStr != null) { + builder.revokedAt(Instant.parse(revokedAtStr)); + } + + builder.refreshTokenId((String) map.get("refreshTokenId")); + builder.jti((String) map.get("jti")); + builder.additionalInfo((String) map.get("additionalInfo")); + + return builder.build(); + } + + /** + * 简化的用户信息(用于接口返回) + */ + public Map toSimpleInfo() { + Map info = new HashMap<>(); + info.put("userId", userId); + info.put("username", username); + info.put("clientId", clientId); + info.put("scopes", scopes); + info.put("expiresAt", expiresAt != null ? expiresAt.toEpochMilli() : null); + info.put("issuedAt", issuedAt != null ? issuedAt.toEpochMilli() : null); + info.put("deviceType", deviceType != null ? deviceType.name() : null); + info.put("valid", isValid()); + return info; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/DataPermission.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/DataPermission.java new file mode 100644 index 0000000..2c427c9 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/DataPermission.java @@ -0,0 +1,20 @@ +package org.lingniu.idp.model.vo; + +import lombok.Builder; +import lombok.Data; + +import java.util.Set; + +@Data +@Builder +public class DataPermission { + /** 允许全部*/ + private boolean allowAll; + /**仅自己*/ + private boolean onlySelf; + /**部门列表*/ + private Set deptList; + /**地区*/ + private Set areas; + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/MetaVo.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/MetaVo.java new file mode 100644 index 0000000..fecd1e4 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/MetaVo.java @@ -0,0 +1,107 @@ +package org.lingniu.idp.model.vo; + + +import org.lingniu.idp.utils.StringUtils; + +/** + * 路由显示信息 + * + * @author portal + */ +public class MetaVo +{ + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private boolean noCache; + + /** + * 内链地址(http(s)://开头) + */ + private String link; + + public MetaVo() + { + } + + public MetaVo(String title, String icon) + { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, boolean noCache) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo(String title, String icon, String link) + { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo(String title, String icon, boolean noCache, String link) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) + { + this.link = link; + } + } + + public boolean isNoCache() + { + return noCache; + } + + public void setNoCache(boolean noCache) + { + this.noCache = noCache; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RefreshTokenInfo.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RefreshTokenInfo.java new file mode 100644 index 0000000..b3a5133 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RefreshTokenInfo.java @@ -0,0 +1,436 @@ +package org.lingniu.idp.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.lingniu.idp.enums.DeviceType; +import org.lingniu.idp.enums.RevokeReason; + +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Arrays; + +/** + * Refresh Token 信息 + * 存储在 Redis Hash 结构中 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RefreshTokenInfo { + private String tokenValue; + + /** + * 用户ID + */ + private String userId; + + /** + * 用户名 + */ + private String username; + + /** + * 客户端ID + */ + private String clientId; + + /** + * 设备ID(唯一标识设备) + */ + private String deviceId; + + /** + * 设备名称(用户自定义) + */ + private String deviceName; + + /** + * 设备类型 + */ + private DeviceType deviceType; + + /** + * 操作系统 + */ + private String operatingSystem; + + /** + * 浏览器/客户端类型 + */ + private String clientType; + + /** + * 权限范围 + */ + private Set scopes; + + /** + * 创建时间 + */ + private Instant createdAt; + + /** + * 最后使用时间 + */ + private Instant lastUsedAt; + + /** + * 过期时间 + */ + private Instant expiresAt; + + /** + * IP地址(创建时的IP) + */ + private String ipAddress; + + /** + * 用户代理(创建时的User-Agent) + */ + private String userAgent; + + /** + * 是否已撤销 + */ + private boolean revoked; + + /** + * 撤销时间 + */ + private Instant revokedAt; + + /** + * 撤销原因 + */ + private RevokeReason revokeReason; + /** + * 对应accessToken + */ + private String accessToken; + /** + * 关联的Access Token数量(用于统计) + */ + private int accessTokenCount; + + /** + * 使用次数 + */ + private int usageCount; + + /** + * 地理位置信息(可选) + */ + private String location; + + /** + * 附加数据(JSON格式) + */ + private String additionalInfo; + + /** + * 是否记住登录 + */ + private boolean rememberMe; + + + + + + /** + * 检查Refresh Token是否过期 + */ + public boolean isExpired() { + return expiresAt != null && Instant.now().isAfter(expiresAt); + } + + /** + * 检查Refresh Token是否有效 + */ + public boolean isValid() { + return !isExpired() && !revoked; + } + + /** + * 获取剩余有效时间(秒) + */ + public long getRemainingSeconds() { + if (expiresAt == null) { + return 0; + } + Instant now = Instant.now(); + if (now.isAfter(expiresAt)) { + return 0; + } + return expiresAt.getEpochSecond() - now.getEpochSecond(); + } + + /** + * 获取活跃天数(创建到现在) + */ + public long getActiveDays() { + if (createdAt == null) { + return 0; + } + Instant end = revoked ? (revokedAt != null ? revokedAt : Instant.now()) : Instant.now(); + long seconds = end.getEpochSecond() - createdAt.getEpochSecond(); + return seconds / (24 * 3600); + } + + /** + * 获取闲置天数(最后使用到现在) + */ + public long getIdleDays() { + if (lastUsedAt == null) { + return getActiveDays(); + } + Instant now = Instant.now(); + long seconds = now.getEpochSecond() - lastUsedAt.getEpochSecond(); + return seconds / (24 * 3600); + } + + /** + * 增加使用计数 + */ + public void incrementUsage() { + this.usageCount++; + this.lastUsedAt = Instant.now(); + } + + public void incrementAccessTokenUsage(String accessToken) { + this.accessTokenCount++; + this.accessToken = accessToken; + } + + /** + * 撤销Token + */ + public void revoke(RevokeReason reason) { + this.revoked = true; + this.revokedAt = Instant.now(); + this.revokeReason = reason; + } + + /** + * 转换为Map,便于Redis存储 + */ + public Map toMap() { + Map hash = new HashMap<>(); + + hash.put("userId", userId != null ? userId : ""); + hash.put("username", username != null ? username : ""); + hash.put("clientId", clientId != null ? clientId : ""); + hash.put("deviceId", deviceId != null ? deviceId : ""); + hash.put("tokenValue", tokenValue != null ? tokenValue : ""); + hash.put("deviceName", deviceName != null ? deviceName : ""); + hash.put("deviceType", deviceType != null ? deviceType.name() : DeviceType.OTHER.name()); + hash.put("operatingSystem", operatingSystem != null ? operatingSystem : ""); + hash.put("clientType", clientType != null ? clientType : ""); + hash.put("accessToken", accessToken != null ? accessToken : ""); + hash.put("scopes", scopes != null ? String.join(",", scopes) : ""); + hash.put("createdAt", createdAt != null ? createdAt.toString() : ""); + hash.put("lastUsedAt", lastUsedAt != null ? lastUsedAt.toString() : ""); + hash.put("expiresAt", expiresAt != null ? expiresAt.toString() : ""); + hash.put("ipAddress", ipAddress != null ? ipAddress : ""); + hash.put("userAgent", userAgent != null ? userAgent : ""); + hash.put("revoked", Boolean.toString(revoked)); + hash.put("revokedAt", revokedAt != null ? revokedAt.toString() : ""); + hash.put("revokeReason", revokeReason != null ? revokeReason.name() : ""); + hash.put("accessTokenCount", Integer.toString(accessTokenCount)); + hash.put("usageCount", Integer.toString(usageCount)); + hash.put("location", location != null ? location : ""); + hash.put("additionalInfo", additionalInfo != null ? additionalInfo : ""); + hash.put("rememberMe", Boolean.toString(rememberMe)); + + return hash; + } + public Map toUpdateMap() { + Map hash = new HashMap<>(); + hash.put("lastUsedAt", lastUsedAt != null ? lastUsedAt.toString() : ""); + hash.put("accessTokenCount", Integer.toString(accessTokenCount)); + hash.put("accessToken", accessToken != null ? accessToken : ""); + hash.put("usageCount", Integer.toString(usageCount)); + return hash; + } + public Map toRevokeMap() { + Map hash = new HashMap<>(); + hash.put("revoked", Boolean.toString(revoked)); + hash.put("revokedAt", revokedAt != null ? revokedAt.toString() : ""); + hash.put("revokeReason", revokeReason != null ? revokeReason.name() : ""); + return hash; + } + + /** + * 从Redis Hash创建RefreshTokenInfo + */ + public static RefreshTokenInfo fromMap(Map hash) { + if (hash == null || hash.isEmpty()) { + return null; + } + + RefreshTokenInfoBuilder builder = RefreshTokenInfo.builder(); + + builder.userId((String) hash.getOrDefault("userId", "")); + builder.username((String) hash.getOrDefault("username", "")); + builder.clientId((String) hash.getOrDefault("clientId", "")); + builder.deviceId((String) hash.getOrDefault("deviceId", "")); + builder.deviceName((String) hash.getOrDefault("deviceName", "")); + builder.accessToken((String) hash.getOrDefault("accessToken", "")); + builder.tokenValue((String) hash.getOrDefault("tokenValue", "")); + + // 处理deviceType + String deviceTypeStr = (String)hash.get("deviceType"); + if (deviceTypeStr != null && !deviceTypeStr.isEmpty()) { + try { + builder.deviceType(DeviceType.valueOf(deviceTypeStr)); + } catch (IllegalArgumentException e) { + builder.deviceType(DeviceType.OTHER); + } + } else { + builder.deviceType(DeviceType.OTHER); + } + + builder.operatingSystem((String) hash.getOrDefault("operatingSystem", "")); + builder.clientType((String) hash.getOrDefault("clientType", "")); + + // 处理scopes + String scopesStr = (String)hash.get("scopes"); + if (scopesStr != null && !scopesStr.isEmpty()) { + builder.scopes(new HashSet<>(Arrays.asList(scopesStr.split(",")))); + } else { + builder.scopes(new HashSet<>()); + } + + // 处理时间字段 + String createdAtStr = (String)hash.get("createdAt"); + if (createdAtStr != null && !createdAtStr.isEmpty()) { + try { + builder.createdAt(Instant.parse(createdAtStr)); + } catch (Exception e) { + // 解析失败,使用当前时间 + builder.createdAt(Instant.now()); + } + } + + String lastUsedAtStr = (String)hash.get("lastUsedAt"); + if (lastUsedAtStr != null && !lastUsedAtStr.isEmpty()) { + try { + builder.lastUsedAt(Instant.parse(lastUsedAtStr)); + } catch (Exception e) { + // 解析失败,忽略 + } + } + + String expiresAtStr = (String)hash.get("expiresAt"); + if (expiresAtStr != null && !expiresAtStr.isEmpty()) { + try { + builder.expiresAt(Instant.parse(expiresAtStr)); + } catch (Exception e) { + // 解析失败,忽略 + } + } + + builder.ipAddress((String) hash.getOrDefault("ipAddress", "")); + builder.userAgent((String) hash.getOrDefault("userAgent", "")); + + // 处理布尔值 + String revokedStr = (String)hash.get("revoked"); + builder.revoked(Boolean.parseBoolean(revokedStr)); + + String revokedAtStr = (String)hash.get("revokedAt"); + if (revokedAtStr != null && !revokedAtStr.isEmpty()) { + try { + builder.revokedAt(Instant.parse(revokedAtStr)); + } catch (Exception e) { + // 解析失败,忽略 + } + } + + // 处理撤销原因 + String revokeReasonStr = (String)hash.get("revokeReason"); + if (revokeReasonStr != null && !revokeReasonStr.isEmpty()) { + try { + builder.revokeReason(RevokeReason.valueOf(revokeReasonStr)); + } catch (IllegalArgumentException e) { + builder.revokeReason(RevokeReason.OTHER); + } + } + + // 处理数值字段 + String accessTokenCountStr = (String)hash.get("accessTokenCount"); + if (accessTokenCountStr != null && !accessTokenCountStr.isEmpty()) { + try { + builder.accessTokenCount(Integer.parseInt(accessTokenCountStr)); + } catch (NumberFormatException e) { + builder.accessTokenCount(0); + } + } + + String usageCountStr = (String)hash.get("usageCount"); + if (usageCountStr != null && !usageCountStr.isEmpty()) { + try { + builder.usageCount(Integer.parseInt(usageCountStr)); + } catch (NumberFormatException e) { + builder.usageCount(0); + } + } + + builder.location((String) hash.getOrDefault("location", "")); + builder.additionalInfo((String) hash.getOrDefault("additionalInfo", "")); + + String rememberMeStr = (String)hash.get("rememberMe"); + builder.rememberMe(Boolean.parseBoolean(rememberMeStr)); + + return builder.build(); + } + + /** + * 简化的设备信息(用于前端展示) + */ + public Map toSimpleDeviceInfo() { + Map info = new HashMap<>(); + info.put("deviceId", deviceId); + info.put("deviceName", deviceName); + info.put("deviceType", deviceType != null ? deviceType.name() : null); + info.put("deviceTypeDesc", deviceType != null ? deviceType.getDescription() : null); + info.put("operatingSystem", operatingSystem); + info.put("clientType", clientType); + info.put("ipAddress", ipAddress); + info.put("location", location); + info.put("createdAt", createdAt != null ? createdAt.toEpochMilli() : null); + info.put("lastUsedAt", lastUsedAt != null ? lastUsedAt.toEpochMilli() : null); + info.put("active", !revoked && !isExpired()); + return info; + } + + /** + * 获取可读的设备信息 + */ + public String getReadableDeviceInfo() { + StringBuilder sb = new StringBuilder(); + + if (deviceName != null && !deviceName.isEmpty()) { + sb.append(deviceName); + } else if (deviceType != null) { + sb.append(deviceType.getDescription()); + } + + if (operatingSystem != null && !operatingSystem.isEmpty()) { + sb.append(" (").append(operatingSystem); + if (clientType != null && !clientType.isEmpty()) { + sb.append(" - ").append(clientType); + } + sb.append(")"); + } else if (clientType != null && !clientType.isEmpty()) { + sb.append(" (").append(clientType).append(")"); + } + + return sb.toString(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RouterVo.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RouterVo.java new file mode 100644 index 0000000..e07ecbd --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/RouterVo.java @@ -0,0 +1,149 @@ +package org.lingniu.idp.model.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +/** + * 路由配置信息 + * + * @author portal + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo +{ + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 路由参数:如 {"id": 1, "name": "admin"} + */ + private String query; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public boolean getHidden() + { + return hidden; + } + + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + public String getRedirect() + { + return redirect; + } + + public void setRedirect(String redirect) + { + this.redirect = redirect; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public Boolean getAlwaysShow() + { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) + { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() + { + return meta; + } + + public void setMeta(MetaVo meta) + { + this.meta = meta; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/TokenInfo.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/TokenInfo.java new file mode 100644 index 0000000..bb7d974 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/TokenInfo.java @@ -0,0 +1,20 @@ +package org.lingniu.idp.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +// TokenInfo.java +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TokenInfo implements Serializable { + + private static final long serialVersionUID = 1L; + private AccessTokenInfo accessTokenInfo; + private RefreshTokenInfo refreshTokenInfo; +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/AuthenticationContextHolder.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/AuthenticationContextHolder.java new file mode 100644 index 0000000..eb3686b --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/AuthenticationContextHolder.java @@ -0,0 +1,28 @@ +package org.lingniu.idp.security.context; + +import org.springframework.security.core.Authentication; + +/** + * 身份验证信息 + * + * @author portal + */ +public class AuthenticationContextHolder +{ + private static final ThreadLocal contextHolder = new ThreadLocal<>(); + + public static Authentication getContext() + { + return contextHolder.get(); + } + + public static void setContext(Authentication context) + { + contextHolder.set(context); + } + + public static void clearContext() + { + contextHolder.remove(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/PermissionContextHolder.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/PermissionContextHolder.java new file mode 100644 index 0000000..adad05d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/context/PermissionContextHolder.java @@ -0,0 +1,27 @@ +package org.lingniu.idp.security.context; + +import org.lingniu.idp.utils.text.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * 权限信息 + * + * @author portal + */ +public class PermissionContextHolder +{ + private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT"; + + public static void setContext(String permission) + { + RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission, + RequestAttributes.SCOPE_REQUEST); + } + + public static String getContext() + { + return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES, + RequestAttributes.SCOPE_REQUEST)); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/converter/SmsCodeAuthenticationConverter.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/converter/SmsCodeAuthenticationConverter.java new file mode 100644 index 0000000..697b49b --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/converter/SmsCodeAuthenticationConverter.java @@ -0,0 +1,25 @@ +package org.lingniu.idp.security.converter; + +import jakarta.servlet.http.HttpServletRequest; +import org.lingniu.idp.security.token.SmsCodeAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.AuthenticationConverter; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +@Component +public class SmsCodeAuthenticationConverter implements AuthenticationConverter { + + @Override + public Authentication convert(HttpServletRequest request) { + // 从请求参数中获取手机号和验证码 + String phone = request.getParameter("phone"); + String code = request.getParameter("code"); + + if (StringUtils.hasText(phone) && StringUtils.hasText(code)) { + return new SmsCodeAuthenticationToken(phone, code); + } + + return null; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/IdpAuthenticationFilter.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/IdpAuthenticationFilter.java new file mode 100644 index 0000000..87aa609 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/IdpAuthenticationFilter.java @@ -0,0 +1,83 @@ +package org.lingniu.idp.security.filter; + +import org.lingniu.idp.model.vo.AccessTokenInfo; +import org.lingniu.idp.service.core.login.IdpTokenService; +import org.lingniu.idp.service.core.login.RedisAccessTokenService; +import org.springframework.core.log.LogMessage; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher; +import org.springframework.security.web.util.matcher.RequestMatcher; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class IdpAuthenticationFilter extends OncePerRequestFilter { + private static final RequestMatcher DEFAULT_ANT_PATH_REQUEST_MATCHER = PathPatternRequestMatcher.withDefaults() + .matcher(HttpMethod.POST, "/oauth2/authorize"); + private final IdpTokenService idpTokenService; + private final UserDetailsService userDetailsService; + + public IdpAuthenticationFilter(IdpTokenService idpTokenService, UserDetailsService userDetailsService) { + this.idpTokenService = idpTokenService; + this.userDetailsService = userDetailsService; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + if (!requiresAuthentication(request, response)) { + filterChain.doFilter(request, response); + return; + } + + try { + AccessTokenInfo accessTokenInfo = null; + // 验证令牌 + if (idpTokenService.validateAccessToken(request)) { + accessTokenInfo = idpTokenService.getAccessTokenInfo(request); + }else{ + accessTokenInfo = idpTokenService.refreshToken(request, response); + } + if(accessTokenInfo!=null){ + // 加载用户详情 + UserDetails userDetails = userDetailsService.loadUserByUsername(accessTokenInfo.getUsername()); + // 创建认证对象 + UsernamePasswordAuthenticationToken authentication = + new UsernamePasswordAuthenticationToken( + userDetails, + null, + null + ); + + // 设置认证信息到SecurityContext + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + } catch (Exception e) { + // 令牌验证失败,记录日志但不中断请求 + logger.error("token 验证失败", e); + } + + filterChain.doFilter(request, response); + } + protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) { + if (DEFAULT_ANT_PATH_REQUEST_MATCHER.matches(request)) { + return true; + } + if (this.logger.isTraceEnabled()) { + this.logger + .trace(LogMessage.format("Did not match request to %s", DEFAULT_ANT_PATH_REQUEST_MATCHER)); + } + return false; + } + +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/login/MobilePasswordAuthenticationFilter.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/login/MobilePasswordAuthenticationFilter.java new file mode 100644 index 0000000..2de9168 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/filter/login/MobilePasswordAuthenticationFilter.java @@ -0,0 +1,35 @@ +package org.lingniu.idp.security.filter.login; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.idp.security.token.MobilePasswordAuthenticationToken; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; +import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher; +import org.springframework.security.web.util.matcher.RequestMatcher; + +public class MobilePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { + private static final RequestMatcher DEFAULT_ANT_PATH_REQUEST_MATCHER = PathPatternRequestMatcher.withDefaults() + .matcher(HttpMethod.POST, "/api/login/account"); + public MobilePasswordAuthenticationFilter() { + super(DEFAULT_ANT_PATH_REQUEST_MATCHER); + } + + public MobilePasswordAuthenticationFilter(AuthenticationManager authenticationManager) { + super(DEFAULT_ANT_PATH_REQUEST_MATCHER, authenticationManager); + } + @Override + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response){ + String username = request.getParameter("username"); + String password = request.getParameter("password"); + String code = request.getParameter("code"); + String uuid = request.getParameter("uuid"); + MobilePasswordAuthenticationToken mobilePasswordAuthenticationToken = + new MobilePasswordAuthenticationToken(username,password,code,uuid); + // 2. 进行认证 + Authentication authenticate = this.getAuthenticationManager().authenticate(mobilePasswordAuthenticationToken); + return authenticate; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/CaptchaCodeGrantType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/CaptchaCodeGrantType.java new file mode 100644 index 0000000..4293ce1 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/CaptchaCodeGrantType.java @@ -0,0 +1,7 @@ +package org.lingniu.idp.security.granttype; + +import org.springframework.security.oauth2.core.AuthorizationGrantType; + +public class CaptchaCodeGrantType { + public static final AuthorizationGrantType SMS_CODE = new AuthorizationGrantType("captcha_code"); +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/SmsCodeGrantType.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/SmsCodeGrantType.java new file mode 100644 index 0000000..05fa445 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/granttype/SmsCodeGrantType.java @@ -0,0 +1,7 @@ +package org.lingniu.idp.security.granttype; + +import org.springframework.security.oauth2.core.AuthorizationGrantType; + +public class SmsCodeGrantType { + public static final AuthorizationGrantType SMS_CODE = new AuthorizationGrantType("sms_code"); +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/AuthenticationEntryPointImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..4a84421 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/AuthenticationEntryPointImpl.java @@ -0,0 +1,35 @@ +package org.lingniu.idp.security.handler; + +import com.alibaba.fastjson2.JSON; +import org.lingniu.idp.model.base.AjaxResult; +import org.lingniu.idp.utils.ServletUtils; +import org.lingniu.idp.utils.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Serializable; + +/** + * 认证失败处理类 返回未授权 + * + * @author portal + */ +@Component +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable +{ + private static final long serialVersionUID = -8970718410437077606L; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException + { + int code = HttpStatus.UNAUTHORIZED.value(); + String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg))); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/GlobalExceptionHandler.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..0a1dfdc --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/GlobalExceptionHandler.java @@ -0,0 +1,145 @@ +package org.lingniu.idp.security.handler; +import jakarta.servlet.http.HttpServletRequest; +import org.lingniu.idp.exception.DemoModeException; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.model.base.AjaxResult; +import org.lingniu.idp.utils.EscapeUtil; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.text.Convert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + + +/** + * 全局异常处理器 + * + * @author portal + */ +@RestControllerAdvice +public class GlobalExceptionHandler +{ + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 权限校验异常 + */ + @ExceptionHandler(AccessDeniedException.class) + public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); + return AjaxResult.error(HttpStatus.FORBIDDEN.value(), "没有权限,请联系管理员授权"); + } + + /** + * 请求方式不支持 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); + return AjaxResult.error(e.getMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler(ServiceException.class) + public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) + { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); + } + + /** + * 请求路径中缺少必需的路径变量 + */ + @ExceptionHandler(MissingPathVariableException.class) + public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e); + return AjaxResult.error(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName())); + } + + /** + * 请求参数类型不匹配 + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + String value = Convert.toStr(e.getValue()); + if (StringUtils.isNotEmpty(value)) + { + value = EscapeUtil.clean(value); + } + log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e); + return AjaxResult.error(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), value)); + } + + /** + * 拦截未知的运行时异常 + */ + @ExceptionHandler(RuntimeException.class) + public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public AjaxResult handleException(Exception e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生系统异常.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public AjaxResult handleBindException(BindException e) + { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) + { + log.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 演示模式异常 + */ + @ExceptionHandler(DemoModeException.class) + public AjaxResult handleDemoModeException(DemoModeException e) + { + return AjaxResult.error("演示模式,不允许操作"); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LoginSuccessHandler.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LoginSuccessHandler.java new file mode 100644 index 0000000..841398f --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LoginSuccessHandler.java @@ -0,0 +1,47 @@ +package org.lingniu.idp.security.handler; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.manager.AsyncManager; +import org.lingniu.idp.manager.factory.AsyncFactory; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.model.vo.TokenInfo; +import org.lingniu.idp.service.core.login.IdpTokenService; +import org.lingniu.idp.utils.MessageUtils; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +public class LoginSuccessHandler implements AuthenticationSuccessHandler { + + private final IdpTokenService idpTokenService; + + public LoginSuccessHandler(IdpTokenService idpTokenService) { + this.idpTokenService = idpTokenService; + } + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + + // 生成token + TokenInfo token = idpTokenService.createToken(request, loginUser); + // 保存token + idpTokenService.storeTokenInfo(token); + // 将短token放入响应头 + idpTokenService.setAccessTokenHeader(response,token.getAccessTokenInfo().getTokenValue()); + // 设置Refresh Token到HttpOnly Cookie + idpTokenService.setRefreshTokenCookie(response, token); + // 记录审计日志 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginUser.getUsername(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + // 保存日志 + idpTokenService.recordLoginInfo(loginUser.getUserId()); + } + + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LogoutSuccessHandlerImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LogoutSuccessHandlerImpl.java new file mode 100644 index 0000000..3cd6103 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/LogoutSuccessHandlerImpl.java @@ -0,0 +1,51 @@ +package org.lingniu.idp.security.handler; + +import com.alibaba.fastjson2.JSON; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.manager.AsyncManager; +import org.lingniu.idp.manager.factory.AsyncFactory; +import org.lingniu.idp.model.base.AjaxResult; +import org.lingniu.idp.model.vo.RefreshTokenInfo; +import org.lingniu.idp.service.core.login.IdpTokenService; +import org.lingniu.idp.utils.MessageUtils; +import org.lingniu.idp.utils.ServletUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +import java.io.IOException; + +/** + * 自定义退出处理类 返回成功 + * + * @author portal + */ +@Configuration +public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler +{ + @Autowired + private IdpTokenService idpTokenService; + + /** + * 退出处理 + * + * @return + */ + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)throws IOException, ServletException + { + RefreshTokenInfo refreshTokenInfo = idpTokenService.getRefreshTokenInfo(request); + idpTokenService.revokeToken(request,response); + if (refreshTokenInfo!=null) + { + String userName = refreshTokenInfo.getUsername(); + // 记录用户退出日志 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); + } + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success(MessageUtils.message("user.logout.success")))); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/Oauth2CodeSuccessHandler.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/Oauth2CodeSuccessHandler.java new file mode 100644 index 0000000..9173f10 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/handler/Oauth2CodeSuccessHandler.java @@ -0,0 +1,49 @@ +package org.lingniu.idp.security.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.idp.model.base.CommonResult; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; +import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationCodeRequestAuthenticationToken; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.web.util.UriUtils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +public class Oauth2CodeSuccessHandler implements AuthenticationSuccessHandler { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + OAuth2AuthorizationCodeRequestAuthenticationToken authCodeRequest = (OAuth2AuthorizationCodeRequestAuthenticationToken) authentication; + + UriComponentsBuilder uriBuilder = UriComponentsBuilder + .fromUriString(authCodeRequest.getRedirectUri()) + .queryParam(OAuth2ParameterNames.CODE, + authCodeRequest.getAuthorizationCode().getTokenValue()); + + if (StringUtils.hasText(authCodeRequest.getState())) { + uriBuilder.queryParam(OAuth2ParameterNames.STATE, + UriUtils.encode(authCodeRequest.getState(), StandardCharsets.UTF_8)); + } + + String redirectUri = uriBuilder.build(true).toUriString(); + + + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.setStatus(HttpStatus.OK.value()); + + objectMapper.writeValue(response.getWriter(), CommonResult.success(Map.of("redirect_url", redirectUri))); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/MobilePasswordAuthenticationProvider.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/MobilePasswordAuthenticationProvider.java new file mode 100644 index 0000000..0221f6d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/MobilePasswordAuthenticationProvider.java @@ -0,0 +1,45 @@ +package org.lingniu.idp.security.provider; + +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.security.token.MobilePasswordAuthenticationToken; +import org.lingniu.idp.service.core.login.LoginService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Component; + +import java.util.Collections; + +@Component +public class MobilePasswordAuthenticationProvider implements AuthenticationProvider { + + @Autowired + private UserDetailsService userDetailsService; + @Autowired + private LoginService loginService; + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + MobilePasswordAuthenticationToken authToken = (MobilePasswordAuthenticationToken) authentication; + String username = (String) authToken.getPrincipal(); + String password = (String) authToken.getCredentials(); + String code = authToken.getCode(); + String uuid = authToken.getUuid(); + + // 2. 加载用户 + LoginUser login = loginService.login(username, password, code, uuid); + + // 3. 返回认证成功的Token + return new MobilePasswordAuthenticationToken( + login, + null + ); + } + + @Override + public boolean supports(Class authentication) { + return MobilePasswordAuthenticationToken.class.isAssignableFrom(authentication); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/SmsCodeAuthenticationProvider.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/SmsCodeAuthenticationProvider.java new file mode 100644 index 0000000..1256b48 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/provider/SmsCodeAuthenticationProvider.java @@ -0,0 +1,74 @@ +package org.lingniu.idp.security.provider; + +import org.lingniu.idp.security.token.SmsCodeAuthenticationToken; +import org.lingniu.idp.service.core.SmsCodeService; +import org.lingniu.idp.service.core.UserDetailsServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Component; + +@Component +public class SmsCodeAuthenticationProvider implements AuthenticationProvider { + + @Autowired + private SmsCodeService smsCodeService; + + @Autowired + private UserDetailsServiceImpl userDetailsService; + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + SmsCodeAuthenticationToken authenticationToken = (SmsCodeAuthenticationToken) authentication; + String phone = (String) authenticationToken.getPrincipal(); + String code = (String) authenticationToken.getCredentials(); + + // 1. 验证短信验证码 + if (!smsCodeService.verifyCode(phone, code)) { + throw new BadCredentialsException("验证码错误或已过期"); + } + + // 2. 根据手机号查找用户 + UserDetails userDetails; + try { + // 这里可以根据手机号从数据库查询用户 + userDetails = loadUserByPhone(phone); + } catch (UsernameNotFoundException e) { + // 用户不存在,可以自动创建用户 + userDetails = createNewUser(phone); + } + + // 3. 返回认证成功的Token + return new SmsCodeAuthenticationToken( + userDetails, + null + ); + } + + @Override + public boolean supports(Class authentication) { + return SmsCodeAuthenticationToken.class.isAssignableFrom(authentication); + } + + private UserDetails loadUserByPhone(String phone) { + // 这里实现根据手机号查询用户的逻辑 + // 可以查询数据库,或者调用用户服务 + + // 示例:假设手机号作为用户名 + return userDetailsService.loadUserByUsername(phone); + } + + private UserDetails createNewUser(String phone) { + // 用户不存在时自动创建 + return User.builder() + .username(phone) + .password("{noop}") // 无密码 + .authorities("ROLE_USER") + .build(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/BaseAuthenticationToken.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/BaseAuthenticationToken.java new file mode 100644 index 0000000..470663a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/BaseAuthenticationToken.java @@ -0,0 +1,70 @@ +package org.lingniu.idp.security.token; + +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; + +import java.util.Collection; + +// 基础认证Token +public abstract class BaseAuthenticationToken extends AbstractAuthenticationToken { + protected final Object principal; + protected String credentials; + protected String deviceId; + protected String deviceType; + protected String clientId; + + public BaseAuthenticationToken(Object principal, Object credentials) { + super(null); + this.principal = principal; + this.credentials = (String) credentials; + setAuthenticated(false); + } + + public BaseAuthenticationToken(Object principal, Object credentials, + Collection authorities) { + super(authorities); + this.principal = principal; + this.credentials = (String) credentials; + super.setAuthenticated(true); + } + + @Override + public Object getCredentials() { + return credentials; + } + + @Override + public Object getPrincipal() { + return principal; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getDeviceType() { + return deviceType; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientId() { + return clientId; + } + + @Override + public void eraseCredentials() { + super.eraseCredentials(); + credentials = null; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/MobilePasswordAuthenticationToken.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/MobilePasswordAuthenticationToken.java new file mode 100644 index 0000000..cef4a50 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/MobilePasswordAuthenticationToken.java @@ -0,0 +1,31 @@ +package org.lingniu.idp.security.token; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; + +// 手机号+密码+验证码登录Token +public class MobilePasswordAuthenticationToken extends BaseAuthenticationToken { + private String code; + private String uuid; + + public MobilePasswordAuthenticationToken(String mobile, String password, String code, String uuid) { + super(mobile, password); + this.code = code; + this.uuid = uuid; + } + + public MobilePasswordAuthenticationToken(UserDetails userDetails, + Collection authorities) { + super(userDetails, "", authorities); + } + + public String getCode() { + return code; + } + + public String getUuid() { + return uuid; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/SmsCodeAuthenticationToken.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/SmsCodeAuthenticationToken.java new file mode 100644 index 0000000..f55c203 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/security/token/SmsCodeAuthenticationToken.java @@ -0,0 +1,45 @@ +package org.lingniu.idp.security.token; + +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; + +import java.util.Collection; + +public class SmsCodeAuthenticationToken extends AbstractAuthenticationToken { + + private final Object principal; + private final String code; + + public SmsCodeAuthenticationToken(String phone, String code) { + super(null); + this.principal = phone; + this.code = code; + setAuthenticated(false); + } + + public SmsCodeAuthenticationToken(Object principal, Collection authorities) { + super(authorities); + this.principal = principal; + this.code = null; + super.setAuthenticated(true); + } + + @Override + public Object getCredentials() { + return code; + } + + @Override + public Object getPrincipal() { + return principal; + } + + @Override + public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException { + if (isAuthenticated) { + throw new IllegalArgumentException( + "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead"); + } + super.setAuthenticated(false); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysConfigService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysConfigService.java new file mode 100644 index 0000000..b2442d2 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysConfigService.java @@ -0,0 +1,89 @@ +package org.lingniu.idp.service; + +import java.util.List; +import org.lingniu.idp.model.entity.SysConfig; + +/** + * 参数配置 服务层 + * + * @author portal + */ +public interface ISysConfigService +{ + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + public SysConfig selectConfigById(Long configId); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数键值 + */ + public String selectConfigByKey(String configKey); + + /** + * 获取验证码开关 + * + * @return true开启,false关闭 + */ + public boolean selectCaptchaEnabled(); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + public List selectConfigList(SysConfig config); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int updateConfig(SysConfig config); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + */ + public void deleteConfigByIds(Long[] configIds); + + /** + * 加载参数缓存数据 + */ + public void loadingConfigCache(); + + /** + * 清空参数缓存数据 + */ + public void clearConfigCache(); + + /** + * 重置参数缓存数据 + */ + public void resetConfigCache(); + + /** + * 校验参数键名是否唯一 + * + * @param config 参数信息 + * @return 结果 + */ + public boolean checkConfigKeyUnique(SysConfig config); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysDeptService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysDeptService.java new file mode 100644 index 0000000..0f6cf14 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysDeptService.java @@ -0,0 +1,128 @@ +package org.lingniu.idp.service; + +import java.util.List; +import org.lingniu.idp.model.base.TreeSelect; +import org.lingniu.idp.model.entity.SysDept; + +/** + * 部门管理 服务层 + * + * @author portal + */ +public interface ISysDeptService +{ + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @return 部门信息集合 + */ + public List selectDeptList(SysDept dept); + + /** + * 查询部门树结构信息 + * + * @param dept 部门信息 + * @return 部门树信息集合 + */ + public List selectDeptTreeList(SysDept dept); + + public List selectChildrenDeptById(Long deptId); + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * @return 树结构列表 + */ + public List buildDeptTree(List depts); + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * @return 下拉树结构列表 + */ + public List buildDeptTreeSelect(List depts); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + public List selectDeptListByRoleId(Long roleId); + + List selectDeptListByUserRole(Long userId); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + public SysDept selectDeptById(Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在部门子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + public boolean hasChildByDeptId(Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 true 存在 false 不存在 + */ + public boolean checkDeptExistUser(Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * @return 结果 + */ + public boolean checkDeptNameUnique(SysDept dept); + + /** + * 校验部门是否有数据权限 + * + * @param deptId 部门id + */ + public void checkDeptDataScope(Long deptId); + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int insertDept(SysDept dept); + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int updateDept(SysDept dept); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + public int deleteDeptById(Long deptId); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysLogininforService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysLogininforService.java new file mode 100644 index 0000000..523f4ed --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysLogininforService.java @@ -0,0 +1,40 @@ +package org.lingniu.idp.service; + +import java.util.List; +import org.lingniu.idp.model.entity.SysLogininfor; + +/** + * 系统访问日志情况信息 服务层 + * + * @author portal + */ +public interface ISysLogininforService +{ + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * @return 结果 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 清空系统登录日志 + */ + public void cleanLogininfor(); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysMenuService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysMenuService.java new file mode 100644 index 0000000..4dfebaa --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysMenuService.java @@ -0,0 +1,144 @@ +package org.lingniu.idp.service; + +import java.util.List; +import java.util.Set; +import org.lingniu.idp.model.base.TreeSelect; +import org.lingniu.idp.model.entity.SysMenu; +import org.lingniu.idp.model.vo.RouterVo; + +/** + * 菜单 业务层 + * + * @author portal + */ +public interface ISysMenuService +{ + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(Long userId); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu, Long userId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public Set selectMenuPermsByUserId(Long userId); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + public Set selectMenuPermsByRoleId(Long roleId); + + /** + * 根据用户ID查询菜单树信息 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId(Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + public List buildMenus(List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + public List buildMenuTree(List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + public List buildMenuTreeSelect(List menus); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean hasChildByMenuId(Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean checkMenuExistRole(Long menuId); + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int insertMenu(SysMenu menu); + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean checkMenuNameUnique(SysMenu menu); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysOperLogService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysOperLogService.java new file mode 100644 index 0000000..1fa8130 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysOperLogService.java @@ -0,0 +1,48 @@ +package org.lingniu.idp.service; + +import java.util.List; +import org.lingniu.idp.model.entity.SysOperLog; + +/** + * 操作日志 服务层 + * + * @author portal + */ +public interface ISysOperLogService +{ + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog(); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysPostService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysPostService.java new file mode 100644 index 0000000..1adbfc7 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysPostService.java @@ -0,0 +1,99 @@ +package org.lingniu.idp.service; + +import java.util.List; +import org.lingniu.idp.model.entity.SysPost; + +/** + * 岗位信息 服务层 + * + * @author portal + */ +public interface ISysPostService +{ + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * @return 岗位列表 + */ + public List selectPostList(SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll(); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * @return 角色对象信息 + */ + public SysPost selectPostById(Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId(Long userId); + + /** + * 校验岗位名称 + * + * @param post 岗位信息 + * @return 结果 + */ + public boolean checkPostNameUnique(SysPost post); + + /** + * 校验岗位编码 + * + * @param post 岗位信息 + * @return 结果 + */ + public boolean checkPostCodeUnique(SysPost post); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * @return 结果 + */ + public int countUserPostById(Long postId); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * @return 结果 + */ + public int deletePostById(Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * @return 结果 + */ + public int deletePostByIds(Long[] postIds); + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int insertPost(SysPost post); + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int updatePost(SysPost post); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysRoleService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysRoleService.java new file mode 100644 index 0000000..7901294 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysRoleService.java @@ -0,0 +1,173 @@ +package org.lingniu.idp.service; + +import java.util.List; +import java.util.Set; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.entity.SysUserRole; + +/** + * 角色业务层 + * + * @author portal + */ +public interface ISysRoleService +{ + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + public List selectRoleList(SysRole role); + + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * @return 角色列表 + */ + public List selectRolesByUserId(Long userId); + + /** + * 根据用户ID查询角色权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public Set selectRolePermissionByUserId(Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll(); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + public boolean checkRoleNameUnique(SysRole role); + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + public boolean checkRoleKeyUnique(SysRole role); + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + public void checkRoleAllowed(SysRole role); + + /** + * 校验角色是否有数据权限 + * + * @param roleIds 角色id + */ + public void checkRoleDataScope(Long... roleIds); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int insertRole(SysRole role); + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int updateRole(SysRole role); + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + public int updateRoleStatus(SysRole role); + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int authDataScope(SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleById(Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + public int deleteRoleByIds(Long[] roleIds); + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + public int deleteAuthUser(SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + public int deleteAuthUsers(Long roleId, Long[] userIds); + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + public int insertAuthUsers(Long roleId, Long[] userIds); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserOnlineService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserOnlineService.java new file mode 100644 index 0000000..905ad44 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserOnlineService.java @@ -0,0 +1,48 @@ +package org.lingniu.idp.service; + +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.model.entity.SysUserOnline; + +/** + * 在线用户 服务层 + * + * @author portal + */ +public interface ISysUserOnlineService +{ + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user); + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + public SysUserOnline loginUserToUserOnline(LoginUser user); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserService.java new file mode 100644 index 0000000..0b613b6 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/ISysUserService.java @@ -0,0 +1,217 @@ +package org.lingniu.idp.service; + +import java.util.Date; +import java.util.List; +import org.lingniu.idp.model.entity.SysUser; + +/** + * 用户 业务层 + * + * @author portal + */ +public interface ISysUserService +{ + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUserList(SysUser user); + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectAllocatedList(SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + public SysUser selectUserById(Long userId); + + /** + * 根据用户ID查询用户所属角色组 + * + * @param userName 用户名 + * @return 结果 + */ + public String selectUserRoleGroup(String userName); + + /** + * 根据用户ID查询用户所属岗位组 + * + * @param userName 用户名 + * @return 结果 + */ + public String selectUserPostGroup(String userName); + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + public boolean checkUserNameUnique(SysUser user); + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + public boolean checkPhoneUnique(SysUser user); + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + public boolean checkEmailUnique(SysUser user); + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + public void checkUserAllowed(SysUser user); + + /** + * 校验用户是否有数据权限 + * + * @param userId 用户id + */ + public void checkUserDataScope(Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int insertUser(SysUser user); + + /** + * 注册用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public boolean registerUser(SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUser(SysUser user); + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserAuth(Long userId, Long[] roleIds); + + /** + * 修改用户状态 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUserStatus(SysUser user); + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUserProfile(SysUser user); + + /** + * 修改用户头像 + * + * @param userId 用户ID + * @param avatar 头像地址 + * @return 结果 + */ + public boolean updateUserAvatar(Long userId, String avatar); + + /** + * 更新用户登录信息(IP和登录时间) + * + * @param userId 用户ID + * @param loginIp 登录IP地址 + * @param loginDate 登录时间 + * @return 结果 + */ + public void updateLoginInfo(Long userId, String loginIp, Date loginDate); + + /** + * 重置用户密码 + * + * @param user 用户信息 + * @return 结果 + */ + public int resetPwd(SysUser user); + + /** + * 重置用户密码 + * + * @param userId 用户ID + * @param password 密码 + * @return 结果 + */ + public int resetUserPwd(Long userId, String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserById(Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + public String importUser(List userList, Boolean isUpdateSupport, String operName); +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/CaptchaService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/CaptchaService.java new file mode 100644 index 0000000..f70b29a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/CaptchaService.java @@ -0,0 +1,72 @@ +package org.lingniu.idp.service.core; + +import jakarta.annotation.Resource; +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.exception.user.*; +import org.lingniu.idp.manager.AsyncManager; +import org.lingniu.idp.manager.factory.AsyncFactory; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.security.context.AuthenticationContextHolder; +import org.lingniu.idp.service.ISysConfigService; +import org.lingniu.idp.service.ISysUserService; +import org.lingniu.idp.utils.DateUtils; +import org.lingniu.idp.utils.MessageUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.ip.IpUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; + + +/** + * 登录校验方法 + * + * @author portal + */ +@Component +public class CaptchaService +{ + @Autowired + private RedisCache redisCache; + + + @Autowired + private ISysConfigService configService; + + /** + * 校验验证码 + * + * @param username 用户名 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public void validateCaptcha(String username, String code, String uuid) + { + boolean captchaEnabled = configService.selectCaptchaEnabled(); + if (captchaEnabled) + { + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String captcha = redisCache.getCacheObject(verifyKey); + if (captcha == null) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); + throw new CaptchaExpireException(); + } + redisCache.deleteObject(verifyKey); + if (!code.equalsIgnoreCase(captcha)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + throw new CaptchaException(); + } + } + } + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SmsCodeService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SmsCodeService.java new file mode 100644 index 0000000..60c5617 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SmsCodeService.java @@ -0,0 +1,82 @@ +package org.lingniu.idp.service.core; + +import lombok.extern.slf4j.Slf4j; +import org.lingniu.idp.common.redis.RedisCache; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@Service +@Slf4j +public class SmsCodeService { + + @Autowired + private RedisCache redisCache; + + private static final String SMS_CODE_PREFIX = "sms:code:"; + private static final long SMS_CODE_EXPIRE = 300; // 5分钟 + + /** + * 生成并发送验证码 + */ + public void sendSmsCode(String phone) { + // 1. 生成验证码 + String code = generateCode(); + String key = SMS_CODE_PREFIX + phone; + // 2. 存储到Redis + redisCache.setCacheObject( + key, + code + ); + redisCache.expire(key,SMS_CODE_EXPIRE); + + // 3. 发送短信(这里使用腾讯云示例,可根据实际情况替换) + sendSms(phone, code); + + log.info("向手机号 {} 发送验证码: {}", phone, code); + } + + /** + * 验证短信验证码 + */ + public boolean verifyCode(String phone, String code) { + String key = SMS_CODE_PREFIX + phone; + String storedCode = (String) redisCache.getCacheObject(key); + + if (storedCode != null && storedCode.equals(code)) { + // 验证成功后删除验证码 + redisCache.deleteObject(key); + return true; + } + return false; + } + + private String generateCode() { + // 生成6位随机数字 + Random random = new Random(); + return String.format("%06d", random.nextInt(999999)); + } + + private void sendSms(String phone, String code) { + try { + // 腾讯云短信发送示例 +// Credential cred = new Credential("secretId", "secretKey"); +// SmsClient client = new SmsClient(cred, "ap-guangzhou"); +// +// SendSmsRequest req = new SendSmsRequest(); +// req.setPhoneNumberSet(new String[]{"+86" + phone}); +// req.setSmsSdkAppId("your_app_id"); +// req.setSignName("your_sign_name"); +// req.setTemplateId("your_template_id"); +// req.setTemplateParamSet(new String[]{code, "5"}); +// +// SendSmsResponse resp = client.SendSms(req); +// log.info("短信发送响应: {}", SendSmsResponse.toJsonString(resp)); + } catch (Exception e) { + log.error("短信发送失败", e); + } + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SysPermissionService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SysPermissionService.java new file mode 100644 index 0000000..d8a9c8a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/SysPermissionService.java @@ -0,0 +1,200 @@ +package org.lingniu.idp.service.core; + +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.model.entity.SysDept; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.model.vo.DataPermission; +import org.lingniu.idp.service.ISysDeptService; +import org.lingniu.idp.service.ISysMenuService; +import org.lingniu.idp.service.ISysRoleService; +import org.lingniu.idp.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; + +/** + * 用户权限处理 + * + * @author portal + */ +@Component +public class SysPermissionService +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysMenuService menuService; + @Autowired + private ISysDeptService deptService; + + /** + * 获取角色数据权限 + * + * @param user 用户信息 + * @return 角色权限信息 + */ + public Set getRolePermission(SysUser user) + { + Set roles = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) + { + roles.add(Constants.SUPER_ADMIN); + } + else + { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 获取数据权限 + * @return + * 1=所有数据权限,2=自定义数据权限,3=本部门及以下数据权限,4=本部门数据权限,5=仅本人数据权限 + **/ + public DataPermission getDataPermission(SysUser user) { + // 1. 管理员看所有 + if (user.isAdmin()) { + return DataPermission.builder().allowAll(true).build(); + } + + // 2. 获取用户角色并处理 + List sysRoles = roleService.selectRolesByUserId(user.getUserId()); + ProcessResult processResult = processRoles(sysRoles); + + // 3. 如果没有有效范围值,返回默认仅看自己 + return processResult.minScopeExcluding2() + .map(scope -> buildDataPermissionByScope(scope, processResult, user)) + .orElse(DataPermission.builder().onlySelf(true).build()); + } + + public record ProcessResult(Optional minScopeExcluding2, boolean hasScope2) {} + + private ProcessResult processRoles(List sysRoles) { + boolean hasScope2 = sysRoles.stream() + .anyMatch(role -> "2".equals(role.getDataScope())); + + Optional minScopeExcluding2 = sysRoles.stream() + .map(SysRole::getDataScope) + .filter(scope -> !"2".equals(scope)) + .map(this::parseScopeToInt) + .flatMap(Optional::stream) + .min(Integer::compareTo); + + return new ProcessResult(minScopeExcluding2, hasScope2); + } + + private DataPermission buildDataPermissionByScope(Integer scope, ProcessResult processResult, SysUser user) { + return switch (scope) { + case 1 -> DataPermission.builder().allowAll(true).build(); + case 3 -> buildDataPermissionForScope3(processResult, user); + case 4 -> buildDataPermissionForScope4(processResult, user); + case 5 -> buildDataPermissionForScope5(processResult, user); + default -> DataPermission.builder().onlySelf(true).build(); + }; + } + + private DataPermission buildDataPermissionForScope3(ProcessResult processResult, SysUser user) { + Set deptSet = new HashSet<>(); + Set areaSet = new HashSet<>(); + + // 添加本部门及以下部门 + user.getDeptList().forEach(dept -> { + List children = deptService.selectChildrenDeptById(dept.getDeptId()); + addDeptAndAreaInfo(children, deptSet, areaSet); + }); + + // 添加自定义部门(如果有) + if (processResult.hasScope2()) { + List customDepts = deptService.selectDeptListByUserRole(user.getUserId()); + addDeptAndAreaInfo(customDepts, deptSet, areaSet); + } + + return DataPermission.builder().deptList(deptSet).areas(areaSet).build(); + } + + private DataPermission buildDataPermissionForScope4(ProcessResult processResult, SysUser user) { + return buildDataPermissionWithCustomDeptsOnly(processResult, user, false); + } + + private DataPermission buildDataPermissionForScope5(ProcessResult processResult, SysUser user) { + return buildDataPermissionWithCustomDeptsOnly(processResult, user, true); + } + + private DataPermission buildDataPermissionWithCustomDeptsOnly(ProcessResult processResult, SysUser user, boolean onlySelf) { + Set deptSet = new HashSet<>(); + Set areaSet = new HashSet<>(); + + if (processResult.hasScope2()) { + List customDepts = deptService.selectDeptListByUserRole(user.getUserId()); + addDeptAndAreaInfo(customDepts, deptSet, areaSet); + } + + return DataPermission.builder() + .deptList(deptSet) + .areas(areaSet) + .onlySelf(onlySelf) + .build(); + } + + private void addDeptAndAreaInfo(List deptList, Set deptSet, Set areaSet) { + deptList.forEach(dept -> { + deptSet.add(String.valueOf(dept.getDeptId())); + if (dept.getAreaId() != null) { + areaSet.add(String.valueOf(dept.getAreaId())); + } + }); + } + + private Optional parseScopeToInt(String scope) { + try { + return Optional.of(Integer.parseInt(scope)); + } catch (NumberFormatException e) { + return Optional.empty(); + } + } + /** + * 获取菜单数据权限 + * + * @param user 用户信息 + * @return 菜单权限信息 + */ + public Set getMenuPermission(SysUser user) + { + Set perms = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) + { + perms.add(Constants.ALL_PERMISSION); + } + else + { + List roles = user.getRoles(); + if (!CollectionUtils.isEmpty(roles)) + { + // 多角色设置permissions属性,以便数据权限匹配权限 + for (SysRole role : roles) + { + if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL) && !role.isAdmin()) + { + Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); + role.setPermissions(rolePerms); + perms.addAll(rolePerms); + } + } + } + else + { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + } + return perms; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/UserDetailsServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/UserDetailsServiceImpl.java new file mode 100644 index 0000000..c81b048 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/UserDetailsServiceImpl.java @@ -0,0 +1,62 @@ +package org.lingniu.idp.service.core; + +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.enums.UserStatus; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.service.ISysUserService; +import org.lingniu.idp.utils.MessageUtils; +import org.lingniu.idp.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +/** + * 用户验证处理 + * + * @author portal + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService +{ + private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); + + @Autowired + private ISysUserService userService; + + + @Autowired + private SysPermissionService permissionService; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException + { + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) + { + log.info("登录用户:{} 不存在.", username); + throw new ServiceException(MessageUtils.message("user.not.exists")); + } + else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + log.info("登录用户:{} 已被删除.", username); + throw new ServiceException(MessageUtils.message("user.password.delete")); + } + else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + log.info("登录用户:{} 已被停用.", username); + throw new ServiceException(MessageUtils.message("user.blocked")); + } + + return createLoginUser(user); + } + + public UserDetails createLoginUser(SysUser user) + { + return new LoginUser(user, permissionService.getMenuPermission(user)); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/IdpTokenService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/IdpTokenService.java new file mode 100644 index 0000000..974c9a8 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/IdpTokenService.java @@ -0,0 +1,202 @@ +package org.lingniu.idp.service.core.login; + +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.model.vo.AccessTokenInfo; +import org.lingniu.idp.model.vo.RefreshTokenInfo; +import org.lingniu.idp.model.vo.TokenInfo; +import org.lingniu.idp.service.ISysUserService; +import org.lingniu.idp.utils.DateUtils; +import org.lingniu.idp.utils.DeviceFingerprintUtil; +import org.lingniu.idp.utils.ip.IpUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.web.authentication.rememberme.InvalidCookieException; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Arrays; +import java.util.UUID; + +@Component +@Slf4j +public class IdpTokenService { + // 令牌有效期(默认30分钟)单位分钟 + @Value("${token.accessToken.expireTime:30}") + private int accessTokenExpireTime; + // 刷新令牌有效期(默认24小时) 单位小时 + @Value("${token.refreshToken.expireTime:24}") + private int refreshTokenExpireTime; + @Value("${token.header:Idp}") + private String tokenHeader; + private final RedisRefreshTokenService refreshTokenService; + + private final RedisAccessTokenService accessTokenService; + private final ISysUserService userService; + + public IdpTokenService(RedisRefreshTokenService refreshTokenService, RedisAccessTokenService accessTokenService, ISysUserService userService) { + this.refreshTokenService = refreshTokenService; + this.accessTokenService = accessTokenService; + this.userService = userService; + } + + public TokenInfo createToken(HttpServletRequest request, LoginUser loginUser){ + String accessToken = UUID.randomUUID().toString().replace("-", ""); + String refreshToken = UUID.randomUUID().toString().replace("-", ""); + String ip = IpUtils.getIpAddr(request); + String deviceId = DeviceFingerprintUtil.generateFingerprint(request); + String userAgent = request.getHeader("User-Agent"); + Instant issuedAt = Instant.now(); + Instant accessExpiresAt = issuedAt.plus(accessTokenExpireTime,ChronoUnit.SECONDS); + Instant refreshExpiresAt = issuedAt.plus(refreshTokenExpireTime, ChronoUnit.HOURS); + AccessTokenInfo accessTokenInfo = AccessTokenInfo.builder() + .tokenValue(accessToken) + .userAgent(userAgent) + .userId(loginUser.getUser().getUserId().toString()) + .username(loginUser.getUsername()) + .issuedAt(issuedAt) + .expiresAt(accessExpiresAt) + .deviceId(deviceId) + .ipAddress(ip) + .refreshTokenId(refreshToken) + .build(); + RefreshTokenInfo refreshTokenInfo = RefreshTokenInfo.builder() + .tokenValue(refreshToken) + .userId(loginUser.getUser().getUserId().toString()) + .accessToken(accessToken) + .username(loginUser.getUsername()) + .deviceId(deviceId) + .createdAt(issuedAt) + .lastUsedAt(refreshExpiresAt) + .accessTokenCount(1) + .usageCount(0) + .ipAddress(ip) + .build(); + return new TokenInfo(accessTokenInfo,refreshTokenInfo); + } + public void storeTokenInfo(TokenInfo tokenInfo){ + accessTokenService.storeAccessToken(tokenInfo.getAccessTokenInfo()); + + refreshTokenService.storeRefreshToken(tokenInfo.getRefreshTokenInfo()); + } + public void setAccessTokenHeader(HttpServletResponse response,String accessToken){ + response.addHeader(tokenHeader,accessToken); + + } + + public void setRefreshTokenCookie(HttpServletResponse response, TokenInfo tokenInfo) { + String refreshToken = tokenInfo.getRefreshTokenInfo().getTokenValue(); +// Cookie cookie = new Cookie("refresh_token", refreshToken); +// cookie.setHttpOnly(true); +// cookie.setSecure(true); // 生产环境设为true +// cookie.setPath("/"); +// cookie.setMaxAge(refreshTokenExpireTime * 60 * 60); +// cookie.setDomain(".lingniu.com"); // 设置域名 + + // 添加SameSite属性 + response.addHeader("Set-Cookie", + String.format("idp_refresh_token=%s; HttpOnly; Secure; Path=/; Max-Age=%d; SameSite=Strict", + refreshToken, refreshTokenExpireTime * 60 * 60)); + } + public String getCookieRefreshToken(HttpServletRequest request){ + Cookie[] cookies = request.getCookies(); + return Arrays.stream(cookies) + .filter(cookie -> "idp_refresh_token".equals(cookie.getName())) + .map(Cookie::getValue) + .findFirst() + .orElse(null); + } + public boolean validateAccessToken(HttpServletRequest request){ + String accessToken = request.getHeader(tokenHeader); + return accessTokenService.validateAccessToken(accessToken); + } + + public AccessTokenInfo getAccessTokenInfo(HttpServletRequest request){ + String accessToken = request.getHeader(tokenHeader); + return accessTokenService.getAccessTokenInfo(accessToken); + } + public RefreshTokenInfo getRefreshTokenInfo(HttpServletRequest request){ + String accessToken = getCookieRefreshToken(request); + return refreshTokenService.getRefreshTokenInfo(accessToken); + } + + public AccessTokenInfo refreshToken(HttpServletRequest request,HttpServletResponse response) throws IOException { + String accessToken = request.getHeader(tokenHeader); + String cookieRefreshToken = getCookieRefreshToken(request); + RefreshTokenInfo refreshTokenInfo = refreshTokenService.getRefreshTokenInfo(cookieRefreshToken); + if(refreshTokenInfo == null || !refreshTokenInfo.isValid()){ + log.info("refresh token is expire"); + return null; + } + + if(refreshTokenInfo.getAccessToken()!=null && !refreshTokenInfo.getAccessToken().equals(accessToken)){ + log.info("token 已刷新"); + } + String accessTokenNew = UUID.randomUUID().toString().replace("-", ""); + String ip = IpUtils.getIpAddr(request); + String deviceId = DeviceFingerprintUtil.generateFingerprint(request); + String userAgent = request.getHeader("User-Agent"); + Instant issuedAt = Instant.now(); + Instant accessExpiresAt = issuedAt.plusSeconds(accessTokenExpireTime * 60L); + AccessTokenInfo accessTokenInfo = AccessTokenInfo.builder() + .tokenValue(accessTokenNew) + .userAgent(userAgent) + .userId(refreshTokenInfo.getUserId()) + .username(refreshTokenInfo.getUsername()) + .issuedAt(issuedAt) + .expiresAt(accessExpiresAt) + .deviceId(deviceId) + .ipAddress(ip) + .refreshTokenId(refreshTokenInfo.getTokenValue()) + .build(); + accessTokenService.storeAccessToken(accessTokenInfo); + + refreshTokenInfo.incrementUsage(); + refreshTokenInfo.incrementAccessTokenUsage(accessTokenNew); + refreshTokenService.updateRefreshToken(refreshTokenInfo); + setAccessTokenHeader(response,accessTokenNew); + + return accessTokenInfo; + } + public void revokeToken(HttpServletRequest request,HttpServletResponse response){ + String accessToken = request.getHeader(tokenHeader); + String cookieRefreshToken = getCookieRefreshToken(request); + AccessTokenInfo accessTokenInfo = accessTokenService.getAccessTokenInfo(accessToken); + RefreshTokenInfo refreshTokenInfo = refreshTokenService.getRefreshTokenInfo(cookieRefreshToken); + Instant now = Instant.now(); + if(accessTokenInfo!=null){ + accessTokenInfo.setRevokedAt(now); + accessTokenInfo.setRevoked(true); + accessTokenService.revokeAccessToken(accessTokenInfo); + } + if(refreshTokenInfo!=null){ + refreshTokenInfo.setRevokedAt(now); + refreshTokenInfo.setRevoked(true); + refreshTokenService.revokeRefreshToken(refreshTokenInfo); + } + clearRefreshTokenCookie(response); + } + + public void clearRefreshTokenCookie(HttpServletResponse response) { + Cookie cookie = new Cookie("idp_refresh_token", null); + cookie.setHttpOnly(true); + cookie.setSecure(true); + cookie.setPath("/"); + cookie.setMaxAge(0); + + response.addCookie(cookie); + } + /** + * 记录登录信息 + * + * @param userId 用户ID + */ + public void recordLoginInfo(Long userId) + { + userService.updateLoginInfo(userId, IpUtils.getIpAddr(), DateUtils.getNowDate()); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/LoginService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/LoginService.java new file mode 100644 index 0000000..c4752e0 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/LoginService.java @@ -0,0 +1,177 @@ +package org.lingniu.idp.service.core.login; + +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.exception.user.BlackListException; +import org.lingniu.idp.exception.user.UserNotExistsException; +import org.lingniu.idp.exception.user.UserPasswordNotMatchException; +import org.lingniu.idp.exception.user.UserPasswordRetryLimitExceedException; +import org.lingniu.idp.manager.AsyncManager; +import org.lingniu.idp.manager.factory.AsyncFactory; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.model.vo.DataPermission; +import org.lingniu.idp.service.ISysConfigService; +import org.lingniu.idp.service.ISysUserService; +import org.lingniu.idp.service.core.CaptchaService; +import org.lingniu.idp.service.core.SysPermissionService; +import org.lingniu.idp.utils.MessageUtils; +import org.lingniu.idp.utils.SecurityUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.ip.IpUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + + +/** + * 登录校验方法 + * + * @author portal + */ +@Component +public class LoginService +{ + + @Autowired + private RedisCache redisCache; + + @Value(value = "${user.password.maxRetryCount}") + private int maxRetryCount; + + @Value(value = "${user.password.lockTime}") + private int lockTime; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysConfigService configService; + @Autowired + private CaptchaService captchaService; + + @Autowired + private SysPermissionService permissionService; + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public LoginUser login(String username, String password, String code, String uuid) + { + // 验证码校验 + captchaService.validateCaptcha(username, code, uuid); + // 登录前置校验 + loginPreCheck(username, password); + // 2. 加载用户 + SysUser sysUser = userService.selectUserByUserName(username); + Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); + } + + if (!matches(sysUser.getPassword(), password)) + { + retryCount = retryCount + 1; + redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + return new LoginUser(sysUser, permissionService.getMenuPermission(sysUser)); + } + + /** + * 登录前置校验 + * @param username 用户名 + * @param password 用户密码 + */ + public void loginPreCheck(String username, String password) + { + // 用户名或密码为空 错误 + if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); + throw new UserNotExistsException(); + } + // 密码如果不在指定范围内 错误 + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + // 用户名不在指定范围内 错误 + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + // IP黑名单校验 + String blackStr = configService.selectConfigByKey("sys.login.blackIPList"); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked"))); + throw new BlackListException(); + } + } + public Map getPermissionInfo(SysUser sysUser){ + // 角色集合 + Set roles = permissionService.getRolePermission(sysUser); + // 权限集合 + Set permissions = permissionService.getMenuPermission(sysUser); + // 数据权限 + DataPermission dataPermission = permissionService.getDataPermission(sysUser); + + Map map = new HashMap<>(); + map.put("roles",roles); + map.put("permissions",permissions); + map.put("dataPermission",dataPermission); + + return map; + } + public SysUser getUserDetail(String userName){ + SysUser sysUser = userService.selectUserByUserName(userName); + + return sysUser; + } + private String getCacheKey(String username) + { + return CacheConstants.PWD_ERR_CNT_KEY + username; + } + + + public boolean matches(String password, String rawPassword) + { + return SecurityUtils.matchesPassword(rawPassword, password); + } + + public void clearLoginRecordCache(String loginName) + { + if (redisCache.hasKey(getCacheKey(loginName))) + { + redisCache.deleteObject(getCacheKey(loginName)); + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisAccessTokenService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisAccessTokenService.java new file mode 100644 index 0000000..a071b04 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisAccessTokenService.java @@ -0,0 +1,84 @@ +package org.lingniu.idp.service.core.login; + +import lombok.extern.slf4j.Slf4j; +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.model.vo.AccessTokenInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.Map; + +@Component +@Slf4j +public class RedisAccessTokenService { + + @Autowired + private RedisCache redisCache; + + private final long ACCESS_TOKEN_EXPIRE = 3600; // 1小时 + + /** + * 存储Access Token到Redis + */ + public void storeAccessToken(AccessTokenInfo tokenInfo) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, tokenInfo.getTokenValue()); + try { + redisCache.setCacheMap(key,tokenInfo.toMap()); + Instant expiresAt = tokenInfo.getExpiresAt(); + long expire = ACCESS_TOKEN_EXPIRE; + if(expiresAt!=null){ + expire = expiresAt.getEpochSecond() - Instant.now().getEpochSecond(); + } + + redisCache.expire(key,expire); + } catch (Exception e) { + log.error("存储Access Token失败", e); + } + } + + /** + * 验证Access Token + */ + public boolean validateAccessToken(String token) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + if(!redisCache.hasKey(key)){ + return false; + } + AccessTokenInfo accessTokenInfo = getAccessTokenInfo(token); + if(accessTokenInfo==null){ + return false; + } + return accessTokenInfo.isValid(); + } + + /** + * 删除Access Token + */ + public boolean removeAccessToken(String token) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + return redisCache.deleteObject(key); + } + + /** + * 获取Access Token信息 + */ + public AccessTokenInfo getAccessTokenInfo(String token) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + Map cacheMap = redisCache.getCacheMap(key); + if(cacheMap!=null){ + return AccessTokenInfo.fromMap(cacheMap); + } + return null; + } + + /** + * 作废 不删除 + * @param tokenInfo + */ + public void revokeAccessToken(AccessTokenInfo tokenInfo) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, tokenInfo.getTokenValue()); + redisCache.setCacheMap(key,tokenInfo.toRevokeMap()); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisRefreshTokenService.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisRefreshTokenService.java new file mode 100644 index 0000000..017a720 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/RedisRefreshTokenService.java @@ -0,0 +1,72 @@ +package org.lingniu.idp.service.core.login; + +import lombok.extern.slf4j.Slf4j; +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.model.vo.RefreshTokenInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.Map; + +@Component +@Slf4j +public class RedisRefreshTokenService { + + @Autowired + private RedisCache redisCache; + + private final long REFRESH_TOKEN_EXPIRE = 30 * 24 * 3600L; // 30天 + + /** + * 存储Refresh Token到Redis Hash + */ + public void storeRefreshToken(RefreshTokenInfo tokenInfo) { + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, tokenInfo.getTokenValue()); + + redisCache.setCacheMap(key,tokenInfo.toMap()); + Instant expiresAt = tokenInfo.getExpiresAt(); + long expire = REFRESH_TOKEN_EXPIRE; + if(expiresAt!=null){ + expire = expiresAt.getEpochSecond() - Instant.now().getEpochSecond(); + } + + redisCache.expire(key,expire); + // 维护用户会话列表 + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, tokenInfo.getUserId()); + redisCache.setCacheSet(userSessionsKey,tokenInfo.getTokenValue()); + redisCache.expire(userSessionsKey,expire); + } + + /** + * 获取Refresh Token信息 + */ + public RefreshTokenInfo getRefreshTokenInfo(String token) { + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, token); + Map cacheMap = redisCache.getCacheMap(key); + if(cacheMap!=null){ + return RefreshTokenInfo.fromMap(cacheMap); + } + return null; + } + + /** + * 更新Refresh Token最后使用时间 + */ + public void updateRefreshToken(RefreshTokenInfo tokenInfo) { + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, tokenInfo.getTokenValue()); + redisCache.setCacheMap(key,tokenInfo.toUpdateMap()); + } + + /** + * 作废 不删除 + * @param tokenInfo + */ + public void revokeRefreshToken(RefreshTokenInfo tokenInfo) { + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, tokenInfo.getTokenValue()); + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, tokenInfo.getUserId()); + redisCache.deleteCacheSetValue(userSessionsKey,tokenInfo.getTokenValue()); + redisCache.setCacheMap(key,tokenInfo.toRevokeMap()); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/SecurityEnhancer.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/SecurityEnhancer.java new file mode 100644 index 0000000..ea971d3 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/core/login/SecurityEnhancer.java @@ -0,0 +1,138 @@ +package org.lingniu.idp.service.core.login; + +import lombok.extern.slf4j.Slf4j; +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.constant.Constants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +@Slf4j +public class SecurityEnhancer { + + @Autowired + private RedisCache redisCache; + + private final int MAX_SESSIONS_PER_USER = 5; + + /** + * 会话管理 - 限制每个用户的最大会话数 + */ + public void enforceSessionLimit(String userId) { + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, userId); + Set sessions = redisCache.getCacheSet(userSessionsKey); + + if (sessions != null && sessions.size() >= MAX_SESSIONS_PER_USER) { + // 移除最旧的会话 + removeOldestSession(userId, sessions); + } + } + + private void removeOldestSession(String userId, Set sessions) { + String oldestSession = null; + Instant oldestTime = Instant.MAX; + + for (Object sessionToken : sessions) { + String token = (String) sessionToken; + String refreshTokenKey = String.format(CacheConstants.REFRESH_TOKEN_KEY, token); + Map hash = redisCache.getCacheMap(refreshTokenKey); + + if (hash.containsKey("lastUsedAt")) { + Instant lastUsedAt = Instant.parse((String) hash.get("lastUsedAt")); + if (lastUsedAt.isBefore(oldestTime)) { + oldestTime = lastUsedAt; + oldestSession = token; + } + } + } + + if (oldestSession != null) { + revokeToken(oldestSession, "refresh_token"); + log.info("用户{}超出会话限制,移除最旧会话: {}", userId, oldestSession); + } + } + + /** + * Token撤销机制 + */ + public void revokeToken(String token, String tokenType) { + if ("access_token".equals(tokenType)) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + redisCache.deleteObject(key); + log.info("撤销Access Token: {}", token); + } else if ("refresh_token".equals(tokenType)) { + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, token); + + // 获取用户ID,从用户会话列表中移除 + Map hash = redisCache.getCacheMap(key); + if (hash.containsKey("userId")) { + String userId = (String) hash.get("userId"); + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, userId); + redisCache.deleteCacheSetValue(userSessionsKey,token); + } + + redisCache.deleteObject(key); + log.info("撤销Refresh Token: {}", token); + } + } + + /** + * 设备指纹验证 + */ + public boolean validateDeviceFingerprint(String userId, String deviceId, String deviceFingerprint) { + if (deviceId == null || deviceFingerprint == null) { + return true; // 如果设备信息为空,允许通过(可能是首次登录) + } + + String deviceKey = String.format("device_fingerprint:%s:%s", userId, deviceId); + String storedFingerprint = redisCache.getCacheObject(deviceKey); + + if (storedFingerprint == null) { + // 首次使用该设备,存储指纹 + redisCache.setCacheObject(deviceKey,deviceFingerprint); + redisCache.expire(deviceKey,30, TimeUnit.DAYS); + return true; + } + + return deviceFingerprint.equals(storedFingerprint); + } + + /** + * 强制用户下线 + */ + public void forceLogout(String userId) { + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, userId); + Set sessions = redisCache.getCacheSet(userSessionsKey); + + if (sessions != null) { + for (Object sessionToken : sessions) { + revokeToken((String) sessionToken, "refresh_token"); + } + } + + log.info("强制用户{}下线,清除所有会话", userId); + } + + /** + * 检查token是否在黑名单中 + */ + public boolean isTokenBlacklisted(String token) { + String key = "token_blacklist:" + token; + return Boolean.TRUE.equals(redisCache.hasKey(key)); + } + + /** + * 将token加入黑名单 + */ + public void blacklistToken(String token, long expireSeconds) { + String key = "token_blacklist:" + token; + redisCache.setCacheObject(key,"1"); + redisCache.expire(key,expireSeconds,TimeUnit.SECONDS); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysConfigServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000..89b6372 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,233 @@ +package org.lingniu.idp.service.impl; + +import java.util.Collection; +import java.util.List; + +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.lingniu.idp.annotation.DataSource; +import org.lingniu.idp.constant.CacheConstants; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.common.redis.RedisCache; +import org.lingniu.idp.utils.text.Convert; +import org.lingniu.idp.enums.DataSourceType; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.model.entity.SysConfig; +import org.lingniu.idp.mapper.SysConfigMapper; +import org.lingniu.idp.service.ISysConfigService; + +/** + * 参数配置 服务层实现 + * + * @author portal + */ +@Service +public class SysConfigServiceImpl implements ISysConfigService +{ + @Autowired + private SysConfigMapper configMapper; + + @Autowired + private RedisCache redisCache; + + /** + * 项目启动时,初始化参数到缓存 + */ + @PostConstruct + public void init() + { + loadingConfigCache(); + } + + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + @Override + @DataSource(DataSourceType.MASTER) + public SysConfig selectConfigById(Long configId) + { + SysConfig config = new SysConfig(); + config.setConfigId(configId); + return configMapper.selectConfig(config); + } + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数key + * @return 参数键值 + */ + @Override + public String selectConfigByKey(String configKey) + { + String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey))); + if (StringUtils.isNotEmpty(configValue)) + { + return configValue; + } + SysConfig config = new SysConfig(); + config.setConfigKey(configKey); + SysConfig retConfig = configMapper.selectConfig(config); + if (StringUtils.isNotNull(retConfig)) + { + redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); + return retConfig.getConfigValue(); + } + return StringUtils.EMPTY; + } + + /** + * 获取验证码开关 + * + * @return true开启,false关闭 + */ + @Override + public boolean selectCaptchaEnabled() + { + String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled"); + if (StringUtils.isEmpty(captchaEnabled)) + { + return true; + } + return Convert.toBool(captchaEnabled); + } + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + @Override + public List selectConfigList(SysConfig config) + { + return configMapper.selectConfigList(config); + } + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int insertConfig(SysConfig config) + { + int row = configMapper.insertConfig(config); + if (row > 0) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int updateConfig(SysConfig config) + { + SysConfig temp = configMapper.selectConfigById(config.getConfigId()); + if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey())) + { + redisCache.deleteObject(getCacheKey(temp.getConfigKey())); + } + + int row = configMapper.updateConfig(config); + if (row > 0) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + */ + @Override + public void deleteConfigByIds(Long[] configIds) + { + for (Long configId : configIds) + { + SysConfig config = selectConfigById(configId); + if (StringUtils.equals(UserConstants.YES, config.getConfigType())) + { + throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); + } + configMapper.deleteConfigById(configId); + redisCache.deleteObject(getCacheKey(config.getConfigKey())); + } + } + + /** + * 加载参数缓存数据 + */ + @Override + public void loadingConfigCache() + { + List configsList = configMapper.selectConfigList(new SysConfig()); + for (SysConfig config : configsList) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache() + { + Collection keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*"); + redisCache.deleteObject(keys); + } + + /** + * 重置参数缓存数据 + */ + @Override + public void resetConfigCache() + { + clearConfigCache(); + loadingConfigCache(); + } + + /** + * 校验参数键名是否唯一 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public boolean checkConfigKeyUnique(SysConfig config) + { + Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); + SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey()); + if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) + { + return CacheConstants.SYS_CONFIG_KEY + configKey; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysDeptServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..0011cbd --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,345 @@ +package org.lingniu.idp.service.impl; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.lingniu.idp.annotation.DataScope; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.model.base.TreeSelect; +import org.lingniu.idp.model.entity.SysDept; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.utils.text.Convert; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.utils.SecurityUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.spring.SpringUtils; +import org.lingniu.idp.mapper.SysDeptMapper; +import org.lingniu.idp.mapper.SysRoleMapper; +import org.lingniu.idp.service.ISysDeptService; + +/** + * 部门管理 服务实现 + * + * @author portal + */ +@Service +public class SysDeptServiceImpl implements ISysDeptService +{ + @Autowired + private SysDeptMapper deptMapper; + + @Autowired + private SysRoleMapper roleMapper; + + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @return 部门信息集合 + */ + @Override + @DataScope(deptAlias = "d") + public List selectDeptList(SysDept dept) + { + return deptMapper.selectDeptList(dept); + } + + /** + * 查询部门树结构信息 + * + * @param dept 部门信息 + * @return 部门树信息集合 + */ + @Override + public List selectDeptTreeList(SysDept dept) + { + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + return buildDeptTreeSelect(depts); + } + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * @return 树结构列表 + */ + @Override + public List buildDeptTree(List depts) + { + List returnList = new ArrayList(); + List tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); + for (SysDept dept : depts) + { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(dept.getParentId())) + { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) + { + returnList = depts; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * @return 下拉树结构列表 + */ + @Override + public List buildDeptTreeSelect(List depts) + { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + @Override + public List selectDeptListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + } + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + @Override + public SysDept selectDeptById(Long deptId) + { + return deptMapper.selectDeptById(deptId); + } + @Override + public List selectDeptListByUserRole(Long userId){ + return deptMapper.selectDeptListByUserRole(userId); + } + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + @Override + public int selectNormalChildrenDeptById(Long deptId) + { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + @Override + public boolean hasChildByDeptId(Long deptId) + { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0; + } + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 true 存在 false 不存在 + */ + @Override + public boolean checkDeptExistUser(Long deptId) + { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0; + } + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public boolean checkDeptNameUnique(SysDept dept) + { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验部门是否有数据权限 + * + * @param deptId 部门id + */ + @Override + public void checkDeptDataScope(Long deptId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId()) && StringUtils.isNotNull(deptId)) + { + SysDept dept = new SysDept(); + dept.setDeptId(deptId); + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + if (StringUtils.isEmpty(depts)) + { + throw new ServiceException("没有权限访问部门数据!"); + } + } + } + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public int insertDept(SysDept dept) + { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) + { + throw new ServiceException("部门停用,不允许新增"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + return deptMapper.insertDept(dept); + } + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public int updateDept(SysDept dept) + { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) + { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) + { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + updateParentDeptStatusNormal(dept); + } + return result; + } + + /** + * 修改该部门的父级部门状态 + * + * @param dept 当前部门 + */ + private void updateParentDeptStatusNormal(SysDept dept) + { + String ancestors = dept.getAncestors(); + Long[] deptIds = Convert.toLongArray(ancestors); + deptMapper.updateDeptStatusNormal(deptIds); + } + + /** + * 修改子元素关系 + * + * @param deptId 被修改的部门ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) + { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) + { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) + { + deptMapper.updateDeptChildren(children); + } + } + public List selectChildrenDeptById(Long deptId){ + return deptMapper.selectChildrenDeptById(deptId); + } + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + @Override + public int deleteDeptById(Long deptId) + { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 递归列表 + */ + private void recursionFn(List list, SysDept t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysDept tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysDept t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysDept n = (SysDept) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysDept t) + { + return getChildList(list, t).size() > 0; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysLogininforServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000..5a1c585 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,65 @@ +package org.lingniu.idp.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.lingniu.idp.model.entity.SysLogininfor; +import org.lingniu.idp.mapper.SysLogininforMapper; +import org.lingniu.idp.service.ISysLogininforService; + +/** + * 系统访问日志情况信息 服务层处理 + * + * @author portal + */ +@Service +public class SysLogininforServiceImpl implements ISysLogininforService +{ + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + @Override + public void insertLogininfor(SysLogininfor logininfor) + { + logininforMapper.insertLogininfor(logininfor); + } + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + @Override + public List selectLogininforList(SysLogininfor logininfor) + { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * @return 结果 + */ + @Override + public int deleteLogininforByIds(Long[] infoIds) + { + return logininforMapper.deleteLogininforByIds(infoIds); + } + + /** + * 清空系统登录日志 + */ + @Override + public void cleanLogininfor() + { + logininforMapper.cleanLogininfor(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysMenuServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..70894c3 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,543 @@ +package org.lingniu.idp.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.model.base.TreeSelect; +import org.lingniu.idp.model.entity.SysMenu; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.utils.SecurityUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.model.vo.MetaVo; +import org.lingniu.idp.model.vo.RouterVo; +import org.lingniu.idp.mapper.SysMenuMapper; +import org.lingniu.idp.mapper.SysRoleMapper; +import org.lingniu.idp.mapper.SysRoleMenuMapper; +import org.lingniu.idp.service.ISysMenuService; + +/** + * 菜单 业务层处理 + * + * @author portal + */ +@Service +public class SysMenuServiceImpl implements ISysMenuService +{ + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + @Override + public List selectMenuList(Long userId) + { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) + { + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) + { + menuList = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByUserId(Long userId) + { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByRoleId(Long roleId) + { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户名称 + * @return 菜单列表 + */ + @Override + public List selectMenuTreeByUserId(Long userId) + { + List menus = null; + if (SecurityUtils.isAdmin(userId)) + { + menus = menuMapper.selectMenuTreeAll(); + } + else + { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + @Override + public List selectMenuListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + @Override + public List buildMenus(List menus) + { + List routers = new LinkedList(); + for (SysMenu menu : menus) + { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) + { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } + else if (isMenuFrame(menu)) + { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(getRouteName(menu.getRouteName(), menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(getRouteName(menu.getRouteName(), routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + @Override + public List buildMenuTree(List menus) + { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator(); iterator.hasNext();) + { + SysMenu menu = (SysMenu) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(menu.getParentId())) + { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) + { + returnList = menus; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelect(List menus) + { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + @Override + public SysMenu selectMenuById(Long menuId) + { + return menuMapper.selectMenuById(menuId); + } + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean hasChildByMenuId(Long menuId) + { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean checkMenuExistRole(Long menuId) + { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int insertMenu(SysMenu menu) + { + return menuMapper.insertMenu(menu); + } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int updateMenu(SysMenu menu) + { + return menuMapper.updateMenu(menu); + } + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public int deleteMenuById(Long menuId) + { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public boolean checkMenuNameUnique(SysMenu menu) + { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * @return 路由名称 + */ + public String getRouteName(SysMenu menu) + { + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) + { + return StringUtils.EMPTY; + } + return getRouteName(menu.getRouteName(), menu.getPath()); + } + + /** + * 获取路由名称,如没有配置路由名称则取路由地址 + * + * @param name 路由名称 + * @param path 路由地址 + * @return 路由名称(驼峰格式) + */ + public String getRouteName(String name, String path) + { + String routerName = StringUtils.isNotEmpty(name) ? name : path; + return StringUtils.capitalize(routerName); + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * @return 路由地址 + */ + public String getRouterPath(SysMenu menu) + { + String routerPath = menu.getPath(); + // 内链打开外网方式 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + routerPath = innerLinkReplaceEach(routerPath); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) + { + routerPath = "/" + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMenuFrame(menu)) + { + routerPath = "/"; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * @return 组件信息 + */ + public String getComponent(SysMenu menu) + { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) + { + component = menu.getComponent(); + } + else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + component = UserConstants.INNER_LINK; + } + else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) + { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isMenuFrame(SysMenu menu) + { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 是否为内链组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isInnerLink(SysMenu menu) + { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isParentView(SysMenu menu) + { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * @return String + */ + public List getChildPerms(List list, int parentId) + { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + SysMenu t = (SysMenu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) + { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list 分类表 + * @param t 子节点 + */ + private void recursionFn(List list, SysMenu t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysMenu t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysMenu t) + { + return getChildList(list, t).size() > 0; + } + + /** + * 内链域名特殊字符替换 + * + * @return 替换后的内链域名 + */ + public String innerLinkReplaceEach(String path) + { + return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":" }, + new String[] { "", "", "", "/", "/" }); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysOperLogServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..007f8f6 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,76 @@ +package org.lingniu.idp.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.lingniu.idp.model.entity.SysOperLog; +import org.lingniu.idp.mapper.SysOperLogMapper; +import org.lingniu.idp.service.ISysOperLogService; + +/** + * 操作日志 服务层处理 + * + * @author portal + */ +@Service +public class SysOperLogServiceImpl implements ISysOperLogService +{ + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + @Override + public void insertOperlog(SysOperLog operLog) + { + operLogMapper.insertOperlog(operLog); + } + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + @Override + public List selectOperLogList(SysOperLog operLog) + { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + @Override + public int deleteOperLogByIds(Long[] operIds) + { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + @Override + public SysOperLog selectOperLogById(Long operId) + { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 清空操作日志 + */ + @Override + public void cleanOperLog() + { + operLogMapper.cleanOperLog(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysPostServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysPostServiceImpl.java new file mode 100644 index 0000000..da2a661 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysPostServiceImpl.java @@ -0,0 +1,178 @@ +package org.lingniu.idp.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.model.entity.SysPost; +import org.lingniu.idp.mapper.SysPostMapper; +import org.lingniu.idp.mapper.SysUserPostMapper; +import org.lingniu.idp.service.ISysPostService; + +/** + * 岗位信息 服务层处理 + * + * @author portal + */ +@Service +public class SysPostServiceImpl implements ISysPostService +{ + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * @return 岗位信息集合 + */ + @Override + public List selectPostList(SysPost post) + { + return postMapper.selectPostList(post); + } + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + @Override + public List selectPostAll() + { + return postMapper.selectPostAll(); + } + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * @return 角色对象信息 + */ + @Override + public SysPost selectPostById(Long postId) + { + return postMapper.selectPostById(postId); + } + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * @return 选中岗位ID列表 + */ + @Override + public List selectPostListByUserId(Long userId) + { + return postMapper.selectPostListByUserId(userId); + } + + /** + * 校验岗位名称是否唯一 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public boolean checkPostNameUnique(SysPost post) + { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostNameUnique(post.getPostName()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验岗位编码是否唯一 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public boolean checkPostCodeUnique(SysPost post) + { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostCodeUnique(post.getPostCode()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * @return 结果 + */ + @Override + public int countUserPostById(Long postId) + { + return userPostMapper.countUserPostById(postId); + } + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * @return 结果 + */ + @Override + public int deletePostById(Long postId) + { + return postMapper.deletePostById(postId); + } + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * @return 结果 + */ + @Override + public int deletePostByIds(Long[] postIds) + { + for (Long postId : postIds) + { + SysPost post = selectPostById(postId); + if (countUserPostById(postId) > 0) + { + throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName())); + } + } + return postMapper.deletePostByIds(postIds); + } + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public int insertPost(SysPost post) + { + return postMapper.insertPost(post); + } + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public int updatePost(SysPost post) + { + return postMapper.updatePost(post); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysRoleServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..11e6a49 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,427 @@ +package org.lingniu.idp.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.lingniu.idp.annotation.DataScope; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.utils.SecurityUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.spring.SpringUtils; +import org.lingniu.idp.model.entity.SysRoleDept; +import org.lingniu.idp.model.entity.SysRoleMenu; +import org.lingniu.idp.model.entity.SysUserRole; +import org.lingniu.idp.mapper.SysRoleDeptMapper; +import org.lingniu.idp.mapper.SysRoleMapper; +import org.lingniu.idp.mapper.SysRoleMenuMapper; +import org.lingniu.idp.mapper.SysUserRoleMapper; +import org.lingniu.idp.service.ISysRoleService; + +/** + * 角色 业务层处理 + * + * @author portal + */ +@Service +public class SysRoleServiceImpl implements ISysRoleService +{ + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRoleList(SysRole role) + { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + @Override + public List selectRolesByUserId(Long userId) + { + List userRoles = roleMapper.selectRolePermissionByUserId(userId); + List roles = selectRoleAll(); + for (SysRole role : roles) + { + for (SysRole userRole : userRoles) + { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) + { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectRolePermissionByUserId(Long userId) + { + List perms = roleMapper.selectRolePermissionByUserId(userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) + { + if (StringUtils.isNotNull(perm)) + { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + public List selectRoleAll() + { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + @Override + public List selectRoleListByUserId(Long userId) + { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById(Long roleId) + { + return roleMapper.selectRoleById(roleId); + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public boolean checkRoleNameUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public boolean checkRoleKeyUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed(SysRole role) + { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) + { + throw new ServiceException("不允许操作超级管理员角色"); + } + } + + /** + * 校验角色是否有数据权限 + * + * @param roleIds 角色id + */ + @Override + public void checkRoleDataScope(Long... roleIds) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + for (Long roleId : roleIds) + { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) + { + throw new ServiceException("没有权限访问角色数据!"); + } + } + } + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + public int countUserRoleByRoleId(Long roleId) + { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int insertRole(SysRole role) + { + // 新增角色信息 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int updateRole(SysRole role) + { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public int updateRoleStatus(SysRole role) + { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int authDataScope(SysRole role) + { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + */ + public int insertRoleMenu(SysRole role) + { + int rows = 1; + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long menuId : role.getMenuIds()) + { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) + { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + */ + public int insertRoleDept(SysRole role) + { + int rows = 1; + // 新增角色与部门(数据权限)管理 + List list = new ArrayList(); + for (Long deptId : role.getDeptIds()) + { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) + { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + @Transactional + public int deleteRoleById(Long roleId) + { + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + @Override + @Transactional + public int deleteRoleByIds(Long[] roleIds) + { + for (Long roleId : roleIds) + { + checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) + { + throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenu(roleIds); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + @Override + public int deleteAuthUser(SysUserRole userRole) + { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) + { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要授权的用户数据ID + * @return 结果 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) + { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long userId : userIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserOnlineServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000..385e3c7 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,96 @@ +package org.lingniu.idp.service.impl; + +import org.springframework.stereotype.Service; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.model.entity.SysUserOnline; +import org.lingniu.idp.service.ISysUserOnlineService; + +/** + * 在线用户 服务层处理 + * + * @author portal + */ +@Service +public class SysUserOnlineServiceImpl implements ISysUserOnlineService +{ + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) + { + if (StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + @Override + public SysUserOnline loginUserToUserOnline(LoginUser user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) + { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginLocation(user.getLoginLocation()); + sysUserOnline.setBrowser(user.getBrowser()); + sysUserOnline.setOs(user.getOs()); + sysUserOnline.setLoginTime(user.getLoginTime()); + if (StringUtils.isNotNull(user.getUser().getDept())) + { + sysUserOnline.setDeptName(user.getUser().getDept().getDeptName()); + } + return sysUserOnline; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserServiceImpl.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..d5923a5 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/service/impl/SysUserServiceImpl.java @@ -0,0 +1,566 @@ +package org.lingniu.idp.service.impl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import jakarta.validation.Validator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.lingniu.idp.annotation.DataScope; +import org.lingniu.idp.constant.UserConstants; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.entity.SysUser; +import org.lingniu.idp.exception.ServiceException; +import org.lingniu.idp.utils.SecurityUtils; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.bean.BeanValidators; +import org.lingniu.idp.utils.spring.SpringUtils; +import org.lingniu.idp.model.entity.SysPost; +import org.lingniu.idp.model.entity.SysUserPost; +import org.lingniu.idp.model.entity.SysUserRole; +import org.lingniu.idp.mapper.SysPostMapper; +import org.lingniu.idp.mapper.SysRoleMapper; +import org.lingniu.idp.mapper.SysUserMapper; +import org.lingniu.idp.mapper.SysUserPostMapper; +import org.lingniu.idp.mapper.SysUserRoleMapper; +import org.lingniu.idp.service.ISysConfigService; +import org.lingniu.idp.service.ISysDeptService; +import org.lingniu.idp.service.ISysUserService; + +/** + * 用户 业务层处理 + * + * @author portal + */ +@Service +public class SysUserServiceImpl implements ISysUserService +{ + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + @Autowired + private ISysConfigService configService; + + @Autowired + private ISysDeptService deptService; + + @Autowired + protected Validator validator; + + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUserList(SysUser user) + { + return userMapper.selectUserList(user); + } + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectAllocatedList(SysUser user) + { + return userMapper.selectAllocatedList(user); + } + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUnallocatedList(SysUser user) + { + return userMapper.selectUnallocatedList(user); + } + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + @Override + public SysUser selectUserByUserName(String userName) + { + return userMapper.selectUserByUserName(userName); + } + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + @Override + public SysUser selectUserById(Long userId) + { + return userMapper.selectUserById(userId); + } + + /** + * 查询用户所属角色组 + * + * @param userName 用户名 + * @return 结果 + */ + @Override + public String selectUserRoleGroup(String userName) + { + List list = roleMapper.selectRolesByUserName(userName); + if (CollectionUtils.isEmpty(list)) + { + return StringUtils.EMPTY; + } + return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); + } + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * @return 结果 + */ + @Override + public String selectUserPostGroup(String userName) + { + List list = postMapper.selectPostsByUserName(userName); + if (CollectionUtils.isEmpty(list)) + { + return StringUtils.EMPTY; + } + return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); + } + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public boolean checkUserNameUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkUserNameUnique(user.getUserName()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * @return + */ + @Override + public boolean checkPhoneUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * @return + */ + @Override + public boolean checkEmailUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + @Override + public void checkUserAllowed(SysUser user) + { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) + { + throw new ServiceException("不允许操作超级管理员用户"); + } + } + + /** + * 校验用户是否有数据权限 + * + * @param userId 用户id + */ + @Override + public void checkUserDataScope(Long userId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + SysUser user = new SysUser(); + user.setUserId(userId); + List users = SpringUtils.getAopProxy(this).selectUserList(user); + if (StringUtils.isEmpty(users)) + { + throw new ServiceException("没有权限访问用户数据!"); + } + } + } + + /** + * 新增保存用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + @Transactional + public int insertUser(SysUser user) + { + // 新增用户信息 + int rows = userMapper.insertUser(user); + // 新增用户岗位关联 + insertUserPost(user); + // 新增用户与角色管理 + insertUserRole(user); + return rows; + } + + /** + * 注册用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public boolean registerUser(SysUser user) + { + return userMapper.insertUser(user) > 0; + } + + /** + * 修改保存用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + @Transactional + public int updateUser(SysUser user) + { + Long userId = user.getUserId(); + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 新增用户与角色管理 + insertUserRole(user); + // 删除用户与岗位关联 + userPostMapper.deleteUserPostByUserId(userId); + // 新增用户与岗位管理 + insertUserPost(user); + return userMapper.updateUser(user); + } + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + @Override + @Transactional + public void insertUserAuth(Long userId, Long[] roleIds) + { + userRoleMapper.deleteUserRoleByUserId(userId); + insertUserRole(userId, roleIds); + } + + /** + * 修改用户状态 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserStatus(SysUser user) + { + return userMapper.updateUserStatus(user.getUserId(), user.getStatus()); + } + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserProfile(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 修改用户头像 + * + * @param userId 用户ID + * @param avatar 头像地址 + * @return 结果 + */ + @Override + public boolean updateUserAvatar(Long userId, String avatar) + { + return userMapper.updateUserAvatar(userId, avatar) > 0; + } + + /** + * 更新用户登录信息(IP和登录时间) + * + * @param userId 用户ID + * @param loginIp 登录IP地址 + * @param loginDate 登录时间 + * @return 结果 + */ + public void updateLoginInfo(Long userId, String loginIp, Date loginDate) + { + userMapper.updateLoginInfo(userId, loginIp, loginDate); + } + + /** + * 重置用户密码 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int resetPwd(SysUser user) + { + return userMapper.resetUserPwd(user.getUserId(), user.getPassword()); + } + + /** + * 重置用户密码 + * + * @param userId 用户ID + * @param password 密码 + * @return 结果 + */ + @Override + public int resetUserPwd(Long userId, String password) + { + return userMapper.resetUserPwd(userId, password); + } + + /** + * 新增用户角色信息 + * + * @param user 用户对象 + */ + public void insertUserRole(SysUser user) + { + this.insertUserRole(user.getUserId(), user.getRoleIds()); + } + + /** + * 新增用户岗位信息 + * + * @param user 用户对象 + */ + public void insertUserPost(SysUser user) + { + Long[] posts = user.getPostIds(); + if (StringUtils.isNotEmpty(posts)) + { + // 新增用户与岗位管理 + List list = new ArrayList(posts.length); + for (Long postId : posts) + { + SysUserPost up = new SysUserPost(); + up.setUserId(user.getUserId()); + up.setPostId(postId); + list.add(up); + } + userPostMapper.batchUserPost(list); + } + } + + /** + * 新增用户角色信息 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserRole(Long userId, Long[] roleIds) + { + if (StringUtils.isNotEmpty(roleIds)) + { + // 新增用户与角色管理 + List list = new ArrayList(roleIds.length); + for (Long roleId : roleIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + userRoleMapper.batchUserRole(list); + } + } + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + @Override + @Transactional + public int deleteUserById(Long userId) + { + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 删除用户与岗位表 + userPostMapper.deleteUserPostByUserId(userId); + return userMapper.deleteUserById(userId); + } + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + @Override + @Transactional + public int deleteUserByIds(Long[] userIds) + { + for (Long userId : userIds) + { + checkUserAllowed(new SysUser(userId)); + checkUserDataScope(userId); + } + // 删除用户与角色关联 + userRoleMapper.deleteUserRole(userIds); + // 删除用户与岗位关联 + userPostMapper.deleteUserPost(userIds); + return userMapper.deleteUserByIds(userIds); + } + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + public String importUser(List userList, Boolean isUpdateSupport, String operName) + { + if (StringUtils.isNull(userList) || userList.size() == 0) + { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (SysUser user : userList) + { + try + { + // 验证是否存在这个用户 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) + { + BeanValidators.validateWithException(validator, user); + deptService.checkDeptDataScope(user.getDeptId()); + String password = configService.selectConfigByKey("sys.user.initPassword"); + user.setPassword(SecurityUtils.encryptPassword(password)); + user.setCreateBy(operName); + userMapper.insertUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 导入成功"); + } + else if (isUpdateSupport) + { + BeanValidators.validateWithException(validator, user); + checkUserAllowed(u); + checkUserDataScope(u.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); + user.setUserId(u.getUserId()); + user.setDeptId(u.getDeptId()); + user.setUpdateBy(operName); + userMapper.updateUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 更新成功"); + } + else + { + failureNum++; + failureMsg.append("
" + failureNum + "、账号 " + user.getUserName() + " 已存在"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java new file mode 100644 index 0000000..f195d68 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java @@ -0,0 +1,92 @@ +package org.lingniu.idp.utils; + +import com.alibaba.fastjson2.JSON; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import java.util.Base64; +import java.util.Map; +import java.util.UUID; + +/** + * Client凭证生成和验证工具 + */ +public class ClientCredentialUtil { + + private static final PasswordEncoder PASSWORD_ENCODER = new BCryptPasswordEncoder(); + + /** + * 生成随机Client Secret(Base64编码) + * @param length 字节长度,推荐32字节(256位) + * @return 随机生成的Client Secret + */ + public static String generateRandomSecret(int length) { + byte[] randomBytes = new byte[length]; + new java.security.SecureRandom().nextBytes(randomBytes); + return Base64.getUrlEncoder().withoutPadding().encodeToString(randomBytes); + } + + /** + * 使用BCrypt加密Client Secret + * @param rawSecret 原始明文Secret + * @return BCrypt加密后的Secret + */ + public static String encodeWithBCrypt(String rawSecret) { + return PASSWORD_ENCODER.encode(rawSecret); + } + + /** + * 生成Spring Security格式的加密Secret + * @param rawSecret 原始明文Secret + * @return {bcrypt}加密格式 + */ + public static String encodeWithBCryptPrefix(String rawSecret) { + return "{bcrypt}" + PASSWORD_ENCODER.encode(rawSecret); + } + + /** + * 验证Client Secret + * @param rawSecret 原始明文Secret + * @param encodedSecret 已加密的Secret(可带或不带前缀) + * @return 验证结果 + */ + public static boolean verifySecret(String rawSecret, String encodedSecret) { + // 移除前缀(如果有) + if (encodedSecret.startsWith("{bcrypt}")) { + encodedSecret = encodedSecret.substring(8); + } else if (encodedSecret.startsWith("{noop}")) { + // 如果是明文存储 + return rawSecret.equals(encodedSecret.substring(6)); + } + return PASSWORD_ENCODER.matches(rawSecret, encodedSecret); + } + + /** + * 生成Client ID(UUID格式) + * @return 生成的Client ID + */ + public static String generateClientId() { + return UUID.randomUUID().toString().replace("-", "").substring(0, 24); + } + + /** + * 生成完整的Client凭证 + * @return 包含Client ID、原始Secret和加密Secret的Map + */ + public static java.util.Map generateClientCredentials() { + String clientId = generateClientId(); + String rawSecret = generateRandomSecret(32); + String encodedSecret = encodeWithBCryptPrefix(rawSecret); + + java.util.Map credentials = new java.util.HashMap<>(); + credentials.put("clientId", clientId); + credentials.put("rawSecret", rawSecret); + credentials.put("encodedSecret", encodedSecret); + + return credentials; + } + + public static void main(String[] args) { + Map stringStringMap = generateClientCredentials(); + System.out.println(JSON.toJSONString(stringStringMap)); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DateUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DateUtils.java new file mode 100644 index 0000000..f55a947 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DateUtils.java @@ -0,0 +1,188 @@ +package org.lingniu.idp.utils; + +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Date; + +/** + * 时间工具类 + * + * @author portal + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算相差天数 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + + /** + * 计算时间差 + * + * @param endDate 最后时间 + * @param startTime 开始时间 + * @return 时间差(天/小时/分钟) + */ + public static String timeDistance(Date endDate, Date startTime) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - startTime.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 增加 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 增加 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DesensitizedUtil.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DesensitizedUtil.java new file mode 100644 index 0000000..957365e --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DesensitizedUtil.java @@ -0,0 +1,49 @@ +package org.lingniu.idp.utils; + +/** + * 脱敏工具类 + * + * @author portal + */ +public class DesensitizedUtil +{ + /** + * 密码的全部字符都用*代替,比如:****** + * + * @param password 密码 + * @return 脱敏后的密码 + */ + public static String password(String password) + { + if (StringUtils.isBlank(password)) + { + return StringUtils.EMPTY; + } + return StringUtils.repeat('*', password.length()); + } + + /** + * 车牌中间用*代替,如果是错误的车牌,不处理 + * + * @param carLicense 完整的车牌号 + * @return 脱敏后的车牌 + */ + public static String carLicense(String carLicense) + { + if (StringUtils.isBlank(carLicense)) + { + return StringUtils.EMPTY; + } + // 普通车牌 + if (carLicense.length() == 7) + { + carLicense = StringUtils.hide(carLicense, 3, 6); + } + else if (carLicense.length() == 8) + { + // 新能源车牌 + carLicense = StringUtils.hide(carLicense, 3, 7); + } + return carLicense; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DeviceFingerprintUtil.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DeviceFingerprintUtil.java new file mode 100644 index 0000000..5359e51 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/DeviceFingerprintUtil.java @@ -0,0 +1,32 @@ +package org.lingniu.idp.utils; + +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.util.DigestUtils; + +// 设备指纹工具 +public class DeviceFingerprintUtil { + + public static String generateFingerprint(HttpServletRequest request) { + String userAgent = request.getHeader("User-Agent"); + String acceptLanguage = request.getHeader("Accept-Language"); + String acceptEncoding = request.getHeader("Accept-Encoding"); + String ipAddress = getClientIp(request); + + String fingerprintSource = userAgent + "|" + acceptLanguage + "|" + acceptEncoding + "|" + ipAddress; + return DigestUtils.md5DigestAsHex(fingerprintSource.getBytes()); + } + + private static String getClientIp(HttpServletRequest request) { + String ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip.split(",")[0].trim(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/EscapeUtil.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/EscapeUtil.java new file mode 100644 index 0000000..284903d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/EscapeUtil.java @@ -0,0 +1,166 @@ +package org.lingniu.idp.utils; + + +/** + * 转义和反转义工具类 + * + * @author portal + */ +public class EscapeUtil +{ + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + + private static final char[][] TEXT = new char[64][]; + + static + { + for (int i = 0; i < 64; i++) + { + TEXT[i] = new char[] { (char) i }; + } + + // special HTML characters + TEXT['\''] = "'".toCharArray(); // 单引号 + TEXT['"'] = """.toCharArray(); // 双引号 + TEXT['&'] = "&".toCharArray(); // &符 + TEXT['<'] = "<".toCharArray(); // 小于号 + TEXT['>'] = ">".toCharArray(); // 大于号 + } + + /** + * 转义文本中的HTML字符为安全的字符 + * + * @param text 被转义的文本 + * @return 转义后的文本 + */ + public static String escape(String text) + { + return encode(text); + } + + /** + * 还原被转义的HTML特殊字符 + * + * @param content 包含转义符的HTML内容 + * @return 转换后的字符串 + */ + public static String unescape(String content) + { + return decode(content); + } + + /** + * 清除所有HTML标签,但是不删除标签内的内容 + * + * @param content 文本 + * @return 清除标签后的文本 + */ + public static String clean(String content) + { + return new HTMLFilter().filter(content); + } + + /** + * Escape编码 + * + * @param text 被编码的文本 + * @return 编码后的字符 + */ + private static String encode(String text) + { + if (StringUtils.isEmpty(text)) + { + return StringUtils.EMPTY; + } + + final StringBuilder tmp = new StringBuilder(text.length() * 6); + char c; + for (int i = 0; i < text.length(); i++) + { + c = text.charAt(i); + if (c < 256) + { + tmp.append("%"); + if (c < 16) + { + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + else + { + tmp.append("%u"); + if (c <= 0xfff) + { + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + } + return tmp.toString(); + } + + /** + * Escape解码 + * + * @param content 被转义的内容 + * @return 解码后的字符串 + */ + public static String decode(String content) + { + if (StringUtils.isEmpty(content)) + { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0, pos = 0; + char ch; + while (lastPos < content.length()) + { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) + { + if (content.charAt(pos + 1) == 'u') + { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } + else + { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } + else + { + if (pos == -1) + { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } + else + { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + + public static void main(String[] args) + { + String html = ""; + String escape = EscapeUtil.escape(html); + // String html = "ipt>alert(\"XSS\")ipt>"; + // String html = "<123"; + // String html = "123>"; + System.out.println("clean: " + EscapeUtil.clean(html)); + System.out.println("escape: " + escape); + System.out.println("unescape: " + EscapeUtil.unescape(escape)); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/HTMLFilter.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/HTMLFilter.java new file mode 100644 index 0000000..22b9ff2 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/HTMLFilter.java @@ -0,0 +1,566 @@ +package org.lingniu.idp.utils; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML过滤器,用于去除XSS漏洞隐患。 + * + * @author portal + */ +public final class HTMLFilter +{ + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter() + { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[] { "img" }; + vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" }; + vDisallowed = new String[] {}; + vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp. + vProtocolAtts = new String[] { "src", "href" }; + vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" }; + vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" }; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter(final Map conf) + { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + private void reset() + { + vTagCounts.clear(); + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr(final int decimal) + { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars(final String s) + { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + // --------------------------------------------------------------- + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter(final String input) + { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags() + { + return alwaysMakeTags; + } + + public boolean isStripComments() + { + return stripComment; + } + + private String escapeComments(final String s) + { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) + { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML(String s) + { + if (alwaysMakeTags) + { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 不追加结束标签 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } + else + { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) + { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) + { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) + { + for (int ii = 0; ii < vTagCounts.get(key); ii++) + { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks(final String s) + { + String result = s; + for (String tag : vRemoveBlanks) + { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) + { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) + { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) + { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(final String s) + { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) + { + if (!inArray(name, vSelfClosingTags)) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) + { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) + { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) + { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0; ii < paramNames.size(); ii++) + { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) + { + if (inArray(paramName, vProtocolAtts)) + { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\""); + } + } + + if (inArray(name, vSelfClosingTags)) + { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) + { + ending = ""; + } + + if (ending == null || ending.length() < 1) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } + else + { + vTagCounts.put(name, 1); + } + } + else + { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } + else + { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) + { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol(String s) + { + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) + { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) + { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) + { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) + { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities(final String s) + { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes(final String s) + { + if (encodeQuotes) + { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 不替换双引号为",防止json格式无效 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } + else + { + return s; + } + } + + private String checkEntity(final String preamble, final String term) + { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(final String entity) + { + return inArray(entity, vAllowedEntities); + } + + private static boolean inArray(final String s, final String[] array) + { + for (String item : array) + { + if (item != null && item.equals(s)) + { + return true; + } + } + return false; + } + + private boolean allowed(final String name) + { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute(final String name, final String paramName) + { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/JsonUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/JsonUtils.java new file mode 100644 index 0000000..dd73993 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/JsonUtils.java @@ -0,0 +1,46 @@ +package org.lingniu.idp.utils; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.springframework.stereotype.Component; + +@Component +public class JsonUtils { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + static { + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + } + + public static String toJson(Object obj) { + try { + return objectMapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + throw new RuntimeException("JSON序列化失败", e); + } + } + + public static T fromJson(String json, Class clazz) { + try { + return objectMapper.readValue(json, clazz); + } catch (JsonProcessingException e) { + throw new RuntimeException("JSON反序列化失败", e); + } + } + + public static T fromJson(String json, TypeReference typeReference) { + try { + return objectMapper.readValue(json, typeReference); + } catch (JsonProcessingException e) { + throw new RuntimeException("JSON反序列化失败", e); + } + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/LogUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/LogUtils.java new file mode 100644 index 0000000..571808a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/LogUtils.java @@ -0,0 +1,18 @@ +package org.lingniu.idp.utils; + +/** + * 处理并记录日志文件 + * + * @author portal + */ +public class LogUtils +{ + public static String getBlock(Object msg) + { + if (msg == null) + { + msg = ""; + } + return "[" + msg.toString() + "]"; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/MessageUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/MessageUtils.java new file mode 100644 index 0000000..3156c6d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/MessageUtils.java @@ -0,0 +1,26 @@ +package org.lingniu.idp.utils; + +import org.lingniu.idp.utils.spring.SpringUtils; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +/** + * 获取i18n资源文件 + * + * @author portal + */ +public class MessageUtils +{ + /** + * 根据消息键和参数 获取消息 委托给spring messageSource + * + * @param code 消息键 + * @param args 参数 + * @return 获取国际化翻译值 + */ + public static String message(String code, Object... args) + { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/SecurityUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/SecurityUtils.java new file mode 100644 index 0000000..73abefa --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/SecurityUtils.java @@ -0,0 +1,179 @@ +package org.lingniu.idp.utils; + +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.model.entity.SysRole; +import org.lingniu.idp.model.dto.LoginUser; +import org.lingniu.idp.exception.ServiceException; +import org.springframework.http.HttpStatus; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.util.PatternMatchUtils; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 安全服务工具类 + * + * @author portal + */ +public class SecurityUtils +{ + + /** + * 用户ID + **/ + public static Long getUserId() + { + try + { + return getLoginUser().getUserId(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED.value()); + } + } + + /** + * 获取部门ID + **/ + public static Long getDeptId() + { + try + { + return getLoginUser().getDeptId(); + } + catch (Exception e) + { + throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED.value()); + } + } + + /** + * 获取用户账户 + **/ + public static String getUsername() + { + try + { + return getLoginUser().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED.value()); + } + } + + /** + * 获取用户 + **/ + public static LoginUser getLoginUser() + { + try + { + return (LoginUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED.value()); + } + } + + /** + * 获取Authentication + */ + public static Authentication getAuthentication() + { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 生成BCryptPasswordEncoder密码 + * + * @param password 密码 + * @return 加密字符串 + */ + public static String encryptPassword(String password) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 判断密码是否相同 + * + * @param rawPassword 真实密码 + * @param encodedPassword 加密后字符 + * @return 结果 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 是否为管理员 + * + * @param userId 用户ID + * @return 结果 + */ + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + /** + * 验证用户是否具备某权限 + * + * @param permission 权限字符串 + * @return 用户是否具备某权限 + */ + public static boolean hasPermi(String permission) + { + return hasPermi(getLoginUser().getPermissions(), permission); + } + + /** + * 判断是否包含权限 + * + * @param authorities 权限列表 + * @param permission 权限字符串 + * @return 用户是否具备某权限 + */ + public static boolean hasPermi(Collection authorities, String permission) + { + return authorities.stream().filter(StringUtils::hasText) + .anyMatch(x -> Constants.ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission)); + } + + /** + * 验证用户是否拥有某个角色 + * + * @param role 角色标识 + * @return 用户是否具备某角色 + */ + public static boolean hasRole(String role) + { + List roleList = getLoginUser().getUser().getRoles(); + Collection roles = roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toSet()); + return hasRole(roles, role); + } + + /** + * 判断是否包含角色 + * + * @param roles 角色列表 + * @param role 角色 + * @return 用户是否具备某角色权限 + */ + public static boolean hasRole(Collection roles, String role) + { + return roles.stream().filter(StringUtils::hasText) + .anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role)); + } + +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ServletUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ServletUtils.java new file mode 100644 index 0000000..3408bc7 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ServletUtils.java @@ -0,0 +1,219 @@ +package org.lingniu.idp.utils; + +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.utils.text.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * 客户端工具类 + * + * @author portal + */ +public class ServletUtils +{ + /** + * 获取String参数 + */ + public static String getParameter(String name) + { + return getRequest().getParameter(name); + } + + /** + * 获取String参数 + */ + public static String getParameter(String name, String defaultValue) + { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name) + { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) + { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool(String name) + { + return Convert.toBool(getRequest().getParameter(name)); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool(String name, Boolean defaultValue) + { + return Convert.toBool(getRequest().getParameter(name), defaultValue); + } + + /** + * 获得所有请求参数 + * + * @param request 请求对象{@link ServletRequest} + * @return Map + */ + public static Map getParams(ServletRequest request) + { + final Map map = request.getParameterMap(); + return Collections.unmodifiableMap(map); + } + + /** + * 获得所有请求参数 + * + * @param request 请求对象{@link ServletRequest} + * @return Map + */ + public static Map getParamMap(ServletRequest request) + { + Map params = new HashMap<>(); + for (Map.Entry entry : getParams(request).entrySet()) + { + params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + } + return params; + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 获取session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + */ + public static void renderString(HttpServletResponse response, String string) + { + try + { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) + { + String accept = request.getHeader("accept"); + if (accept != null && accept.contains("application/json")) + { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) + { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) + { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } + + /** + * 内容编码 + * + * @param str 内容 + * @return 编码后的内容 + */ + public static String urlEncode(String str) + { + try + { + return URLEncoder.encode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + /** + * 内容解码 + * + * @param str 内容 + * @return 解码后的内容 + */ + public static String urlDecode(String str) + { + try + { + return URLDecoder.decode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/StringUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/StringUtils.java new file mode 100644 index 0000000..4142d8d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/StringUtils.java @@ -0,0 +1,718 @@ +package org.lingniu.idp.utils; + +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.utils.text.StrFormatter; +import org.springframework.util.AntPathMatcher; + +import java.util.*; + +/** + * 字符串工具类 + * + * @author portal + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils +{ + /** 空字符串 */ + private static final String NULLSTR = ""; + + /** 下划线 */ + private static final char SEPARATOR = '_'; + + /** 星号 */ + private static final char ASTERISK = '*'; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) + { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) + { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) + { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + ** @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) + { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) + { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) + { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) + { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) + { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) + { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) + { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) + { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) + { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) + { + return (str == null ? "" : str.trim()); + } + + /** + * 替换指定字符串的指定区间内字符为"*" + * + * @param str 字符串 + * @param startInclude 开始位置(包含) + * @param endExclude 结束位置(不包含) + * @return 替换后的字符串 + */ + public static String hide(CharSequence str, int startInclude, int endExclude) + { + if (isEmpty(str)) + { + return NULLSTR; + } + final int strLength = str.length(); + if (startInclude > strLength) + { + return NULLSTR; + } + if (endExclude > strLength) + { + endExclude = strLength; + } + if (startInclude > endExclude) + { + // 如果起始位置大于结束位置,不替换 + return NULLSTR; + } + final char[] chars = new char[strLength]; + for (int i = 0; i < strLength; i++) + { + if (i >= startInclude && i < endExclude) + { + chars[i] = ASTERISK; + } + else + { + chars[i] = str.charAt(i); + } + } + return new String(chars); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) + { + if (str == null) + { + return NULLSTR; + } + + if (start < 0) + { + start = str.length() + start; + } + + if (start < 0) + { + start = 0; + } + if (start > str.length()) + { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) + { + if (str == null) + { + return NULLSTR; + } + + if (end < 0) + { + end = str.length() + end; + } + if (start < 0) + { + start = str.length() + start; + } + + if (end > str.length()) + { + end = str.length(); + } + + if (start > end) + { + return NULLSTR; + } + + if (start < 0) + { + start = 0; + } + if (end < 0) + { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 在字符串中查找第一个出现的 `open` 和最后一个出现的 `close` 之间的子字符串 + * + * @param str 要截取的字符串 + * @param open 起始字符串 + * @param close 结束字符串 + * @return 截取结果 + */ + public static String substringBetweenLast(final String str, final String open, final String close) + { + if (isEmpty(str) || isEmpty(open) || isEmpty(close)) + { + return NULLSTR; + } + final int start = str.indexOf(open); + if (start != INDEX_NOT_FOUND) + { + final int end = str.lastIndexOf(close); + if (end != INDEX_NOT_FOUND) + { + return str.substring(start + open.length(), end); + } + } + return NULLSTR; + } + + /** + * 判断是否为空,并且不是空白字符 + * + * @param str 要判断的value + * @return 结果 + */ + public static boolean hasText(String str) + { + return (str != null && !str.isEmpty() && containsText(str)); + } + + private static boolean containsText(CharSequence str) + { + int strLen = str.length(); + for (int i = 0; i < strLen; i++) + { + if (!Character.isWhitespace(str.charAt(i))) + { + return true; + } + } + return false; + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) + { + if (isEmpty(params) || isEmpty(template)) + { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * @return 结果 + */ + public static boolean ishttp(String link) + { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static final Set str2Set(String str, String sep) + { + return new HashSet(str2List(str, sep, true, false)); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @return list集合 + */ + public static final List str2List(String str, String sep) + { + return str2List(str, sep, true, false); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) + { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) + { + return list; + } + + // 过滤空白字符串 + if (filterBlank && StringUtils.isBlank(str)) + { + return list; + } + String[] split = str.split(sep); + for (String string : split) + { + if (filterBlank && StringUtils.isBlank(string)) + { + continue; + } + if (trim) + { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 判断给定的collection列表中是否包含数组array 判断给定的数组array中是否包含给定的元素value + * + * @param collection 给定的集合 + * @param array 给定的数组 + * @return boolean 结果 + */ + public static boolean containsAny(Collection collection, String... array) + { + if (isEmpty(collection) || isEmpty(array)) + { + return false; + } + else + { + for (String str : array) + { + if (collection.contains(str)) + { + return true; + } + } + return false; + } + } + + /** + * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 + * + * @param cs 指定字符串 + * @param searchCharSequences 需要检查的字符串数组 + * @return 是否包含任意一个字符串 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) + { + if (isEmpty(cs) || isEmpty(searchCharSequences)) + { + return false; + } + for (CharSequence testStr : searchCharSequences) + { + if (containsIgnoreCase(cs, testStr)) + { + return true; + } + } + return false; + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) + { + if (str != null && strs != null) + { + for (String s : strs) + { + if (str.equalsIgnoreCase(trim(s))) + { + return true; + } + } + } + return false; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) + { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) + { + // 没必要转换 + return ""; + } + else if (!name.contains("_")) + { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) + { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) + { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 + * 例如:user_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + if (s.indexOf(SEPARATOR) == -1) + { + return s; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String pattern : strs) + { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) + { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } + + /** + * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 + * + * @param num 数字对象 + * @param size 字符串指定长度 + * @return 返回数字的字符串格式,该字符串为指定长度。 + */ + public static final String padl(final Number num, final int size) + { + return padl(num.toString(), size, '0'); + } + + /** + * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 + * + * @param s 原始字符串 + * @param size 字符串指定长度 + * @param c 用于补齐的字符 + * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 + */ + public static final String padl(final String s, final int size, final char c) + { + final StringBuilder sb = new StringBuilder(size); + if (s != null) + { + final int len = s.length(); + if (s.length() <= size) + { + for (int i = size - len; i > 0; i--) + { + sb.append(c); + } + sb.append(s); + } + else + { + return s.substring(len - size, len); + } + } + else + { + for (int i = size; i > 0; i--) + { + sb.append(c); + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/Threads.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/Threads.java new file mode 100644 index 0000000..977eca8 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/Threads.java @@ -0,0 +1,96 @@ +package org.lingniu.idp.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.*; + +/** + * 线程相关工具类. + * + * @author portal + */ +public class Threads +{ + private static final Logger logger = LoggerFactory.getLogger(Threads.class); + + /** + * sleep等待,单位为毫秒 + */ + public static void sleep(long milliseconds) + { + try + { + Thread.sleep(milliseconds); + } + catch (InterruptedException e) + { + return; + } + } + + /** + * 停止线程池 + * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务. + * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数. + * 如果仍然超時,則強制退出. + * 另对在shutdown时线程本身被调用中断做了处理. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) + { + if (pool != null && !pool.isShutdown()) + { + pool.shutdown(); + try + { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + pool.shutdownNow(); + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + logger.info("Pool did not terminate"); + } + } + } + catch (InterruptedException ie) + { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 打印线程异常信息 + */ + public static void printException(Runnable r, Throwable t) + { + if (t == null && r instanceof Future) + { + try + { + Future future = (Future) r; + if (future.isDone()) + { + future.get(); + } + } + catch (CancellationException ce) + { + t = ce; + } + catch (ExecutionException ee) + { + t = ee.getCause(); + } + catch (InterruptedException ie) + { + Thread.currentThread().interrupt(); + } + } + if (t != null) + { + logger.error(t.getMessage(), t); + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanUtils.java new file mode 100644 index 0000000..7f3625b --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanUtils.java @@ -0,0 +1,110 @@ +package org.lingniu.idp.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 工具类 + * + * @author portal + */ +public class BeanUtils extends org.springframework.beans.BeanUtils +{ + /** Bean方法名中属性名开始的下标 */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** * 匹配getter方法的正则表达式 */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** * 匹配setter方法的正则表达式 */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp(Object dest, Object src) + { + try + { + copyProperties(src, dest); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * @return 对象的setter方法列表 + */ + public static List getSetterMethods(Object obj) + { + // setter方法列表 + List setterMethods = new ArrayList(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) + { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) + { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods(Object obj) + { + // getter方法列表 + List getterMethods = new ArrayList(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) + { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) + { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals(String m1, String m2) + { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanValidators.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanValidators.java new file mode 100644 index 0000000..f3e743d --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/bean/BeanValidators.java @@ -0,0 +1,26 @@ +package org.lingniu.idp.utils.bean; + + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validator; + +import java.util.Set; + +/** + * bean对象属性验证 + * + * @author portal + */ +public class BeanValidators +{ + public static void validateWithException(Validator validator, Object object, Class... groups) + throws ConstraintViolationException + { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) + { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpHelper.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpHelper.java new file mode 100644 index 0000000..8ab96b6 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpHelper.java @@ -0,0 +1,56 @@ +package org.lingniu.idp.utils.http; + +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.servlet.ServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +/** + * 通用http工具封装 + * + * @author portal + */ +public class HttpHelper +{ + private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); + + public static String getBodyString(ServletRequest request) + { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try (InputStream inputStream = request.getInputStream()) + { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line = ""; + while ((line = reader.readLine()) != null) + { + sb.append(line); + } + } + catch (IOException e) + { + LOGGER.warn("getBodyString出现问题!"); + } + finally + { + if (reader != null) + { + try + { + reader.close(); + } + catch (IOException e) + { + LOGGER.error(ExceptionUtils.getMessage(e)); + } + } + } + return sb.toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpUtils.java new file mode 100644 index 0000000..668c18a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/HttpUtils.java @@ -0,0 +1,285 @@ +package org.lingniu.idp.utils.http; + +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; + +import javax.net.ssl.*; +import java.io.*; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; + +/** + * 通用http发送方法 + * + * @author portal + */ +public class HttpUtils +{ + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url) + { + return sendGet(url, StringUtils.EMPTY); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param) + { + return sendGet(url, param, Constants.UTF8); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @param contentType 编码类型 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param, String contentType) + { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try + { + String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (in != null) + { + in.close(); + } + } + catch (Exception ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) + { + return sendPost(url, param, MediaType.APPLICATION_FORM_URLENCODED_VALUE); + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数 + * @param contentType 内容类型 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param, String contentType) + { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + log.info("sendPost - {}", url); + URL realUrl = new URL(url); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("Content-Type", contentType); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) + { + return sendSSLPost(url, param, MediaType.APPLICATION_FORM_URLENCODED_VALUE); + } + + public static String sendSSLPost(String url, String param, String contentType) + { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try + { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("Content-Type", contentType); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) + { + if (ret != null && !"".equals(ret.trim())) + { + result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); + } + } + log.info("recv - {}", result); + conn.disconnect(); + br.close(); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[] {}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier + { + @Override + public boolean verify(String hostname, SSLSession session) + { + return true; + } + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/UserAgentUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/UserAgentUtils.java new file mode 100644 index 0000000..e6e1b95 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/http/UserAgentUtils.java @@ -0,0 +1,255 @@ +package org.lingniu.idp.utils.http; + +import nl.basjes.parse.useragent.UserAgent; +import nl.basjes.parse.useragent.UserAgentAnalyzer; +import org.lingniu.idp.utils.StringUtils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * UserAgent解析工具类 + * + * @author portal + */ +public class UserAgentUtils +{ + public static final String UNKNOWN = ""; + + // 浏览器正则表达式模式 + private static final Pattern CHROME_PATTERN = Pattern.compile("Chrome/(\\d+)(?:\\.\\d+)*"); + private static final Pattern FIREFOX_PATTERN = Pattern.compile("Firefox/(\\d+)(?:\\.\\d+)*"); + private static final Pattern EDGE_PATTERN = Pattern.compile("Edg(?:e)?/(\\d+)(?:\\.\\d+)*"); + private static final Pattern SAFARI_PATTERN = Pattern.compile("Version/(\\d+)(?:\\.\\d+)*"); + private static final Pattern OPERA_PATTERN = Pattern.compile("Opera/(\\d+)(?:\\.\\d+)*"); + private static final Pattern IE_PATTERN = Pattern.compile("(?:MSIE |Trident/.*rv:)(\\d+)(?:\\.\\d+)*"); + private static final Pattern SAMSUNG_PATTERN = Pattern.compile("SamsungBrowser/(\\d+)(?:\\.\\d+)*"); + private static final Pattern UC_PATTERN = Pattern.compile("UCBrowser/(\\d+)(?:\\.\\d+)*"); + private static final Pattern QQ_PATTERN = Pattern.compile("QQBrowser/(\\d+)(?:\\.\\d+)*"); + private static final Pattern WECHAT_PATTERN = Pattern.compile("MicroMessenger/(\\d+)(?:\\.\\d+)*"); + private static final Pattern BAIDU_PATTERN = Pattern.compile("baidubrowser/(\\d+)(?:\\.\\d+)*"); + + // 操作系统正则表达式模式 + private static final Pattern WINDOWS_PATTERN = Pattern.compile("Windows NT (\\d+\\.\\d+)"); + private static final Pattern MACOS_PATTERN = Pattern.compile("Mac OS X (\\d+[_\\d]*)"); + private static final Pattern ANDROID_PATTERN = Pattern.compile("Android (\\d+)(?:\\.\\d+)*"); + private static final Pattern IOS_PATTERN = Pattern.compile("OS[\\s_](\\d+)(?:_\\d+)*"); + private static final Pattern LINUX_PATTERN = Pattern.compile("Linux"); + private static final Pattern CHROMEOS_PATTERN = Pattern.compile("CrOS"); + + private static final UserAgentAnalyzer userAgentAnalyzer = UserAgentAnalyzer + .newBuilder().hideMatcherLoadStats() + .withCache(5000) + .showMinimalVersion() + .withField(UserAgent.AGENT_NAME_VERSION) + .withField(UserAgent.OPERATING_SYSTEM_NAME_VERSION) + .build(); + + /** + * 获取客户端浏览器 + */ + public static String getBrowser(String userAgent) + { + UserAgent.ImmutableUserAgent iua = userAgentAnalyzer.parse(userAgent); + String agentNameVersion = iua.get(UserAgent.AGENT_NAME_VERSION).getValue(); + if (StringUtils.isBlank(agentNameVersion) || agentNameVersion.contains("??")) + { + return formatBrowser(userAgent); + } + return agentNameVersion; + } + + /** + * 获取客户端操作系统 + */ + public static String getOperatingSystem(String userAgent) + { + UserAgent.ImmutableUserAgent iua = userAgentAnalyzer.parse(userAgent); + String operatingSystemNameVersion = iua.get(UserAgent.OPERATING_SYSTEM_NAME_VERSION).getValue(); + if (StringUtils.isBlank(operatingSystemNameVersion) || operatingSystemNameVersion.contains("??")) + { + return formatOperatingSystem(userAgent); + } + return operatingSystemNameVersion; + } + + /** + * 全面浏览器检测 + */ + private static String formatBrowser(String browser) + { + // Chrome系列浏览器 + Matcher chromeMatcher = CHROME_PATTERN.matcher(browser); + if (chromeMatcher.find() && (browser.contains("Chrome") || browser.contains("CriOS"))) + { + return "Chrome" + chromeMatcher.group(1); + } + // Firefox + Matcher firefoxMatcher = FIREFOX_PATTERN.matcher(browser); + if (firefoxMatcher.find()) + { + return "Firefox" + firefoxMatcher.group(1); + } + // Edge浏览器 + Matcher edgeMatcher = EDGE_PATTERN.matcher(browser); + if (edgeMatcher.find()) + { + return "Edge" + edgeMatcher.group(1); + } + // Safari浏览器(需排除Chrome) + Matcher safariMatcher = SAFARI_PATTERN.matcher(browser); + if (safariMatcher.find() && !browser.contains("Chrome")) + { + return "Safari" + safariMatcher.group(1); + } + // 微信内置浏览器 + Matcher wechatMatcher = WECHAT_PATTERN.matcher(browser); + if (wechatMatcher.find()) + { + return "WeChat" + wechatMatcher.group(1); + } + // UC浏览器 + Matcher ucMatcher = UC_PATTERN.matcher(browser); + if (ucMatcher.find()) + { + return "UC Browser" + ucMatcher.group(1); + } + // QQ浏览器 + Matcher qqMatcher = QQ_PATTERN.matcher(browser); + if (qqMatcher.find()) + { + return "QQ Browser" + qqMatcher.group(1); + } + // 百度浏览器 + Matcher baiduMatcher = BAIDU_PATTERN.matcher(browser); + if (baiduMatcher.find()) + { + return "Baidu Browser" + baiduMatcher.group(1); + } + // Samsung浏览器 + Matcher samsungMatcher = SAMSUNG_PATTERN.matcher(browser); + if (samsungMatcher.find()) + { + return "Samsung Browser" + samsungMatcher.group(1); + } + // Opera浏览器 + Matcher operaMatcher = OPERA_PATTERN.matcher(browser); + if (operaMatcher.find()) + { + return "Opera" + operaMatcher.group(1); + } + // IE浏览器 + Matcher ieMatcher = IE_PATTERN.matcher(browser); + if (ieMatcher.find()) + { + return "Internet Explorer" + ieMatcher.group(1); + } + return UNKNOWN; + } + + /** + * 检测操作系统 + */ + private static String formatOperatingSystem(String operatingSystem) + { + // Windows系统 + Matcher windowsMatcher = WINDOWS_PATTERN.matcher(operatingSystem); + if (windowsMatcher.find()) + { + return "Windows" + getWindowsVersionDisplay(windowsMatcher.group(1)); + } + // macOS系统 + Matcher macMatcher = MACOS_PATTERN.matcher(operatingSystem); + if (macMatcher.find()) + { + String version = macMatcher.group(1).replace("_", "."); + return "macOS" + extractMajorVersion(version); + } + // Android系统 + Matcher androidMatcher = ANDROID_PATTERN.matcher(operatingSystem); + if (androidMatcher.find()) + { + return "Android" + extractMajorVersion(androidMatcher.group(1)); + } + // iOS系统 + Matcher iosMatcher = IOS_PATTERN.matcher(operatingSystem); + if (iosMatcher.find() && (operatingSystem.contains("iPhone") || operatingSystem.contains("iPad"))) + { + return "iOS" + extractMajorVersion(iosMatcher.group(1)); + } + // Linux系统 + if (LINUX_PATTERN.matcher(operatingSystem).find() && !operatingSystem.contains("Android")) + { + return "Linux"; + } + // Chrome OS + if (CHROMEOS_PATTERN.matcher(operatingSystem).find()) + { + return "Chrome OS"; + } + return UNKNOWN; + } + + /** + * 提取优化的主版本号 + */ + private static String extractMajorVersion(String fullVersion) + { + if (StringUtils.isEmpty(fullVersion)) + { + return StringUtils.EMPTY; + } + try + { + // 清理版本号中的非数字字符 + String cleanVersion = fullVersion.replaceAll("[^0-9.]", ""); + String[] parts = cleanVersion.split("\\."); + if (parts.length > 0) + { + String firstPart = parts[0]; + if (firstPart.matches("\\d+")) + { + int version = Integer.parseInt(firstPart); + + // 处理三位数版本号(如142 -> 14) + if (version >= 100) + { + return String.valueOf(version / 10); + } + return firstPart; + } + } + } + catch (NumberFormatException e) + { + // 版本号解析失败,返回原始值 + } + return fullVersion; + } + + /** + * Windows版本号显示优化 + */ + private static String getWindowsVersionDisplay(String version) + { + switch (version) + { + case "10.0": + return "10"; + case "6.3": + return "8.1"; + case "6.2": + return "8"; + case "6.1": + return "7"; + case "6.0": + return "Vista"; + case "5.1": + return "XP"; + case "5.0": + return "2000"; + default: + return extractMajorVersion(version); + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/AddressUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/AddressUtils.java new file mode 100644 index 0000000..4c065fb --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/AddressUtils.java @@ -0,0 +1,57 @@ +package org.lingniu.idp.utils.ip; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import org.lingniu.idp.config.ProjectConfig; +import org.lingniu.idp.constant.Constants; +import org.lingniu.idp.utils.StringUtils; +import org.lingniu.idp.utils.http.HttpUtils; +import org.lingniu.idp.utils.ip.IpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 获取地址类 + * + * @author portal + */ +public class AddressUtils +{ + private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); + + // IP地址查询 + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + // 未知地址 + public static final String UNKNOWN = "XX XX"; + + public static String getRealAddressByIP(String ip) + { + // 内网不查询 + if (IpUtils.internalIp(ip)) + { + return "内网IP"; + } + if (ProjectConfig.isAddressEnabled()) + { + try + { + String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); + if (StringUtils.isEmpty(rspStr)) + { + log.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + JSONObject obj = JSON.parseObject(rspStr); + String region = obj.getString("pro"); + String city = obj.getString("city"); + return String.format("%s %s", region, city); + } + catch (Exception e) + { + log.error("获取地理位置异常 {}", ip); + } + } + return UNKNOWN; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/IpUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/IpUtils.java new file mode 100644 index 0000000..7a32d77 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ip/IpUtils.java @@ -0,0 +1,383 @@ +package org.lingniu.idp.utils.ip; + +import org.lingniu.idp.utils.ServletUtils; +import org.lingniu.idp.utils.StringUtils; + +import jakarta.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * 获取IP方法 + * + * @author portal + */ +public class IpUtils +{ + public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"; + // 匹配 ip + public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")"; + public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))"; + // 匹配网段 + public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")"; + + /** + * 获取客户端IP + * + * @return IP地址 + */ + public static String getIpAddr() + { + return getIpAddr(ServletUtils.getRequest()); + } + + /** + * 获取客户端IP + * + * @param request 请求对象 + * @return IP地址 + */ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param ip IP地址 + * @return 结果 + */ + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param addr byte地址 + * @return 结果 + */ + private static boolean internalIp(byte[] addr) + { + if (StringUtils.isNull(addr) || addr.length < 2) + { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) + { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { + return true; + } + case SECTION_5: + switch (b1) + { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) + { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) + { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) + { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; + } + + /** + * 获取IP地址 + * + * @return 本地IP地址 + */ + public static String getHostIp() + { + try + { + return InetAddress.getLocalHost().getHostAddress(); + } + catch (UnknownHostException e) + { + } + return "127.0.0.1"; + } + + /** + * 获取主机名 + * + * @return 本地主机名 + */ + public static String getHostName() + { + try + { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException e) + { + } + return "未知"; + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp(String ip) + { + // 多级反向代理检测 + if (ip != null && ip.indexOf(",") > 0) + { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) + { + if (false == isUnknown(subIp)) + { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * @return 是否未知 + */ + public static boolean isUnknown(String checkString) + { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 是否为IP + */ + public static boolean isIP(String ip) + { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP); + } + + /** + * 是否为IP,或 *为间隔的通配符地址 + */ + public static boolean isIpWildCard(String ip) + { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD); + } + + /** + * 检测参数是否在ip通配符里 + */ + public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip) + { + String[] s1 = ipWildCard.split("\\."); + String[] s2 = ip.split("\\."); + boolean isMatchedSeg = true; + for (int i = 0; i < s1.length && !s1[i].equals("*"); i++) + { + if (!s1[i].equals(s2[i])) + { + isMatchedSeg = false; + break; + } + } + return isMatchedSeg; + } + + /** + * 是否为特定格式如:“10.10.10.1-10.10.10.99”的ip段字符串 + */ + public static boolean isIPSegment(String ipSeg) + { + return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG); + } + + /** + * 判断ip是否在指定网段中 + */ + public static boolean ipIsInNetNoCheck(String iparea, String ip) + { + int idx = iparea.indexOf('-'); + String[] sips = iparea.substring(0, idx).split("\\."); + String[] sipe = iparea.substring(idx + 1).split("\\."); + String[] sipt = ip.split("\\."); + long ips = 0L, ipe = 0L, ipt = 0L; + for (int i = 0; i < 4; ++i) + { + ips = ips << 8 | Integer.parseInt(sips[i]); + ipe = ipe << 8 | Integer.parseInt(sipe[i]); + ipt = ipt << 8 | Integer.parseInt(sipt[i]); + } + if (ips > ipe) + { + long t = ips; + ips = ipe; + ipe = t; + } + return ips <= ipt && ipt <= ipe; + } + + /** + * 校验ip是否符合过滤串规则 + * + * @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99` + * @param ip 校验IP地址 + * @return boolean 结果 + */ + public static boolean isMatchedIp(String filter, String ip) + { + if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) + { + return false; + } + String[] ips = filter.split(";"); + for (String iStr : ips) + { + if (isIP(iStr) && iStr.equals(ip)) + { + return true; + } + else if (isIpWildCard(iStr) && ipIsInWildCardNoCheck(iStr, ip)) + { + return true; + } + else if (isIPSegment(iStr) && ipIsInNetNoCheck(iStr, ip)) + { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/Jwks.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/Jwks.java new file mode 100644 index 0000000..cc82f34 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/Jwks.java @@ -0,0 +1,83 @@ +package org.lingniu.idp.utils.jwt; + +import com.nimbusds.jose.jwk.RSAKey; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.jwk.KeyUse; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.util.Date; +import java.util.UUID; + +public class Jwks { + + /** + * 从现有的RSA密钥生成JWK + */ + public static RSAKey generateRsa(RSAPublicKey publicKey, RSAPrivateKey privateKey, String keyId) { + RSAKey.Builder builder = new RSAKey.Builder(publicKey) + .keyID(keyId) + .keyUse(KeyUse.SIGNATURE) + .algorithm(JWSAlgorithm.RS256); + + if (privateKey != null) { + builder.privateKey(privateKey); + } + + return builder.build(); + } + + /** + * 仅生成公钥JWK(用于验证端) + */ + public static RSAKey generatePublicJwk(RSAPublicKey publicKey, String keyId) { + return new RSAKey.Builder(publicKey) + .keyID(keyId) + .keyUse(KeyUse.SIGNATURE) + .algorithm(JWSAlgorithm.RS256) + .build(); + } + + /** + * 生成新的RSA密钥对(仅用于开发或测试) + */ + public static RSAKey generateRsa() { + return generateRsa(UUID.randomUUID().toString()); + } + + public static RSAKey generateRsa(String keyId) { + try { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(2048); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + + return new RSAKey.Builder(publicKey) + .privateKey(privateKey) + .keyID(keyId) + .keyUse(KeyUse.SIGNATURE) + .algorithm(JWSAlgorithm.RS256) + .build(); + } catch (Exception e) { + throw new RuntimeException("生成RSA密钥失败", e); + } + } + + /** + * 创建带时间戳的密钥ID + */ + public static String generateKeyIdWithTimestamp(String prefix) { + return prefix + "-" + System.currentTimeMillis(); + } + + /** + * 获取默认密钥ID + */ + public static String getDefaultKeyId() { + return "jwt-key-" + new Date().getTime(); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/JwtUtil.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/JwtUtil.java new file mode 100644 index 0000000..2da36c6 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/JwtUtil.java @@ -0,0 +1,389 @@ +package org.lingniu.idp.utils.jwt; + +import com.nimbusds.jose.*; +import com.nimbusds.jose.crypto.RSASSASigner; +import com.nimbusds.jose.crypto.RSASSAVerifier; +import com.nimbusds.jwt.JWTClaimsSet; +import com.nimbusds.jwt.SignedJWT; +import lombok.Getter; +import org.lingniu.idp.config.JwtProperties; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; +import org.springframework.util.FileCopyUtils; +import org.springframework.util.StringUtils; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.text.ParseException; +import java.util.Base64; +import java.util.Date; +import java.util.Map; +import java.util.UUID; + +@Component +public class JwtUtil { + + @Getter + private final RSAPrivateKey privateKey; + @Getter + private final RSAPublicKey publicKey; + private final JWSHeader header; + private final long expiration; + private final String tokenPrefix; + + // 构造函数 + public JwtUtil(JwtProperties jwtProperties) throws Exception { + this.expiration = jwtProperties.getExpiration().toMillis(); + this.tokenPrefix = jwtProperties.getPrefix(); + + JwtProperties.RsaKey rsaConfig = jwtProperties.getRsa(); + + // 加载或生成密钥 + if (StringUtils.hasText(rsaConfig.getPrivateKey()) && + StringUtils.hasText(rsaConfig.getPublicKey())) { + // 从配置加载密钥 + this.privateKey = loadPrivateKey(rsaConfig.getPrivateKey()); + this.publicKey = loadPublicKey(rsaConfig.getPublicKey()); + } else { + // 自动生成密钥(仅用于开发) + KeyPair keyPair = generateKeyPair(rsaConfig.getKeySize()); + this.privateKey = (RSAPrivateKey) keyPair.getPrivate(); + this.publicKey = (RSAPublicKey) keyPair.getPublic(); + + System.out.println("⚠️ 未配置RSA密钥,已自动生成新的密钥对"); + System.out.println("公钥(保存到配置中):"); + System.out.println(toPemFormat(publicKey)); + System.out.println("\n私钥(保存到配置中):"); + System.out.println(toPemFormat(privateKey)); + } + + // 创建JWT头部 + this.header = new JWSHeader.Builder(JWSAlgorithm.RS256) + .type(JOSEObjectType.JWT) + .keyID("jwt-key-" + System.currentTimeMillis()) + .build(); + } + + /** + * 加载私钥 + */ + private RSAPrivateKey loadPrivateKey(String keyContent) throws Exception { + // 检查是否是文件路径 + if (keyContent.startsWith("classpath:") || keyContent.startsWith("file:")) { + keyContent = loadKeyFromFile(keyContent); + } + + // 清理PEM格式 + String cleanedKey = cleanPemKey(keyContent, "PRIVATE"); + + // Base64解码 + byte[] keyBytes = Base64.getDecoder().decode(cleanedKey); + + // 创建密钥规范 + PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + + return (RSAPrivateKey) keyFactory.generatePrivate(spec); + } + + /** + * 加载公钥 + */ + private RSAPublicKey loadPublicKey(String keyContent) throws Exception { + // 检查是否是文件路径 + if (keyContent.startsWith("classpath:") || keyContent.startsWith("file:")) { + keyContent = loadKeyFromFile(keyContent); + } + + // 清理PEM格式 + String cleanedKey = cleanPemKey(keyContent, "PUBLIC"); + + // Base64解码 + byte[] keyBytes = Base64.getDecoder().decode(cleanedKey); + + // 创建密钥规范 + X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + + return (RSAPublicKey) keyFactory.generatePublic(spec); + } + + /** + * 从文件加载密钥 + */ + private String loadKeyFromFile(String filePath) throws Exception { + Resource resource; + if (filePath.startsWith("classpath:")) { + resource = new ClassPathResource(filePath.substring(10)); + } else if (filePath.startsWith("file:")) { + resource = new FileSystemResource(filePath.substring(5)); + } else { + resource = new ClassPathResource(filePath); + } + + if (!resource.exists()) { + throw new IllegalArgumentException("密钥文件不存在: " + filePath); + } + + byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream()); + return new String(bytes); + } + + /** + * 清理PEM密钥 + */ + private String cleanPemKey(String key, String keyType) { + if (!StringUtils.hasText(key)) { + throw new IllegalArgumentException(keyType + "密钥内容为空"); + } + + // 移除所有空白字符 + key = key.replaceAll("\\s+", ""); + + // 如果没有PEM标记,直接返回 + if (!key.contains("-----BEGIN")) { + return key; + } + + // 提取PEM内容 + String beginMarker = "-----BEGIN" + keyType + "KEY-----"; + String endMarker = "-----END" + keyType + "KEY-----"; + + int beginIndex = key.indexOf(beginMarker); + if (beginIndex == -1) { + beginMarker = "-----BEGIN" + keyType + " KEY-----"; + beginIndex = key.indexOf(beginMarker); + } + + if (beginIndex == -1) { + throw new IllegalArgumentException("无效的PEM格式: 找不到BEGIN标记"); + } + + beginIndex += beginMarker.length(); + int endIndex = key.indexOf(endMarker, beginIndex); + if (endIndex == -1) { + endMarker = "-----END" + keyType + " KEY-----"; + endIndex = key.indexOf(endMarker, beginIndex); + } + + if (endIndex == -1) { + throw new IllegalArgumentException("无效的PEM格式: 找不到END标记"); + } + + return key.substring(beginIndex, endIndex).replaceAll("\\s+", ""); + } + + /** + * 生成密钥对 + */ + private KeyPair generateKeyPair(int keySize) throws Exception { + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(keySize); + return keyGen.generateKeyPair(); + } + + /** + * 创建JWT令牌 + */ + public String createToken(Map claims) { + return createToken(claims, this.expiration); + } + + public String createToken(Map claims, long expirationMs) { + try { + // 构建声明 + JWTClaimsSet.Builder claimsBuilder = new JWTClaimsSet.Builder(); + + // 添加自定义声明 + for (Map.Entry entry : claims.entrySet()) { + claimsBuilder.claim(entry.getKey(), entry.getValue()); + } + + Date now = new Date(); + claimsBuilder + .issueTime(now) + .expirationTime(new Date(now.getTime() + expirationMs)) + .notBeforeTime(now) + .jwtID(UUID.randomUUID().toString()); // 唯一的JWT ID + + JWTClaimsSet claimsSet = claimsBuilder.build(); + + // 创建签名JWT + SignedJWT signedJWT = new SignedJWT(header, claimsSet); + + // 使用RSA私钥进行签名 + JWSSigner signer = new RSASSASigner(this.privateKey); + signedJWT.sign(signer); + + return signedJWT.serialize(); + + } catch (JOSEException e) { + throw new JwtException("创建JWT令牌失败", e); + } + } + + /** + * 解析并验证JWT令牌 + */ + public JWTClaimsSet parseToken(String token) { + try { + // 提取实际令牌(去除Bearer前缀) + String actualToken = extractToken(token); + + // 解析JWT + SignedJWT signedJWT = SignedJWT.parse(actualToken); + + // 使用RSA公钥验证签名 + JWSVerifier verifier = new RSASSAVerifier(this.publicKey); + if (!signedJWT.verify(verifier)) { + throw new JwtException("JWT签名验证失败"); + } + + // 获取声明集 + JWTClaimsSet claims = signedJWT.getJWTClaimsSet(); + + // 验证过期时间 + if (claims.getExpirationTime() != null && + claims.getExpirationTime().before(new Date())) { + throw new JwtException("JWT令牌已过期"); + } + + // 验证生效时间 + if (claims.getNotBeforeTime() != null && + claims.getNotBeforeTime().after(new Date())) { + throw new JwtException("JWT令牌尚未生效"); + } + + return claims; + + } catch (ParseException e) { + throw new JwtException("JWT令牌解析失败", e); + } catch (JOSEException e) { + throw new JwtException("JWT签名验证异常", e); + } + } + + /** + * 提取令牌(去除前缀) + */ + public String extractToken(String authHeader) { + if (authHeader != null && authHeader.startsWith(tokenPrefix)) { + return authHeader.substring(tokenPrefix.length()).trim(); + } + return authHeader; + } + + /** + * 获取Base64编码的公钥 + */ + public String getPublicKeyBase64() { + return Base64.getEncoder().encodeToString(this.publicKey.getEncoded()); + } + + /** + * 获取PEM格式的公钥 + */ + public String toPemFormat(RSAPublicKey publicKey) { + String base64Key = Base64.getEncoder().encodeToString(publicKey.getEncoded()); + return formatAsPem(base64Key, "PUBLIC"); + } + + /** + * 获取PEM格式的私钥 + */ + public String toPemFormat(RSAPrivateKey privateKey) { + String base64Key = Base64.getEncoder().encodeToString(privateKey.getEncoded()); + return formatAsPem(base64Key, "PRIVATE"); + } + + /** + * 格式化PEM + */ + private String formatAsPem(String base64Key, String keyType) { + StringBuilder pem = new StringBuilder(); + pem.append("-----BEGIN ").append(keyType).append(" KEY-----\n"); + + // 每64个字符换行 + for (int i = 0; i < base64Key.length(); i += 64) { + pem.append(base64Key, i, Math.min(base64Key.length(), i + 64)).append("\n"); + } + + pem.append("-----END ").append(keyType).append(" KEY-----\n"); + return pem.toString(); + } + + /** + * 验证令牌是否有效 + */ + public boolean validateToken(String token) { + try { + parseToken(token); + return true; + } catch (JwtException e) { + return false; + } + } + + /** + * 获取令牌中的声明值 + */ + public Object getClaim(String token, String claimName) { + JWTClaimsSet claims = parseToken(token); + return claims.getClaim(claimName); + } + + /** + * 获取令牌中的用户名(假设存储在"username"声明中) + */ + public String getUsername(String token) { + try { + return parseToken(token).getStringClaim("username"); + } catch (ParseException e) { + throw new JwtException("获取用户名失败", e); + } + } + + /** + * 获取令牌过期时间 + */ + public Date getExpiration(String token) { + return parseToken(token).getExpirationTime(); + } + + /** + * 获取令牌签发时间 + */ + public Date getIssuedAt(String token) { + return parseToken(token).getIssueTime(); + } + + /** + * 获取JWT头部信息 + */ + public JWSHeader getHeader(String token) { + try { + return SignedJWT.parse(extractToken(token)).getHeader(); + } catch (ParseException e) { + throw new JwtException("获取JWT头部失败", e); + } + } + + /** + * 自定义异常类 + */ + public static class JwtException extends RuntimeException { + public JwtException(String message) { + super(message); + } + public JwtException(String message, Throwable cause) { + super(message, cause); + } + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/RsaKeyGenerator.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/RsaKeyGenerator.java new file mode 100644 index 0000000..bc7fa24 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/jwt/RsaKeyGenerator.java @@ -0,0 +1,31 @@ +package org.lingniu.idp.utils.jwt; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.Base64; + +public class RsaKeyGenerator { + public static void main(String[] args) throws Exception { + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(2048); // 密钥长度 + KeyPair keyPair = keyGen.generateKeyPair(); + + PrivateKey privateKey = keyPair.getPrivate(); + PublicKey publicKey = keyPair.getPublic(); + + // 输出Base64编码的密钥 + System.out.println("=== 私钥(用于签名) ==="); + System.out.println(Base64.getEncoder().encodeToString(privateKey.getEncoded())); + + System.out.println("\n=== 公钥(用于验证) ==="); + System.out.println(Base64.getEncoder().encodeToString(publicKey.getEncoded())); + + // 也可以输出PEM格式 + System.out.println("\n=== PEM格式私钥 ==="); + System.out.println("-----BEGIN PRIVATE KEY-----"); + System.out.println(Base64.getEncoder().encodeToString(privateKey.getEncoded())); + System.out.println("-----END PRIVATE KEY-----"); + } +} \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Base64.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Base64.java new file mode 100644 index 0000000..911378f --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Base64.java @@ -0,0 +1,291 @@ +package org.lingniu.idp.utils.sign; + +/** + * Base64工具类 + * + * @author portal + */ +public final class Base64 +{ + static private final int BASELENGTH = 128; + static private final int LOOKUPLENGTH = 64; + static private final int TWENTYFOURBITGROUP = 24; + static private final int EIGHTBIT = 8; + static private final int SIXTEENBIT = 16; + static private final int FOURBYTE = 4; + static private final int SIGN = -128; + static private final char PAD = '='; + static final private byte[] base64Alphabet = new byte[BASELENGTH]; + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + + static + { + for (int i = 0; i < BASELENGTH; ++i) + { + base64Alphabet[i] = -1; + } + for (int i = 'Z'; i >= 'A'; i--) + { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z'; i >= 'a'; i--) + { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + + for (int i = '9'; i >= '0'; i--) + { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0; i <= 25; i++) + { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + + for (int i = 26, j = 0; i <= 51; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + + for (int i = 52, j = 0; i <= 61; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace(char octect) + { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) + { + return (octect == PAD); + } + + private static boolean isData(char octect) + { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * @return Encoded Base64 array + */ + public static String encode(byte[] binaryData) + { + if (binaryData == null) + { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) + { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + + encodedData = new char[numberQuartet * 4]; + + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0; i < numberTriplets; i++) + { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) + { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } + else if (fewerThan24bits == SIXTEENBIT) + { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * @return Array containind decoded data. + */ + public static byte[] decode(String encoded) + { + if (encoded == null) + { + return null; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) + { + return null;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) + { + return new byte[0]; + } + + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + + for (; i < numberQuadruple - 1; i++) + { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) + { + return null; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) + { + return null;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) + {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) + { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } + else if (!isPad(d3) && isPad(d4)) + { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } + else + { + return null; + } + } + else + { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) + { + if (data == null) + { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) + { + if (!isWhiteSpace(data[i])) + { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Md5Utils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Md5Utils.java new file mode 100644 index 0000000..430c9e7 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/sign/Md5Utils.java @@ -0,0 +1,68 @@ +package org.lingniu.idp.utils.sign; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +/** + * Md5加密方法 + * + * @author portal + */ +public class Md5Utils +{ + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes("UTF-8")); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte hash[]) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } + catch (Exception e) + { + log.error("not supported charset...{}", e); + return s; + } + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/spring/SpringUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/spring/SpringUtils.java new file mode 100644 index 0000000..48b871a --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/spring/SpringUtils.java @@ -0,0 +1,164 @@ +package org.lingniu.idp.utils.spring; + +import org.lingniu.idp.utils.StringUtils; +import org.springframework.aop.framework.Advised; +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author portal + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware +{ + /** Spring应用上下文环境 */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException + { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException + { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws BeansException + * + */ + public static T getBean(Class clz) throws BeansException + { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) + { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) + { + Object proxy = AopContext.currentProxy(); + if (((Advised) proxy).getTargetSource().getTargetClass() == invoker.getClass()) + { + return (T) proxy; + } + return invoker; + } + + /** + * 获取当前的环境配置,无配置返回null + * + * @return 当前的环境配置 + */ + public static String[] getActiveProfiles() + { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 获取当前的环境配置,当有多个环境配置时,只获取第一个 + * + * @return 当前的环境配置 + */ + public static String getActiveProfile() + { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } + + /** + * 获取配置文件中的值 + * + * @param key 配置文件的key + * @return 当前的配置文件的值 + * + */ + public static String getRequiredProperty(String key) + { + return applicationContext.getEnvironment().getRequiredProperty(key); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/CharsetKit.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/CharsetKit.java new file mode 100644 index 0000000..a1281e6 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/CharsetKit.java @@ -0,0 +1,87 @@ +package org.lingniu.idp.utils.text; + +import org.lingniu.idp.utils.StringUtils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * 字符集工具类 + * + * @author portal + */ +public class CharsetKit +{ + /** ISO-8859-1 */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** UTF-8 */ + public static final String UTF_8 = "UTF-8"; + /** GBK */ + public static final String GBK = "GBK"; + + /** ISO-8859-1 */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** UTF-8 */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** GBK */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * @return Charset + */ + public static Charset charset(String charset) + { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, String srcCharset, String destCharset) + { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) + { + if (null == srcCharset) + { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) + { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) + { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset() + { + return Charset.defaultCharset().name(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/Convert.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/Convert.java new file mode 100644 index 0000000..fc710be --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/Convert.java @@ -0,0 +1,1020 @@ +package org.lingniu.idp.utils.text; + +import org.lingniu.idp.utils.text.CharsetKit; +import org.lingniu.idp.utils.StringUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; + +/** + * 类型转换器 + * + * @author portal + */ +public class Convert +{ + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) + { + if (StringUtils.isEmpty(str)) + { + return new String[] {}; + } + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no、1、0、是、否, 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + case "true": + case "yes": + case "ok": + case "1": + case "是": + return true; + case "false": + case "no": + case "0": + case "否": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) + { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[] || obj instanceof Byte[]) + { + if (obj instanceof byte[]) + { + return str((byte[]) obj, charset); + } + else + { + Byte[] bytes = (Byte[]) obj; + int length = bytes.length; + byte[] dest = new byte[length]; + for (int i = 0; i < length; i++) + { + dest[i] = bytes[i]; + } + return str(dest, charset); + } + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) + { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) + { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + return new String(c); + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "角", "分" }; + String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) + { + // 优化double计算精度丢失问题 + BigDecimal nNum = new BigDecimal(n); + BigDecimal decimal = new BigDecimal(10); + BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN); + double d = scale.doubleValue(); + s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) + { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/StrFormatter.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/StrFormatter.java new file mode 100644 index 0000000..817c7b2 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/text/StrFormatter.java @@ -0,0 +1,92 @@ +package org.lingniu.idp.utils.text; + +import org.lingniu.idp.utils.StringUtils; + +/** + * 字符串格式化 + * + * @author portal + */ +public class StrFormatter +{ + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * @return 结果 + */ + public static String format(final String strPattern, final Object... argArray) + { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) + { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) + { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) + { + if (handledPosition == 0) + { + return strPattern; + } + else + { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } + else + { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) + { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) + { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + else + { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } + else + { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/IdUtils.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/IdUtils.java new file mode 100644 index 0000000..90af149 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/IdUtils.java @@ -0,0 +1,49 @@ +package org.lingniu.idp.utils.uuid; + +/** + * ID生成器工具类 + * + * @author portal + */ +public class IdUtils +{ + /** + * 获取随机UUID + * + * @return 随机UUID + */ + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线 + * + * @return 简化的UUID,去掉了横线 + */ + public static String simpleUUID() + { + return UUID.randomUUID().toString(true); + } + + /** + * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 随机UUID + */ + public static String fastUUID() + { + return UUID.fastUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 简化的UUID,去掉了横线 + */ + public static String fastSimpleUUID() + { + return UUID.fastUUID().toString(true); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/Seq.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/Seq.java new file mode 100644 index 0000000..21ff833 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/Seq.java @@ -0,0 +1,87 @@ +package org.lingniu.idp.utils.uuid; + +import org.lingniu.idp.utils.DateUtils; +import org.lingniu.idp.utils.StringUtils; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author portal 序列生成类 + */ +public class Seq +{ + // 通用序列类型 + public static final String commSeqType = "COMMON"; + + // 上传序列类型 + public static final String uploadSeqType = "UPLOAD"; + + // 通用接口序列数 + private static AtomicInteger commSeq = new AtomicInteger(1); + + // 上传接口序列数 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + // 机器标识 + private static final String machineCode = "A"; + + /** + * 获取通用序列号 + * + * @return 序列值 + */ + public static String getId() + { + return getId(commSeqType); + } + + /** + * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串 + * + * @return 序列值 + */ + public static String getId(String type) + { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) + { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串 + * + * @param atomicInt 序列数 + * @param length 数值长度 + * @return 序列值 + */ + public static String getId(AtomicInteger atomicInt, int length) + { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数 + * + * @return 序列值 + */ + private synchronized static String getSeq(AtomicInteger atomicInt, int length) + { + // 先取值再+1 + int value = atomicInt.getAndIncrement(); + + // 如果更新后值>=10 的 (length)幂次方则重置为1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) + { + atomicInt.set(1); + } + // 转字符串,用0左补齐 + return StringUtils.padl(value, length); + } +} diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/UUID.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/UUID.java new file mode 100644 index 0000000..f63e6e0 --- /dev/null +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/uuid/UUID.java @@ -0,0 +1,485 @@ +package org.lingniu.idp.utils.uuid; + +import org.lingniu.idp.exception.UtilException; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 提供通用唯一识别码(universally unique identifier)(UUID)实现 + * + * @author portal + */ +public final class UUID implements java.io.Serializable, Comparable +{ + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 的单例 + * + */ + private static class Holder + { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** 此UUID的最高64有效位 */ + private final long mostSigBits; + + /** 此UUID的最低64有效位 */ + private final long leastSigBits; + + /** + * 私有构造 + * + * @param data 数据 + */ + private UUID(byte[] data) + { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0; i < 8; i++) + { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8; i < 16; i++) + { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 使用指定的数据构造新的 UUID。 + * + * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位 + * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位 + */ + public UUID(long mostSigBits, long leastSigBits) + { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID fastUUID() + { + return randomUUID(false); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID() + { + return randomUUID(true); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能 + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) + { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。 + * + * @param name 用于构造 UUID 的字节数组。 + * + * @return 根据指定数组生成的 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 根据 {@link #toString()} 方法中描述的字符串标准表示形式创建{@code UUID}。 + * + * @param name 指定 {@code UUID} 字符串 + * @return 具有指定值的 {@code UUID} + * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常 + * + */ + public static UUID fromString(String name) + { + String[] components = name.split("-"); + if (components.length != 5) + { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < 5; i++) + { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 返回此 UUID 的 128 位值中的最低有效 64 位。 + * + * @return 此 UUID 的 128 位值中的最低有效 64 位。 + */ + public long getLeastSignificantBits() + { + return leastSigBits; + } + + /** + * 返回此 UUID 的 128 位值中的最高有效 64 位。 + * + * @return 此 UUID 的 128 位值中最高有效 64 位。 + */ + public long getMostSignificantBits() + { + return mostSigBits; + } + + /** + * 与此 {@code UUID} 相关联的版本号. 版本号描述此 {@code UUID} 是如何生成的。 + *

+ * 版本号具有以下含意: + *

    + *
  • 1 基于时间的 UUID + *
  • 2 DCE 安全 UUID + *
  • 3 基于名称的 UUID + *
  • 4 随机生成的 UUID + *
+ * + * @return 此 {@code UUID} 的版本号 + */ + public int version() + { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 与此 {@code UUID} 相关联的变体号。变体号描述 {@code UUID} 的布局。 + *

+ * 变体号具有以下含意: + *

    + *
  • 0 为 NCS 向后兼容保留 + *
  • 2 IETF RFC 4122(Leach-Salz), 用于此类 + *
  • 6 保留,微软向后兼容 + *
  • 7 保留供以后定义使用 + *
+ * + * @return 此 {@code UUID} 相关联的变体号 + */ + public int variant() + { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 与此 UUID 相关联的时间戳值。 + * + *

+ * 60 位的时间戳值根据此 {@code UUID} 的 time_low、time_mid 和 time_hi 字段构造。
+ * 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 + * + *

+ * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 + */ + public long timestamp() throws UnsupportedOperationException + { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 与此 UUID 相关联的时钟序列值。 + * + *

+ * 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。 + *

+ * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 + * UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的时钟序列 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public int clockSequence() throws UnsupportedOperationException + { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 与此 UUID 相关的节点值。 + * + *

+ * 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 + *

+ * 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的节点值 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public long node() throws UnsupportedOperationException + { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 此{@code UUID} 的字符串表现形式 + * @see #toString(boolean) + */ + @Override + public String toString() + { + return toString(false); + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 + * @return 此{@code UUID} 的字符串表现形式 + */ + public String toString(boolean isSimple) + { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (!isSimple) + { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (!isSimple) + { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (!isSimple) + { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (!isSimple) + { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 返回此 UUID 的哈希码。 + * + * @return UUID 的哈希码值。 + */ + @Override + public int hashCode() + { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 将此对象与指定对象比较。 + *

+ * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 + * + * @param obj 要与之比较的对象 + * + * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} + */ + @Override + public boolean equals(Object obj) + { + if ((null == obj) || (obj.getClass() != UUID.class)) + { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 将此 UUID 与指定的 UUID 比较。 + * + *

+ * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 + * + * @param val 与此 UUID 比较的 UUID + * + * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 + * + */ + @Override + public int compareTo(UUID val) + { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + /** + * 返回指定数字对应的hex值 + * + * @param val 值 + * @param digits 位 + * @return 值 + */ + private static String digits(long val, int digits) + { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 检查是否为time-based版本UUID + */ + private void checkTimeBase() + { + if (version() != 1) + { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 获取{@link SecureRandom},类提供加密的强随机数生成器 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() + { + try + { + return SecureRandom.getInstance("SHA1PRNG"); + } + catch (NoSuchAlgorithmException e) + { + throw new UtilException(e); + } + } + + /** + * 获取随机数生成器对象
+ * ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() + { + return ThreadLocalRandom.current(); + } +} diff --git a/idp/backend/idp-starter/src/main/resources/application.yml b/idp/backend/idp-starter/src/main/resources/application.yml new file mode 100644 index 0000000..9dfbb14 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/application.yml @@ -0,0 +1,115 @@ +# 项目相关配置 +project: + # 名称 + name: idp + # 版本 + version: 1.0.0 + # 版权年份 + copyrightYear: 2026 + # 文件路径 示例( Windows配置D:/portal/uploadPath,Linux配置 /home/portal/uploadPath) + profile: D:/portal/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数字计算 char 字符验证 + captchaType: math +server: + port: 8443 + ssl: + bundle: demo-authorizationserver + client-auth: want + +spring: + profiles: + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + datasource: + url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false + username: root + password: Zhang!@# + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + # 连接池名称 + pool-name: MyHikariCP + # 最大连接数,默认为10 + maximum-pool-size: 10 + # 最小空闲连接数 + minimum-idle: 5 + # 连接空闲超时时间(毫秒),默认10分钟 + idle-timeout: 600000 + # 连接最大生命周期(毫秒),默认30分钟 + max-lifetime: 1800000 + # 连接超时时间(毫秒),默认30秒 + connection-timeout: 30000 + # 自动提交事务,默认为true + auto-commit: true + ssl: + bundle: + jks: + demo-authorizationserver: + key: + alias: demo-authorizationserver-sample + password: password + keystore: + location: classpath:keystore.p12 + password: password + type: PKCS12 + truststore: + location: classpath:keystore.p12 + password: password + type: PKCS12 + +# MyBatis Plus配置 +mybatis-plus: + mapper-locations: classpath:mapper/**/*.xml + type-aliases-package: org.lingniu.idp.model.** + configuration: + map-underscore-to-camel-case: true + +logging: + level: + root: info + org.springframework.web: info + org.springframework.security: debug + org.springframework.security.oauth2: debug +# token配置 +token: +# 令牌自定义标识 + header: Idp +# 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + accessToken: + # access token令牌有效期(默认30分钟)单位分钟 + expireTime: 30 + # refresh token 令牌有效期(默认7天)单位小时 + refreshToken: + expireTime: 168 + + # 令牌有效期(默认30分钟) + expireTime: 30 +# 用户配置 +user: + password: + # 密码最大错误次数 + maxRetryCount: 5 + # 密码锁定时间(默认10分钟) + lockTime: 10 +idp: + jwt: + header: Authorization + prefix: "Bearer " + expiration: 1h + refresh-expiration: 7d + rsa: + algorithm: RSA + key-size: 2048 + # 方式1:直接配置密钥内容(适合短的密钥或环境变量) + private-key: | + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8ILlN6oQR49OQNAx2CmTTvf+NfpniKrrrOSZuOzHDe6BYxehN2wLeUZ9tBCgxBBy7C31qfzNtEByqX3c0wAIgwCfoUA334hjKZTIcBZchhlU8rCUKjwp9Xlo9LltL0fD+bn29N85QxrclFfiW656hXFjl7/E6/CjkJiLcMcqPl9sBnr3eosIFBa2ncEjLgSuoc+62UmuZK8qG5uyujUEK4ih1GMgLFETsY+gfCrEMhpyHATeA6hdsQzH0hQdFMnzUyAQNLid6yTg+vWiuSqaRHXLVoOQ1Id7g9qLS6z5Xq2QgvxhEijyU6dfr3FN2fMs81d2QnelB+XAmbZcNbSjhAgMBAAECggEAA6mvcfDq+V4yNFCPHY0+QVEltJ+OZ3TlhsbqFKNaaK/zg0b3KuzktWdpbznxfmLSHGIw4u3vFmSF6ltJeuFyKSkUndVRME5apTYrL5h8RM7UwgWoAvid/6rinuZUKLnBs3J7SD/Z6IC1+CbhXC7iO8oMgQ2W6MsYELkdXKQriXgm3XtF7fQdZwFw5Rernl0yl5m5hDBnrWbO7e0+9FBTqGyD/qV9OyYBMoRi7K7ZUdJU+y/oNDg6VluuSVO6DifE6eh02jxaKhaFsyl57q9fzofJb/ZA46+eRknI+bU9sSq4gwVMFzB2N16R0kxpOBZYQoi+KgBzjhjZ1ETC8lSpQQKBgQDLckJfdHg/RK8z75JIdM15/KnaQJNyFnlmRIbD4qAeknSYBOYqeanErFBdsXqXcMjn1bXZdwe1ykFwt0PTBB0zOlB8l8lvk1sv4PJu0YrRFyuoRrL+Iw9pDg1Q5AHMewAoOTLstm0T8u8uIuCc7LNqH2b525rk3lwuvwgMUcz+jQKBgQDsuXb4QAaG8LhmwJTUmFgEK1MVrlas6OtNpD8Ua8UD0xOZbxj1t0mHXkD+k7o7Ld4L3HOdaUvMpmrBCX2EIJ3mjvT4EnF6bIIjUFDGeCx5m7s6KEUzhlV6QaVBLqr4M0HEyLB2FztfPLSbKnD52VKJ3dV4bELnykD7XHG8q6d4pQKBgQCD1VK1UF/rf7KY0RHV6fqMpfHbACWLtIyOfLFnlh90MCtlpycPNy+Pxql9TVjHccp+kLn6ZWuVna6yP8+vmebiH1OwqRtbNf3NFNOEhDyUKZOcw9ORY17FENoIJPgVbU84wXgCdGRSnQXou6kZhzjr99Ve67N/w6ewkxHACfHwsQKBgHuXOO3TP5UkCKJc2VdFUm6az/35z3bnBDK9FdHrkii1Av6Qak+fKdxq8TP4nLpY8BzxM8tzNgfautGdytI41TeSW4NI3cY08JzPSdzU0SOMkuuCKt8Du4zgyQ6G9uwulp/Ox5Jf/rdyUjjQp7tKIzWng9QjcarihZq2YQtH81+hAoGADWhSLTU9Dt9XM82Yc0WC4Rl0EwPV+mH32CDKC8xIVMTGodc0JyKIyoykpml2U827PIHhxms4CoXTzxcBaxt3dAfezqvmSzrMW2LA3Xi7pIGJqNtk16wb38XrLqxZZGYA1DWUqMvp/GniM7qTSF7aHzjHzX4ZXL6jmi3tqJtivfw= + -----END PRIVATE KEY----- + public-key: | + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvCC5TeqEEePTkDQMdgpk073/jX6Z4iq66zkmbjsxw3ugWMXoTdsC3lGfbQQoMQQcuwt9an8zbRAcql93NMACIMAn6FAN9+IYymUyHAWXIYZVPKwlCo8KfV5aPS5bS9Hw/m59vTfOUMa3JRX4luueoVxY5e/xOvwo5CYi3DHKj5fbAZ693qLCBQWtp3BIy4ErqHPutlJrmSvKhubsro1BCuIodRjICxRE7GPoHwqxDIachwE3gOoXbEMx9IUHRTJ81MgEDS4nesk4Pr1orkqmkR1y1aDkNSHe4Pai0us+V6tkIL8YRIo8lOnX69xTdnzLPNXdkJ3pQflwJm2XDW0o4QIDAQAB + -----END PUBLIC KEY----- \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/auth.sql b/idp/backend/idp-starter/src/main/resources/auth.sql new file mode 100644 index 0000000..b482a46 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/auth.sql @@ -0,0 +1,54 @@ +CREATE TABLE oauth2_authorization ( + id varchar(100) NOT NULL COMMENT '授权记录的唯一标识符', + registered_client_id varchar(100) NOT NULL COMMENT '注册客户端的ID,关联到客户端注册表', + principal_name varchar(200) NOT NULL COMMENT '授权主体的名称(通常是用户ID或用户名)', + authorization_grant_type varchar(100) NOT NULL COMMENT '授权类型(如:authorization_code, client_credentials, refresh_token等)', + authorized_scopes varchar(1000) DEFAULT NULL COMMENT '已授权的范围(用空格分隔的scope列表)', + attributes blob DEFAULT NULL COMMENT '附加属性,以二进制格式存储', + state varchar(500) DEFAULT NULL COMMENT 'OAuth2状态参数,用于防止CSRF攻击', + authorization_code_value blob DEFAULT NULL COMMENT '授权码的值(加密存储)', + authorization_code_issued_at timestamp NULL DEFAULT NULL COMMENT '授权码的颁发时间', + authorization_code_expires_at timestamp NULL DEFAULT NULL COMMENT '授权码的过期时间', + authorization_code_metadata blob DEFAULT NULL COMMENT '授权码的元数据', + access_token_value blob DEFAULT NULL COMMENT '访问令牌的值(加密存储)', + access_token_issued_at timestamp NULL DEFAULT NULL COMMENT '访问令牌的颁发时间', + access_token_expires_at timestamp NULL DEFAULT NULL COMMENT '访问令牌的过期时间', + access_token_metadata blob DEFAULT NULL COMMENT '访问令牌的元数据', + access_token_type varchar(100) DEFAULT NULL COMMENT '访问令牌类型(如:Bearer)', + access_token_scopes varchar(1000) DEFAULT NULL COMMENT '访问令牌的有效范围', + oidc_id_token_value blob DEFAULT NULL COMMENT 'OIDC ID令牌的值(加密存储)', + oidc_id_token_issued_at timestamp NULL DEFAULT NULL COMMENT 'OIDC ID令牌的颁发时间', + oidc_id_token_expires_at timestamp NULL DEFAULT NULL COMMENT 'OIDC ID令牌的过期时间', + oidc_id_token_metadata blob DEFAULT NULL COMMENT 'OIDC ID令牌的元数据', + refresh_token_value blob DEFAULT NULL COMMENT '刷新令牌的值(加密存储)', + refresh_token_issued_at timestamp NULL DEFAULT NULL COMMENT '刷新令牌的颁发时间', + refresh_token_expires_at timestamp NULL DEFAULT NULL COMMENT '刷新令牌的过期时间', + refresh_token_metadata blob DEFAULT NULL COMMENT '刷新令牌的元数据', + user_code_value blob DEFAULT NULL COMMENT '设备流用户码的值(加密存储)', + user_code_issued_at timestamp NULL DEFAULT NULL COMMENT '设备流用户码的颁发时间', + user_code_expires_at timestamp NULL DEFAULT NULL COMMENT '设备流用户码的过期时间', + user_code_metadata blob DEFAULT NULL COMMENT '设备流用户码的元数据', + device_code_value blob DEFAULT NULL COMMENT '设备流设备码的值(加密存储)', + device_code_issued_at timestamp NULL DEFAULT NULL COMMENT '设备流设备码的颁发时间', + device_code_expires_at timestamp NULL DEFAULT NULL COMMENT '设备流设备码的过期时间', + device_code_metadata blob DEFAULT NULL COMMENT '设备流设备码的元数据', + PRIMARY KEY (id) +) COMMENT='OAuth2 授权表,存储所有OAuth2和OpenID Connect的授权信息'; + +CREATE INDEX idx_registered_client_id ON oauth2_authorization(registered_client_id); +CREATE INDEX idx_principal_name ON oauth2_authorization(principal_name); +CREATE INDEX idx_state ON oauth2_authorization(state); +CREATE INDEX idx_access_token_expires_at ON oauth2_authorization(access_token_expires_at); +CREATE INDEX idx_refresh_token_expires_at ON oauth2_authorization(refresh_token_expires_at); +CREATE INDEX idx_authorization_code_expires_at ON oauth2_authorization(authorization_code_expires_at); + + +CREATE TABLE oauth2_authorization_consent ( + registered_client_id varchar(100) NOT NULL COMMENT '注册客户端的ID,关联到客户端注册表', + principal_name varchar(200) NOT NULL COMMENT '授权主体的名称(通常是用户ID或用户名)', + authorities varchar(1000) NOT NULL COMMENT '已授予的权限列表(逗号分隔的权限字符串)', + PRIMARY KEY (registered_client_id, principal_name) +) COMMENT='OAuth2授权同意表,存储用户对客户端的授权同意记录'; + +CREATE INDEX idx_oauth2_authorization_consent_principal_name ON oauth2_authorization_consent(principal_name); +CREATE INDEX idx_oauth2_authorization_consent_client_id ON oauth2_authorization_consent(registered_client_id); \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/i18n/messages.properties b/idp/backend/idp-starter/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..93de005 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/i18n/messages.properties @@ -0,0 +1,38 @@ +#错误消息 +not.null=* 必须填写 +user.jcaptcha.error=验证码错误 +user.jcaptcha.expire=验证码已失效 +user.not.exists=用户不存在/密码错误 +user.password.not.match=用户不存在/密码错误 +user.password.retry.limit.count=密码输入错误{0}次 +user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟 +user.password.delete=对不起,您的账号已被删除 +user.blocked=用户已封禁,请联系管理员 +role.blocked=角色已封禁,请联系管理员 +login.blocked=很遗憾,访问IP已被列入系统黑名单 +user.logout.success=退出成功 + +length.not.valid=长度必须在{min}到{max}个字符之间 + +user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 +user.password.not.valid=* 5-50个字符 + +user.email.not.valid=邮箱格式错误 +user.mobile.phone.number.not.valid=手机号格式错误 +user.login.success=登录成功 +user.register.success=注册成功 +user.notfound=请重新登录 +user.forcelogout=管理员强制退出,请重新登录 +user.unknown.error=未知错误,请重新登录 + +##文件上传消息 +upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB! +upload.filename.exceed.length=上传的文件名最长{0}个字符 + +##权限 +no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] +no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] +no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] +no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] +no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] +no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] diff --git a/idp/backend/idp-starter/src/main/resources/keystore.p12 b/idp/backend/idp-starter/src/main/resources/keystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..ec191faf046f162df973a95f521873c907437f82 GIT binary patch literal 6047 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 W!>MZ>bGBrR_xk}A4JF}kss8|qI$M1J literal 0 HcmV?d00001 diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysConfigMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysConfigMapper.xml new file mode 100644 index 0000000..2fe7764 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysConfigMapper.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark + from sys_config + + + + + + + and config_id = #{configId} + + + and config_key = #{configKey} + + + + + + + + + + + + + + insert into sys_config ( + config_name, + config_key, + config_value, + config_type, + create_by, + remark, + create_time + )values( + #{configName}, + #{configKey}, + #{configValue}, + #{configType}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_config + + config_name = #{configName}, + config_key = #{configKey}, + config_value = #{configValue}, + config_type = #{configType}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where config_id = #{configId} + + + + delete from sys_config where config_id = #{configId} + + + + delete from sys_config where config_id in + + #{configId} + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysDeptMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysDeptMapper.xml new file mode 100644 index 0000000..a3e0266 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysDeptMapper.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, + email, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{orderNum}, + #{leader}, + #{phone}, + #{email}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + order_num = #{orderNum}, + leader = #{leader}, + phone = #{phone}, + email = #{email}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept set del_flag = '2' where dept_id = #{deptId} + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysLogininforMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysLogininforMapper.xml new file mode 100644 index 0000000..a4db19e --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysLogininforMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysMenuMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysMenuMapper.xml new file mode 100644 index 0000000..e339964 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysMenuMapper.xml @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, menu_name, parent_id, order_num, path, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + route_name = #{routeName}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + route_name, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{routeName}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_menu where menu_id = #{menuId} + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysOperLogMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysOperLogMapper.xml new file mode 100644 index 0000000..9c4a355 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysOperLogMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysPostMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysPostMapper.xml new file mode 100644 index 0000000..ec67ec1 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysPostMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark + from sys_post + + + + + + + + + + + + + + + + + + update sys_post + + post_code = #{postCode}, + post_name = #{postName}, + post_sort = #{postSort}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where post_id = #{postId} + + + + insert into sys_post( + post_id, + post_code, + post_name, + post_sort, + status, + remark, + create_by, + create_time + )values( + #{postId}, + #{postCode}, + #{postName}, + #{postSort}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_post where post_id = #{postId} + + + + delete from sys_post where post_id in + + #{postId} + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysRoleDeptMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysRoleDeptMapper.xml new file mode 100644 index 0000000..f0ce5f0 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysRoleDeptMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_role_dept where role_id=#{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysRoleMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..2c4c854 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, + r.status, r.del_flag, r.create_time, r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id in + + #{roleId} + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysRoleMenuMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysRoleMenuMapper.xml new file mode 100644 index 0000000..45abc03 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysRoleMenuMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + delete from sys_role_menu where role_id=#{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysUserMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysUserMapper.xml new file mode 100644 index 0000000..ad2339e --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysUserMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, + p.post_id,p.post_code,p.post_name,p.post_sort,p.remark,p.`status` + from sys_user u + left join sys_user_dept sud on sud.user_id = u.user_id + left join sys_dept d on sud.dept_id = d.dept_id + left join sys_user_post sup on sup.user_id= u.user_id + left join sys_post p on p.post_id = sup.post_id + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + pwd_update_date, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{pwdUpdateDate}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user set status = #{status}, update_time = sysdate() where user_id = #{userId} + + + + update sys_user set avatar = #{avatar}, update_time = sysdate() where user_id = #{userId} + + + + update sys_user set login_ip = #{loginIp}, login_date = #{loginDate} where user_id = #{userId} + + + + update sys_user set pwd_update_date = sysdate(), password = #{password}, update_time = sysdate() where user_id = #{userId} + + + + update sys_user set del_flag = '2' where user_id = #{userId} + + + + update sys_user set del_flag = '2' where user_id in + + #{userId} + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysUserPostMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysUserPostMapper.xml new file mode 100644 index 0000000..101910d --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysUserPostMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_user_post where user_id=#{userId} + + + + + + delete from sys_user_post where user_id in + + #{userId} + + + + + insert into sys_user_post(user_id, post_id) values + + (#{item.userId},#{item.postId}) + + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/resources/mapper/SysUserRoleMapper.xml b/idp/backend/idp-starter/src/main/resources/mapper/SysUserRoleMapper.xml new file mode 100644 index 0000000..c80a479 --- /dev/null +++ b/idp/backend/idp-starter/src/main/resources/mapper/SysUserRoleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + delete from sys_user_role where user_id=#{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + \ No newline at end of file diff --git a/idp/backend/idp-starter/src/test/java/org/lingniu/idp/IdpStarterApplicationTests.java b/idp/backend/idp-starter/src/test/java/org/lingniu/idp/IdpStarterApplicationTests.java new file mode 100644 index 0000000..16b2df2 --- /dev/null +++ b/idp/backend/idp-starter/src/test/java/org/lingniu/idp/IdpStarterApplicationTests.java @@ -0,0 +1,13 @@ +package org.lingniu.idp; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class IdpStarterApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/idp/frontend/.env.development b/idp/frontend/.env.development new file mode 100644 index 0000000..130999b --- /dev/null +++ b/idp/frontend/.env.development @@ -0,0 +1,10 @@ +# 页面标题 +VITE_APP_TITLE = IDP统一登录系统 + +# 开发环境配置 +VITE_APP_ENV = 'development' + +# 开发环境 +VITE_APP_BASE_API = '/dev-api' + +VITE_APP_DEFAULT_PAGE='' diff --git a/idp/frontend/.env.production b/idp/frontend/.env.production new file mode 100644 index 0000000..417f85c --- /dev/null +++ b/idp/frontend/.env.production @@ -0,0 +1,13 @@ +# 页面标题 +VITE_APP_TITLE = IDP统一登录系统 + +# 生产环境配置 +VITE_APP_ENV = 'production' + +# 生产环境 +VITE_APP_BASE_API = '/prod-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +VITE_APP_DEFAULT_PAGE='' \ No newline at end of file diff --git a/idp/frontend/.env.staging b/idp/frontend/.env.staging new file mode 100644 index 0000000..cdc6bff --- /dev/null +++ b/idp/frontend/.env.staging @@ -0,0 +1,13 @@ +# 页面标题 +VITE_APP_TITLE = IDP统一登录系统 + +# 生产环境配置 +VITE_APP_ENV = 'staging' + +# 生产环境 +VITE_APP_BASE_API = '/stage-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +VITE_APP_DEFAULT_PAGE='' \ No newline at end of file diff --git a/idp/frontend/crypto-js.d.ts b/idp/frontend/crypto-js.d.ts new file mode 100644 index 0000000..bca7d6c --- /dev/null +++ b/idp/frontend/crypto-js.d.ts @@ -0,0 +1,26 @@ +declare module 'crypto-js' { + export const MD5: (message: string) => string; + export const SHA256: (message: string) => string; + export const AES: { + encrypt: (message: string, key: string) => { + toString: () => string; + }; + decrypt: (ciphertext: string, key: string) => { + toString: (encoding: 'utf8') => string; + }; + }; + export const enc: { + Utf8: { + parse: (str: string) => any; + stringify: (wordArray: any) => string; + }; + Hex: { + parse: (str: string) => any; + stringify: (wordArray: any) => string; + }; + Base64: { + parse: (str: string) => any; + stringify: (wordArray: any) => string; + }; + }; +} \ No newline at end of file diff --git a/idp/frontend/index.html b/idp/frontend/index.html new file mode 100644 index 0000000..5cab8aa --- /dev/null +++ b/idp/frontend/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + %VITE_APP_TITLE% + + + + + +

+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + + + \ No newline at end of file diff --git a/idp/frontend/package.json b/idp/frontend/package.json new file mode 100644 index 0000000..e122584 --- /dev/null +++ b/idp/frontend/package.json @@ -0,0 +1,35 @@ +{ + "name": "unified-login-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "axios": "1.13.4", + "crypto-js": "^4.2.0", + "element-plus": "^2.6.0", + "js-cookie": "3.0.5", + "jsencrypt": "3.3.2", + "pinia": "^2.1.7", + "vue": "^3.4.21", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@types/js-cookie": "^3.0.6", + "@vitejs/plugin-vue": "6.0.3", + "sass-embedded": "^1.97.3", + "typescript": "^5.9.3", + "unplugin-auto-import": "0.18.6", + "unplugin-vue-setup-extend-plus": "1.0.1", + "vite": "6.4.1", + "vite-plugin-compression": "0.5.1", + "vite-plugin-svg-icons": "2.0.1", + "vue-tsc": "^3.2.4", + "web-storage-cache": "^1.1.1" + } +} \ No newline at end of file diff --git a/idp/frontend/pnpm-lock.yaml b/idp/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..4e7cf92 --- /dev/null +++ b/idp/frontend/pnpm-lock.yaml @@ -0,0 +1,4326 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.2 + version: 2.3.2(vue@3.5.27(typescript@5.9.3)) + axios: + specifier: 1.13.4 + version: 1.13.4 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + element-plus: + specifier: ^2.6.0 + version: 2.13.1(vue@3.5.27(typescript@5.9.3)) + js-cookie: + specifier: 3.0.5 + version: 3.0.5 + jsencrypt: + specifier: 3.3.2 + version: 3.3.2 + pinia: + specifier: ^2.1.7 + version: 2.3.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) + vue: + specifier: ^3.4.21 + version: 3.5.27(typescript@5.9.3) + vue-router: + specifier: ^4.3.0 + version: 4.6.4(vue@3.5.27(typescript@5.9.3)) + devDependencies: + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 + '@vitejs/plugin-vue': + specifier: 6.0.3 + version: 6.0.3(vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.27(typescript@5.9.3)) + sass-embedded: + specifier: ^1.97.3 + version: 1.97.3 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + unplugin-auto-import: + specifier: 0.18.6 + version: 0.18.6(@vueuse/core@10.11.1(vue@3.5.27(typescript@5.9.3)))(rollup@4.56.0) + unplugin-vue-setup-extend-plus: + specifier: 1.0.1 + version: 1.0.1 + vite: + specifier: 6.4.1 + version: 6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3) + vite-plugin-compression: + specifier: 0.5.1 + version: 0.5.1(vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3)) + vite-plugin-svg-icons: + specifier: 2.0.1 + version: 2.0.1(vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3)) + vue-tsc: + specifier: ^3.2.4 + version: 3.2.4(typescript@5.9.3) + web-storage-cache: + specifier: ^1.1.1 + version: 1.1.1 + +packages: + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.6': + resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.6': + resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + engines: {node: '>=6.9.0'} + + '@bufbuild/protobuf@2.11.0': + resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.3.2': + resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@rolldown/pluginutils@1.0.0-beta.53': + resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.56.0': + resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.56.0': + resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.56.0': + resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.56.0': + resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.56.0': + resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.56.0': + resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.56.0': + resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.56.0': + resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.56.0': + resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.56.0': + resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.56.0': + resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.56.0': + resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.56.0': + resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.56.0': + resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.56.0': + resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.56.0': + resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.56.0': + resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.56.0': + resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.56.0': + resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.56.0': + resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.56.0': + resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.56.0': + resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.56.0': + resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.56.0': + resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.56.0': + resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==} + cpu: [x64] + os: [win32] + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/js-cookie@3.0.6': + resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.23': + resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} + + '@types/node@25.0.10': + resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} + + '@types/svgo@2.6.4': + resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@vitejs/plugin-vue@6.0.3': + resolution: {integrity: sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vue: ^3.2.25 + + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} + + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} + + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} + + '@vue/compiler-core@3.5.27': + resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} + + '@vue/compiler-dom@3.5.27': + resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} + + '@vue/compiler-sfc@3.5.27': + resolution: {integrity: sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==} + + '@vue/compiler-ssr@3.5.27': + resolution: {integrity: sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/language-core@3.2.4': + resolution: {integrity: sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==} + + '@vue/reactivity@3.5.27': + resolution: {integrity: sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==} + + '@vue/runtime-core@3.5.27': + resolution: {integrity: sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==} + + '@vue/runtime-dom@3.5.27': + resolution: {integrity: sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==} + + '@vue/server-renderer@3.5.27': + resolution: {integrity: sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==} + peerDependencies: + vue: 3.5.27 + + '@vue/shared@3.5.27': + resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} + + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + alien-signals@3.1.2: + resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + + arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + + arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.13.4: + resolution: {integrity: sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + + define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + + define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + element-plus@2.13.1: + resolution: {integrity: sha512-eG4BDBGdAsUGN6URH1PixzZb0ngdapLivIk1meghS1uEueLvQ3aljSKrCt5x6sYb6mUk8eGtzTQFgsPmLavQcA==} + peerDependencies: + vue: ^3.3.0 + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + + extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + + has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + + has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + + has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + + is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + jsencrypt@3.3.2: + resolution: {integrity: sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + + kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + + kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + lodash-es@4.17.23: + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + + magic-string@0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge-options@1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pinia@2.3.1: + resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-prefix-selector@1.16.1: + resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==} + peerDependencies: + postcss: '>4 <9' + + postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + posthtml-parser@0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + + posthtml-rename-id@1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + + posthtml-render@1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + + posthtml-svg-mode@1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + + posthtml@0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.56.0: + resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + + sass-embedded-all-unknown@1.97.3: + resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} + cpu: ['!arm', '!arm64', '!riscv64', '!x64'] + + sass-embedded-android-arm64@1.97.3: + resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.97.3: + resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-riscv64@1.97.3: + resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.97.3: + resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.97.3: + resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.97.3: + resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.97.3: + resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + libc: glibc + + sass-embedded-linux-arm@1.97.3: + resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + libc: glibc + + sass-embedded-linux-musl-arm64@1.97.3: + resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + libc: musl + + sass-embedded-linux-musl-arm@1.97.3: + resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + libc: musl + + sass-embedded-linux-musl-riscv64@1.97.3: + resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + libc: musl + + sass-embedded-linux-musl-x64@1.97.3: + resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + libc: musl + + sass-embedded-linux-riscv64@1.97.3: + resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + libc: glibc + + sass-embedded-linux-x64@1.97.3: + resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + libc: glibc + + sass-embedded-unknown-all@1.97.3: + resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} + os: ['!android', '!darwin', '!linux', '!win32'] + + sass-embedded-win32-arm64@1.97.3: + resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-x64@1.97.3: + resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.97.3: + resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} + engines: {node: '>=16.0.0'} + hasBin: true + + sass@1.97.3: + resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + engines: {node: '>=14.0.0'} + hasBin: true + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + + snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + + snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + + source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + svg-baker@1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + + to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + + traverse@0.6.11: + resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} + engines: {node: '>= 0.4'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray.prototype.slice@1.0.5: + resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==} + engines: {node: '>= 0.4'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unimport@3.14.6: + resolution: {integrity: sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==} + + union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-auto-import@0.18.6: + resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-vue-setup-extend-plus@1.0.1: + resolution: {integrity: sha512-mW2IzkyJITyspAV/LEdnEyE1CJip9jB5fCeaVv7Q6X0oJyDrOxXoB+jyet0q5pRJNjErbjQx950/8NPTvbqLTQ==} + + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} + + unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + + urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + + use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-svg-icons@2.0.1: + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-router@4.6.4: + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} + peerDependencies: + vue: ^3.5.0 + + vue-tsc@3.2.4: + resolution: {integrity: sha512-xj3YCvSLNDKt1iF9OcImWHhmYcihVu9p4b9s4PGR/qp6yhW+tZJaypGxHScRyOrdnHvaOeF+YkZOdKwbgGvp5g==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.27: + resolution: {integrity: sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + web-storage-cache@1.1.1: + resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} + +snapshots: + + '@antfu/utils@0.7.10': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.28.6': + dependencies: + '@babel/types': 7.28.6 + + '@babel/types@7.28.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@bufbuild/protobuf@2.11.0': {} + + '@ctrl/tinycolor@3.6.1': {} + + '@element-plus/icons-vue@2.3.2(vue@3.5.27(typescript@5.9.3))': + dependencies: + vue: 3.5.27(typescript@5.9.3) + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + + '@rolldown/pluginutils@1.0.0-beta.53': {} + + '@rollup/pluginutils@5.3.0(rollup@4.56.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.56.0 + + '@rollup/rollup-android-arm-eabi@4.56.0': + optional: true + + '@rollup/rollup-android-arm64@4.56.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.56.0': + optional: true + + '@rollup/rollup-darwin-x64@4.56.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.56.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.56.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.56.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.56.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.56.0': + optional: true + + '@rollup/rollup-openbsd-x64@4.56.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.56.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.56.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.56.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.56.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.56.0': + optional: true + + '@sxzz/popperjs-es@2.11.7': {} + + '@trysound/sax@0.2.0': {} + + '@types/estree@1.0.8': {} + + '@types/js-cookie@3.0.6': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.23 + + '@types/lodash@4.17.23': {} + + '@types/node@25.0.10': + dependencies: + undici-types: 7.16.0 + + '@types/svgo@2.6.4': + dependencies: + '@types/node': 25.0.10 + + '@types/web-bluetooth@0.0.20': {} + + '@vitejs/plugin-vue@6.0.3(vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.27(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.53 + vite: 6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3) + vue: 3.5.27(typescript@5.9.3) + + '@volar/language-core@2.4.27': + dependencies: + '@volar/source-map': 2.4.27 + + '@volar/source-map@2.4.27': {} + + '@volar/typescript@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/compiler-core@3.5.27': + dependencies: + '@babel/parser': 7.28.6 + '@vue/shared': 3.5.27 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.27': + dependencies: + '@vue/compiler-core': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/compiler-sfc@3.5.27': + dependencies: + '@babel/parser': 7.28.6 + '@vue/compiler-core': 3.5.27 + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-ssr': 3.5.27 + '@vue/shared': 3.5.27 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.27': + dependencies: + '@vue/compiler-dom': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/devtools-api@6.6.4': {} + + '@vue/language-core@3.2.4': + dependencies: + '@volar/language-core': 2.4.27 + '@vue/compiler-dom': 3.5.27 + '@vue/shared': 3.5.27 + alien-signals: 3.1.2 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.3 + + '@vue/reactivity@3.5.27': + dependencies: + '@vue/shared': 3.5.27 + + '@vue/runtime-core@3.5.27': + dependencies: + '@vue/reactivity': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/runtime-dom@3.5.27': + dependencies: + '@vue/reactivity': 3.5.27 + '@vue/runtime-core': 3.5.27 + '@vue/shared': 3.5.27 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.27 + '@vue/shared': 3.5.27 + vue: 3.5.27(typescript@5.9.3) + + '@vue/shared@3.5.27': {} + + '@vueuse/core@10.11.1(vue@3.5.27(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.27(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.27(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.1': {} + + '@vueuse/shared@10.11.1(vue@3.5.27(typescript@5.9.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.27(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + acorn@8.15.0: {} + + alien-signals@3.1.2: {} + + ansi-regex@2.1.1: {} + + ansi-styles@2.2.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + arr-diff@4.0.0: {} + + arr-flatten@1.1.0: {} + + arr-union@3.1.0: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-unique@0.3.2: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + assign-symbols@1.0.0: {} + + async-function@1.0.0: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + atob@2.1.2: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.13.4: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base@0.11.2: + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + + big.js@5.2.2: {} + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@2.3.2: + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + cache-base@1.0.1: + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + optional: true + + class-utils@0.3.6: + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + + clone@2.1.2: {} + + collection-visit@1.0.0: + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorjs.io@0.5.2: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@7.2.0: {} + + component-emitter@1.3.1: {} + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + copy-descriptor@0.1.1: {} + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + crypto-js@4.2.0: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-what@6.2.2: {} + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csstype@3.2.3: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dayjs@1.11.19: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-uri-component@0.2.2: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + define-property@0.2.5: + dependencies: + is-descriptor: 0.1.7 + + define-property@1.0.0: + dependencies: + is-descriptor: 1.0.3 + + define-property@2.0.2: + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + + delayed-stream@1.0.0: {} + + detect-libc@2.1.2: + optional: true + + dom-serializer@0.2.2: + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@1.3.1: {} + + domelementtype@2.3.0: {} + + domhandler@2.4.2: + dependencies: + domelementtype: 1.3.1 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@1.7.0: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + element-plus@2.13.1(vue@3.5.27(typescript@5.9.3)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.2(vue@3.5.27(typescript@5.9.3)) + '@floating-ui/dom': 1.7.4 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.23 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 10.11.1(vue@3.5.27(typescript@5.9.3)) + async-validator: 4.2.5 + dayjs: 1.11.19 + lodash: 4.17.23 + lodash-es: 4.17.23 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.23)(lodash@4.17.23) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.27(typescript@5.9.3) + transitivePeerDependencies: + - '@vue/composition-api' + + emojis-list@3.0.0: {} + + entities@1.1.2: {} + + entities@2.2.0: {} + + entities@7.0.1: {} + + es-abstract@1.24.1: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.20 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@5.0.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + etag@1.8.1: {} + + expand-brackets@2.1.4: + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.8: {} + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend-shallow@3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + + extglob@2.0.4: + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fill-range@4.0.0: + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + for-in@1.0.2: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fragment-cache@0.2.1: + dependencies: + map-cache: 0.2.2 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-value@2.0.6: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@1.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-value@0.3.1: + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + + has-value@1.0.0: + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + + has-values@0.1.4: {} + + has-values@1.0.0: + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + htmlparser2@3.10.1: + dependencies: + domelementtype: 1.3.1 + domhandler: 2.4.2 + domutils: 1.7.0 + entities: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + + image-size@0.5.5: {} + + immutable@5.1.4: {} + + inherits@2.0.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + is-accessor-descriptor@1.0.1: + dependencies: + hasown: 2.0.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-callable@1.2.7: {} + + is-data-descriptor@1.0.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-descriptor@0.1.7: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-descriptor@1.0.3: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-extendable@0.1.1: {} + + is-extendable@1.0.1: + dependencies: + is-plain-object: 2.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@3.0.0: + dependencies: + kind-of: 3.2.2 + + is-number@7.0.0: {} + + is-plain-obj@1.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.20 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-windows@1.0.2: {} + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isobject@2.1.0: + dependencies: + isarray: 1.0.0 + + isobject@3.0.1: {} + + js-base64@2.6.4: {} + + js-cookie@3.0.5: {} + + js-tokens@9.0.1: {} + + jsencrypt@3.3.2: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kind-of@3.2.2: + dependencies: + is-buffer: 1.1.6 + + kind-of@4.0.0: + dependencies: + is-buffer: 1.1.6 + + kind-of@5.1.0: {} + + kind-of@6.0.3: {} + + loader-utils@1.4.2: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + + local-pkg@0.5.1: + dependencies: + mlly: 1.8.0 + pkg-types: 1.3.1 + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + lodash-es@4.17.23: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.23)(lodash@4.17.23): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.23 + lodash-es: 4.17.23 + + lodash@4.17.23: {} + + magic-string@0.26.7: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + map-cache@0.2.2: {} + + map-visit@1.0.0: + dependencies: + object-visit: 1.0.1 + + math-intrinsics@1.1.0: {} + + mdn-data@2.0.14: {} + + memoize-one@6.0.0: {} + + merge-options@1.0.1: + dependencies: + is-plain-obj: 1.1.0 + + merge2@1.4.1: {} + + micromatch@3.1.0: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 1.0.0 + extend-shallow: 2.0.1 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 5.1.0 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + mixin-deep@1.3.2: + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + + ms@2.0.0: {} + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + nanoid@3.3.11: {} + + nanomatch@1.2.13: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + node-addon-api@7.1.1: + optional: true + + normalize-wheel-es@1.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-assign@4.1.1: {} + + object-copy@0.1.0: + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object-visit@1.0.1: + dependencies: + isobject: 3.0.1 + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.pick@1.3.0: + dependencies: + isobject: 3.0.1 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + pascalcase@0.1.1: {} + + path-browserify@1.0.1: {} + + pathe@0.2.0: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pinia@2.3.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.27(typescript@5.9.3) + vue-demi: 0.14.10(vue@3.5.27(typescript@5.9.3)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@vue/composition-api' + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + + posix-character-classes@0.1.1: {} + + possible-typed-array-names@1.1.0: {} + + postcss-prefix-selector@1.16.1(postcss@5.2.18): + dependencies: + postcss: 5.2.18 + + postcss@5.2.18: + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + posthtml-parser@0.2.1: + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + + posthtml-rename-id@1.0.12: + dependencies: + escape-string-regexp: 1.0.5 + + posthtml-render@1.4.0: {} + + posthtml-svg-mode@1.0.3: + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + posthtml@0.9.2: + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + proxy-from-env@1.1.0: {} + + quansync@0.2.11: {} + + query-string@4.3.4: + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + queue-microtask@1.2.3: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.1.2: + optional: true + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regex-not@1.0.2: + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + repeat-element@1.1.4: {} + + repeat-string@1.6.1: {} + + resolve-url@0.2.1: {} + + ret@0.1.15: {} + + reusify@1.1.0: {} + + rollup@4.56.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.56.0 + '@rollup/rollup-android-arm64': 4.56.0 + '@rollup/rollup-darwin-arm64': 4.56.0 + '@rollup/rollup-darwin-x64': 4.56.0 + '@rollup/rollup-freebsd-arm64': 4.56.0 + '@rollup/rollup-freebsd-x64': 4.56.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.56.0 + '@rollup/rollup-linux-arm-musleabihf': 4.56.0 + '@rollup/rollup-linux-arm64-gnu': 4.56.0 + '@rollup/rollup-linux-arm64-musl': 4.56.0 + '@rollup/rollup-linux-loong64-gnu': 4.56.0 + '@rollup/rollup-linux-loong64-musl': 4.56.0 + '@rollup/rollup-linux-ppc64-gnu': 4.56.0 + '@rollup/rollup-linux-ppc64-musl': 4.56.0 + '@rollup/rollup-linux-riscv64-gnu': 4.56.0 + '@rollup/rollup-linux-riscv64-musl': 4.56.0 + '@rollup/rollup-linux-s390x-gnu': 4.56.0 + '@rollup/rollup-linux-x64-gnu': 4.56.0 + '@rollup/rollup-linux-x64-musl': 4.56.0 + '@rollup/rollup-openbsd-x64': 4.56.0 + '@rollup/rollup-openharmony-arm64': 4.56.0 + '@rollup/rollup-win32-arm64-msvc': 4.56.0 + '@rollup/rollup-win32-ia32-msvc': 4.56.0 + '@rollup/rollup-win32-x64-gnu': 4.56.0 + '@rollup/rollup-win32-x64-msvc': 4.56.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex@1.1.0: + dependencies: + ret: 0.1.15 + + sass-embedded-all-unknown@1.97.3: + dependencies: + sass: 1.97.3 + optional: true + + sass-embedded-android-arm64@1.97.3: + optional: true + + sass-embedded-android-arm@1.97.3: + optional: true + + sass-embedded-android-riscv64@1.97.3: + optional: true + + sass-embedded-android-x64@1.97.3: + optional: true + + sass-embedded-darwin-arm64@1.97.3: + optional: true + + sass-embedded-darwin-x64@1.97.3: + optional: true + + sass-embedded-linux-arm64@1.97.3: + optional: true + + sass-embedded-linux-arm@1.97.3: + optional: true + + sass-embedded-linux-musl-arm64@1.97.3: + optional: true + + sass-embedded-linux-musl-arm@1.97.3: + optional: true + + sass-embedded-linux-musl-riscv64@1.97.3: + optional: true + + sass-embedded-linux-musl-x64@1.97.3: + optional: true + + sass-embedded-linux-riscv64@1.97.3: + optional: true + + sass-embedded-linux-x64@1.97.3: + optional: true + + sass-embedded-unknown-all@1.97.3: + dependencies: + sass: 1.97.3 + optional: true + + sass-embedded-win32-arm64@1.97.3: + optional: true + + sass-embedded-win32-x64@1.97.3: + optional: true + + sass-embedded@1.97.3: + dependencies: + '@bufbuild/protobuf': 2.11.0 + colorjs.io: 0.5.2 + immutable: 5.1.4 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-all-unknown: 1.97.3 + sass-embedded-android-arm: 1.97.3 + sass-embedded-android-arm64: 1.97.3 + sass-embedded-android-riscv64: 1.97.3 + sass-embedded-android-x64: 1.97.3 + sass-embedded-darwin-arm64: 1.97.3 + sass-embedded-darwin-x64: 1.97.3 + sass-embedded-linux-arm: 1.97.3 + sass-embedded-linux-arm64: 1.97.3 + sass-embedded-linux-musl-arm: 1.97.3 + sass-embedded-linux-musl-arm64: 1.97.3 + sass-embedded-linux-musl-riscv64: 1.97.3 + sass-embedded-linux-musl-x64: 1.97.3 + sass-embedded-linux-riscv64: 1.97.3 + sass-embedded-linux-x64: 1.97.3 + sass-embedded-unknown-all: 1.97.3 + sass-embedded-win32-arm64: 1.97.3 + sass-embedded-win32-x64: 1.97.3 + + sass@1.97.3: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.4 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + optional: true + + scule@1.3.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + set-value@2.0.1: + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + snapdragon-node@2.1.1: + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + + snapdragon-util@3.0.1: + dependencies: + kind-of: 3.2.2 + + snapdragon@0.8.2: + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + + source-map-js@1.2.1: {} + + source-map-resolve@0.5.3: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + + source-map-url@0.4.1: {} + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + sourcemap-codec@1.4.8: {} + + split-string@3.1.0: + dependencies: + extend-shallow: 3.0.2 + + stable@0.1.8: {} + + static-extend@0.1.2: + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + strict-uri-encode@1.1.0: {} + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-literal@2.1.1: + dependencies: + js-tokens: 9.0.1 + + supports-color@2.0.0: {} + + supports-color@3.2.3: + dependencies: + has-flag: 1.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + svg-baker@1.7.0: + dependencies: + bluebird: 3.7.2 + clone: 2.1.2 + he: 1.2.0 + image-size: 0.5.5 + loader-utils: 1.4.2 + merge-options: 1.0.1 + micromatch: 3.1.0 + postcss: 5.2.18 + postcss-prefix-selector: 1.16.1(postcss@5.2.18) + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.11 + transitivePeerDependencies: + - supports-color + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.1.3 + + sync-message-port@1.1.3: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-object-path@0.3.0: + dependencies: + kind-of: 3.2.2 + + to-regex-range@2.1.1: + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + to-regex@3.0.2: + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + + traverse@0.6.11: + dependencies: + gopd: 1.2.0 + typedarray.prototype.slice: 1.0.5 + which-typed-array: 1.1.20 + + tslib@2.8.1: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typedarray.prototype.slice@1.0.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + math-intrinsics: 1.1.0 + typed-array-buffer: 1.0.3 + typed-array-byte-offset: 1.0.4 + + typescript@5.9.3: {} + + ufo@1.6.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@7.16.0: {} + + unimport@3.14.6(rollup@4.56.0): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.0 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 1.3.1 + scule: 1.3.0 + strip-literal: 2.1.1 + unplugin: 1.16.1 + transitivePeerDependencies: + - rollup + + union-value@1.0.1: + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + + universalify@2.0.1: {} + + unplugin-auto-import@0.18.6(@vueuse/core@10.11.1(vue@3.5.27(typescript@5.9.3)))(rollup@4.56.0): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) + fast-glob: 3.3.3 + local-pkg: 0.5.1 + magic-string: 0.30.21 + minimatch: 9.0.5 + unimport: 3.14.6(rollup@4.56.0) + unplugin: 1.16.1 + optionalDependencies: + '@vueuse/core': 10.11.1(vue@3.5.27(typescript@5.9.3)) + transitivePeerDependencies: + - rollup + + unplugin-vue-setup-extend-plus@1.0.1: + dependencies: + '@vue/compiler-sfc': 3.5.27 + magic-string: 0.26.7 + unplugin: 1.16.1 + + unplugin@1.16.1: + dependencies: + acorn: 8.15.0 + webpack-virtual-modules: 0.6.2 + + unset-value@1.0.0: + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + + urix@0.1.0: {} + + use@3.1.1: {} + + util-deprecate@1.0.2: {} + + varint@6.0.0: {} + + vary@1.1.2: {} + + vite-plugin-compression@0.5.1(vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3)): + dependencies: + chalk: 4.1.2 + debug: 4.4.3 + fs-extra: 10.1.0 + vite: 6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3) + transitivePeerDependencies: + - supports-color + + vite-plugin-svg-icons@2.0.1(vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3)): + dependencies: + '@types/svgo': 2.6.4 + cors: 2.8.6 + debug: 4.4.3 + etag: 1.8.1 + fs-extra: 10.1.0 + pathe: 0.2.0 + svg-baker: 1.7.0 + svgo: 2.8.0 + vite: 6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3) + transitivePeerDependencies: + - supports-color + + vite@6.4.1(@types/node@25.0.10)(sass-embedded@1.97.3)(sass@1.97.3): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.56.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.10 + fsevents: 2.3.3 + sass: 1.97.3 + sass-embedded: 1.97.3 + + vscode-uri@3.1.0: {} + + vue-demi@0.14.10(vue@3.5.27(typescript@5.9.3)): + dependencies: + vue: 3.5.27(typescript@5.9.3) + + vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.27(typescript@5.9.3) + + vue-tsc@3.2.4(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.27 + '@vue/language-core': 3.2.4 + typescript: 5.9.3 + + vue@3.5.27(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-sfc': 3.5.27 + '@vue/runtime-dom': 3.5.27 + '@vue/server-renderer': 3.5.27(vue@3.5.27(typescript@5.9.3)) + '@vue/shared': 3.5.27 + optionalDependencies: + typescript: 5.9.3 + + web-storage-cache@1.1.1: {} + + webpack-virtual-modules@0.6.2: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.20 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.20: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 diff --git a/idp/frontend/src/App.vue b/idp/frontend/src/App.vue new file mode 100644 index 0000000..b9d5b98 --- /dev/null +++ b/idp/frontend/src/App.vue @@ -0,0 +1,17 @@ + + + \ No newline at end of file diff --git a/idp/frontend/src/api/login.ts b/idp/frontend/src/api/login.ts new file mode 100644 index 0000000..d5b96a6 --- /dev/null +++ b/idp/frontend/src/api/login.ts @@ -0,0 +1,103 @@ +import request from '@/utils/request' +import type { AxiosResponse } from 'axios' + +interface RegisterData { + [key: string]: any +} + +export interface UserInfo { + userId: string | number + userName: string + nickName: string + avatar?: string + roles?: string[] + permissions?: string[] + [key: string]: any +} + +export interface GetInfoResponse { + user: UserInfo + roles: string[] + permissions: string[] + isDefaultModifyPwd?: boolean + isPasswordExpired?: boolean + [key: string]: any +} + +interface LoginResponse { + token?: string + [key: string]: any +} + +interface CaptchaResponse { + captchaEnabled?: boolean + img?: string + uuid?: string +} + +// 登录方法 +export function login(username: string, password: string, code?: string, uuid?: string): Promise> { + const data: string = `username=${username}&password=${password}&code=${code}&uuid=${uuid}` + return request({ + url: '/api/login/account', + headers: { + isToken: false, + repeatSubmit: false, + 'Content-Type': 'application/x-www-form-urlencoded' + }, + method: 'post', + data: data + }) +} +export function authorize(params:string): Promise> { + return request({ + url: '/oauth2/authorize', + headers: { + isToken: true, + repeatSubmit: false, + 'Content-Type': 'application/x-www-form-urlencoded' + }, + method: 'post', + data: params + }) +} + +// 注册方法 +export function register(data: RegisterData): Promise> { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 获取用户详细信息 +export function getInfo(): Promise> { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout(): Promise> { + return request({ + url: '/logout', + method: 'post' + }) +} + +// 获取验证码 +export function getCodeImg(): Promise> { + return request({ + url: '/captcha/image', + headers: { + isToken: false + }, + method: 'get', + timeout: 20000 + }) +} \ No newline at end of file diff --git a/idp/frontend/src/assets/401_images/401.gif b/idp/frontend/src/assets/401_images/401.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd6e0d9433421b3f29d0ec0c40f755e354728000 GIT binary patch literal 164227 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⋘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 GY5fOuZZib{ literal 0 HcmV?d00001 diff --git a/idp/frontend/src/assets/404_images/404.png b/idp/frontend/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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 literal 0 HcmV?d00001 diff --git a/idp/frontend/src/assets/404_images/404_cloud.png b/idp/frontend/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 zcmV;P5@GF$P)z1^@s6R@{TJ00001b5ch_0Itp) z=>Px{SV=@dRCodHoqLcR#eK)SXLk2aLP!ExlChA4#6y+=^RN{OKVlN7GET+i$PP9^ zR9s2L*v|8hkf(_)D$dKqRm8-V1lyIWxJbn=$|g=hDpjdKsES{RV8G%C=q$?uPKVI@ zbbI@l>3n{tyVKlhc5i35XJ>Y|yXtp4kM3Xp`rF^@?)i03k5(>Zihwa@T{TcUOb~82 zTJOM^>y%N4l~$ulnNg#?eZCwAYG0|Oex$WNovFbIGuH{@yXYMt0GXDQ>*{(`>`vI92rNTSOTED2gOaUqjet*R?SA(5hWGK`(H+RF7z@Pt5R z2=#Q)*B8@$Zdg#H7dU@sR^4YNfGhwY_oonNO(js<8Hhuq>4Eq*uAQH?;acfeeP53j z{pr?fc@ulS&Apq2h)v?8a?25H0jvfVtHZ6#j=_%ddbH1m`1z)`# zL%bG^`4;g$2+4vL<6DU~@B}Lxvrz`(N{0->r(37%A=!`>bS)}@7*)EzCriG51HW6^ zRQ&*YKHg^9wvr7T!647_N~nI>nDA{T&^IS{6SReM`-!wZ%$R*I1NSRYvbudmb18R2 zvU}#vQa%_sf=yP!Z$PS@f-69W#;9=y$glJCcZy3jxr_|s>|CimwI&SBO3u3;ux+H^ z=_7Q5+sNE@i+U&eztoLF4HUs9Yvy-V82)tm+1apsi2oY`s*6Svv6JV*-3u?Wso= zt(|z+WqRk73RTrG3daYwgnKJ^Kv={5HRRhEYdr9DgFh$~^kqa^=w?W0QOnWgpXDZO z{7%a$+KAY=&}}HoYZ5AVb-8MurfXc6iH(e-0D7Ffk3qIc?a?(WJo-j0p&P8sbc0#A zJ&s`0yC9kP%2Ek^PcX>kP1VeQ@XLTcKY>cE4;7~871w8M)dBLq0ei;Mu%lHUN*Z~0 zMdwsC+?_XaNx|`BJxxcNHMzu;jmW=)Q8P!a#A_?`bqhwz^e68eMvAtDyo|K zdKRl07OU)nuV11$eZyk$GP?f}^1a(;-hD~1at&XXnO@Lm6RVDOG49$^@KW_}b!;OF zw%SlKtE2A-Hd!&Z^7#MTvjxo0uO7pJYPIt6Q?|yI^cBHaL3)MO<|~bho6Q}@U4}vZ zadJN|8w;|_wQmT!r$ z%Go4VPwVv}DX3!>2wTL}?n8bcpo@~m(mY#3APgTNQLN2CX z_IsW_Sn}0`@2e7|yNH4HZ3hjdj(3%+M~n!AvTmy+Ouv$5%b1|qloqe!J-9<9<%0ZMLke& zs|WO+wP5-dtzAG%_Y&_Aj?uzZi=JA_IB7j`t*mT7_Y)BLr=xZZ@^N1iEUsc{?ff7x zmj{8mJbIr+fJX|R_v3;Wo@6?QLvJ<2+f4kHmqXKH?q`jc>^1oGX~irztr<65vbYMWQt)=pJ} zwP%u^8QZNszmV4@IBk^BUXq^ogV}?kV@>X#H3mXQuozI>C3^@sg4x5;X^KI>5iAB2 zcgY?Cj$rn%beduia0H71#a*(8fFqbaES;tp1RTL)KyjDsA>asR4@;*h1_4K~7*O0L zdk8p!*~8Llib23lZ^VEy;Fo@ZN&Z(_z~Bku+#&1hn#FYlYlhBX-djSkMHUOU5ka;W z{dlv8u8VAjj=Q%Q0(a8d-P0_RBUm$Z+`U#1_%tN@WTS|VV2zM**OMUdw~*{ZaS0s3 z;!ttdk|H2HlFj~ZT$s=iY#}1V5!3Elskes4y1}ePZJD3%MHHoJ;lCUr&C4ADQ_Er zo?CDTsbn$SFCo8yT)+B^E3aOyt7pqKbF@+mR)&gCwq&t4YunY(zX{pIuQvk3x)e)4 zf&40R;UZR-D>XAxu7@Y8b;I|v^_xlWFOsIC+ic$y`kw0P9-$)u;uF_%O)y9y6?O|E zt=0RGw(Mnx))Rc3^aZ|tTV_MKi;U7&pt~(y*bo~W!D3;_C&8$EX`y}v`E_J-tmz$G ztW8ozxL57QuWGjEa^GbfvYDF;*)t9>kU^>BZ2fmm%C} zr55UHAcQs-C)MEy7K>Q+1cOwvi}S6>Zz4Nl&Fu0;_S@gb1H(Z+uvOrA3pOtL31mmG z*hMR3o%-hiKuJhN0TZp86{nn&k+#5RvKg?h_1R z-AvZf4Za^q^~r9!i1z=~_?pPx$+|fV;Z~SXT?ygNa|DY8x;q4eRLjZ!qlge|OROoq zdvUT-SC5qn>gRYYwfbb*yO7LTo-V;4)>ULBq`CuHHkWPx9K1wPKv}^sJ zvzLKsVEbzw6AWU#8|BhkeGn-&$f(yZOE>r|B3)tE{Bu1F+G%XR54pE(f0JR6X4v_~H7n&nb<@P@ypJiL8*CcA&1S?mAuQBEFVHAZZ`2in; z;-jDH3UrEptJi}7^*v-O;=Vz&cx}oaVP8dd!-oUW=xq^fs&3vF2H~SoMRJUCnL&PL z=JR**ZrsL&adLhhV&8X>OOSpYM^ZGa;TveXo4Ox~)0&uIbd5`=s%9_F#Y^H8&R&}# z+p|J8zM*|788wYRn=ZrO@00gxWK)JV^itOUiLrk~J!Bw zmTereZNdQS%W+yMIC1tOGIn@ti}43Nn&2f};loLQXqjM;%43DWcUX%2Q%N#dEG`D` zogv#LT_W2)Y!bJFyxQ)<;t1>~%4d)VsVf~ z5yNDOw9Rl3Wv?LHk(SGC(|{h+bqISui#$NRoc)w}!a}qJG_BVWvpGs&-u*qt0pEBxqQpwq(QUD5uiu!d5 zv(}>8epdCb6z)^tCa#B6Lqme$^LjfzukX@|<$hVS@9URKzE1omP^!r0Q~7^k)*nMG zah7%^#1c$Mh0p6rd|tAOAlCt~CWec;A6LuT#QjN>39)2)r>i0MvAtZUTkHXH2~tJB zeIHF%k@g8Yr)uu;V&>y-VDlpz>9wha$T5vL(?-*yzgH@{uE-pnqD@Y zYo2Zd@OkaP=k-6dVqWJe)71c=Cvi(GPdAs`YByN+FUX&O!)R`;j2KpcR0UQ_JkSf| z61#Cr3`Oi8q{IKFuy;YMrc0Fb28cIRS9d|KtMg`9oISWDjxhH)Xao~q)(0TgjlD)L zsY8z~{%+)Tpd)b=nx|`kYleJ1NR!yIvf&fR)s+2Pd8&&fw&=0rHMT6()l$Lx-;y6r z`r2bPLjIm4Sut^p?(u>oh3nC{;%4|f@;Qi=E0;q%c%C6xBqfCksmy2akRQX(bQxsZ z5V@VnAvRSQ*!O$aC?5BJL}UPOeO*>26-TD$5Nx3#xCBOq3i?pd_tvv648nCk6boJ% zJC<}m=dR`W2s!;e#CpDKId&an~t)uFZJMQeF~>)zphMu z3IOHF@bT1v%qW9I1dH0pRL$6uqQ~-Oa{(lHOImJ@p`vH#s{74p|6{Pc8~JC*CBCh` z4Q&%FiiqcXM`_t!;H8YEkl`xvtwry*d(7JV6Qx35O=uqji$6#1hgg+%ap|RWRtOd? zFi)WqMc<5+iqKB8L2jGh459);#(p%8QSCi@EGrwnh{)8AkZfRrb%I5agC5nAr=Mq8 zO`UPuR>;=!G9aF0Cvi(Gjq2;cW9k0Bj>ujP`+Ly-j!jOLU{UL&MS?IRxEm&E+2mV6 z4cBrJcZzt!(eyodEK@tbM_HciLEEjF+%3Jf*gJwHLsX`A#habKtBzpv>tx`kcILy;`I#fwSqz`x zP}XJ*^wiE-IP4rbf+_U^Q2qhLa#K5YI5khpAU{QpgTyD1s~oxJal-1!Ahuv`YR4*t znky@?8hL{0nL*egaCU0v)3jJ)&0%qOZ6V;TUE!|<@Lk9wNZVg@uw_t6dLBjZHI(mT zh$B}@AjhelH>-T|q*+xC!w(xB?qb6E9V`l*cRx;n?Q6@1J=W`38ydQ)9orR@P+vm= z9V?rSl}dQKQsM15hptMfx9#Yb2qsfIpF;Znt(~@k?oz^r1dHZBK4IRf>h)cr(zm7k zrgw(~b5lFfip#-qO9Y#>Q@YH<6YAZe32x^Lqqnlu+4?4MZ4%5)?aWqE&VCaSENVMs zD~_KEZee}kF39$NS~e?h03{^Y?9`6z0so_@eeO6P2((SGsQIt)O(SzM*vZFlcA@ZQ z$k+A@8wm&|Q#-OY>-$k#+;P4TutKnCkq(_QYg8D1WcuO2s2$OJtsJ*NFgLZ+3XnO8 zW1V2pa*ZE1n{j#Y6pGu!s5eLNH9BrWFqzufjeMC_tKKNRyPhuuQYBclsE1FR>+7}p z?aUn9#>~OG=)LH148i34kDo_mLpJx;P86&jIPMz3X0c#=<{g@-zefieXRi7XWLr6V zPkti=b5lD}VBB$X1R&ec_{sXtvE%iJ#!l4BvYqFtsesGo5#-9`8eIy9Km!Dh7_4{t6|!cF8-ZvX%Q07*qoM6N<$g4q%^5&!@I literal 0 HcmV?d00001 diff --git a/idp/frontend/src/assets/icons/svg/404.svg b/idp/frontend/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/bug.svg b/idp/frontend/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/build.svg b/idp/frontend/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/button.svg b/idp/frontend/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/cascader.svg b/idp/frontend/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/chart.svg b/idp/frontend/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/checkbox.svg b/idp/frontend/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/clipboard.svg b/idp/frontend/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/code.svg b/idp/frontend/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..5f9c5ab --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/color.svg b/idp/frontend/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/component.svg b/idp/frontend/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/dashboard.svg b/idp/frontend/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/date-range.svg b/idp/frontend/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/date.svg b/idp/frontend/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..52dc73e --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/dict.svg b/idp/frontend/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..4849377 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/documentation.svg b/idp/frontend/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/download.svg b/idp/frontend/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..c896951 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/drag.svg b/idp/frontend/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/druid.svg b/idp/frontend/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..a2b4b4e --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/edit.svg b/idp/frontend/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/education.svg b/idp/frontend/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/email.svg b/idp/frontend/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/enter.svg b/idp/frontend/src/assets/icons/svg/enter.svg new file mode 100644 index 0000000..f7cabf2 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/enter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/example.svg b/idp/frontend/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/excel.svg b/idp/frontend/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/exit-fullscreen.svg b/idp/frontend/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/eye-open.svg b/idp/frontend/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/eye.svg b/idp/frontend/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/form.svg b/idp/frontend/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/fullscreen.svg b/idp/frontend/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/github.svg b/idp/frontend/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..db0a0d4 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/guide.svg b/idp/frontend/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/icon.svg b/idp/frontend/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/input.svg b/idp/frontend/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/international.svg b/idp/frontend/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/job.svg b/idp/frontend/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..2a93a25 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/language.svg b/idp/frontend/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/link.svg b/idp/frontend/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/list.svg b/idp/frontend/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/lock.svg b/idp/frontend/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/log.svg b/idp/frontend/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..d879d33 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/logininfor.svg b/idp/frontend/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..267f844 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/message.svg b/idp/frontend/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/money.svg b/idp/frontend/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/monitor.svg b/idp/frontend/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..bc308cb --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/moon.svg b/idp/frontend/src/assets/icons/svg/moon.svg new file mode 100644 index 0000000..ec72d77 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/more-up.svg b/idp/frontend/src/assets/icons/svg/more-up.svg new file mode 100644 index 0000000..d30ac11 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/more-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/nested.svg b/idp/frontend/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/number.svg b/idp/frontend/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/online.svg b/idp/frontend/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..330a202 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/password.svg b/idp/frontend/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..6c64def --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/pdf.svg b/idp/frontend/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/people.svg b/idp/frontend/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/peoples.svg b/idp/frontend/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/phone.svg b/idp/frontend/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..ab8e8c4 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/post.svg b/idp/frontend/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..2922c61 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/qq.svg b/idp/frontend/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/question.svg b/idp/frontend/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..cf75bd4 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/radio.svg b/idp/frontend/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/rate.svg b/idp/frontend/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/redis-list.svg b/idp/frontend/src/assets/icons/svg/redis-list.svg new file mode 100644 index 0000000..98a15b2 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/redis-list.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/redis.svg b/idp/frontend/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..2f1d62d --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/row.svg b/idp/frontend/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/search.svg b/idp/frontend/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/select.svg b/idp/frontend/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/server.svg b/idp/frontend/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..eb287e3 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/shopping.svg b/idp/frontend/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/size.svg b/idp/frontend/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..1a409f5 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/skill.svg b/idp/frontend/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/slider.svg b/idp/frontend/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/star.svg b/idp/frontend/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/sunny.svg b/idp/frontend/src/assets/icons/svg/sunny.svg new file mode 100644 index 0000000..cc628bf --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/sunny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/swagger.svg b/idp/frontend/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..05d4e7b --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/switch.svg b/idp/frontend/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/system.svg b/idp/frontend/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..5992593 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/tab.svg b/idp/frontend/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/table.svg b/idp/frontend/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/textarea.svg b/idp/frontend/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/theme.svg b/idp/frontend/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/time-range.svg b/idp/frontend/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/time.svg b/idp/frontend/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/tool.svg b/idp/frontend/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..48e0e35 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/tree-table.svg b/idp/frontend/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/tree.svg b/idp/frontend/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/upload.svg b/idp/frontend/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/user.svg b/idp/frontend/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/validCode.svg b/idp/frontend/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/wechat.svg b/idp/frontend/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/icons/svg/zip.svg b/idp/frontend/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/idp/frontend/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idp/frontend/src/assets/images/login.png b/idp/frontend/src/assets/images/login.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8724764361c49bddfee1d6b5742546f1c8defb GIT binary patch literal 2859847 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

SU$&tltv&6G#7as!{Gv zX5;Kl(i!c7c-~F%f>o(R8-B4EjaNP~( zS*|R<2In~9$sI6&x3i>*ggE*M$pMGd0t}uAXP}SH+b_@c#rh4Eo|~j*r#*=8O6)Kq zt8NBJM6=m6Tt4$^#3=o;$bJ*;p38rF=#>58L-Ds$`}zYu-)G;aFLMN=opbPmy!FG; zDS7V>e)zSXzyE{}Wq0BlFa)Q4G>9l#85nW^qS%3qaY77Z_w1I;lUp*)u4mu{b4#>j zPp|}UU<_q7m?n6F3zLvjJ(nx5oti@|CgeZ?di6~iHpK_qeDUS8zAvlWuImO>ujQwz z)bBt=9%kkYNtrLtmJcp39$sE77cKdqrB^LPVoH*7&P^-4NU~Y9ecvm582XSW&CG_H zHz^|U975iS^8f%K07*naR2iirB0?fU`=`t#Z-mq9U_F4ah5U{CwrLFRP8=m{Q_g7^ zhM`DgxP}|p%-pt0>&?w3rPMUqG)+zrk*JVbtE-Ndx}$B|^ZiT>z)Y}b_#~@G-fGS{ z9o;Zw zHFj_<{id$QAW71;?b&j9aenXo{QTnVtZ5QT55R4k#~f?>l!P*6(#Klr`#vzAryowt zHl{f7VM^Ft!?QCc4g$o+q-%o1l}H&%FnG_jA?Yb8c}G5gI`*DvAn%Ec$Up|S(dHS) z&wGIYy}tw4xAlp~yruDarQJ-X8Z|kxd-sTi-_5g}XXwr&s_OIhX(xW3BPRH}%gr=v<()KfOK=Ozns3b9(c(J@Z3) zHeV+r=;xz%cVy@R%}3x}@?7b?#uHy_Ja?aVxPHQyP!E6*ZtC-=`0DY7gYn#{-19CG zwePwS%$=DmzZ8fB=t@rCpLg#Q8B^*CKy0M#GFM) zB#AhAQH5&Pt%)RHL?Zf>mQ9j@Z4}xvIsD zgc6j*nW4r6CKVb4CAl>u!lLe~q(6(PTOIl=`CAH)XT7GDOs?yAwnthq)kB zEVqD(4&$AJ%-vLdw0TrJKYT->{Vu~?q#%_g;tZr1GP40AIUX%`pw9xg8*ESDcq z+v2<_%hczgCoMzo)^qXAdcC>2(O%gq{7zVladvib_8=v}S1*42qjJ55Ya$bv4E_4{=KlFT2f1-^^bxq-vUGyUt|I$ z#CZe2XFe?&(RPTUFjgIS1~Wj;OfW-@sSgiZNwfK_(Ah%i)Aevt5LDw%S<(V&ERm*0x z3Ak_70qTImU0B@JT_?6&P1chlfWA`|0r4H9|hov8^ z&;6+OvBFdBK!puUDWyh;nKovsR(jVOsjWojaAu;YbZ$nf-Xv+y&v=2-LI)H^Z@wu5 zo1KZ6s?^coJvk>FBhJK$G!xpyOLj1Ifx924JVuxW-rK;FZD=OvsMi%x;swMzLF+T4 z1`!D%Gm*0}HK*(y)o(&JCZdfshAmbnF^I;+NzNdhj%lhqy*LI&FW!l(zzdYnGqo;8 zNsOhVw4#N$>&BnGy8Wu({NPpj@vH0SU%gy+y>P?1m9$7H$L?f?!2mEJ99OaV_Hi+` z7HWYLT;K*zM41RXx%JhXGYWxI436(Dn!6pwGyeH5c||+AMisU9_u~#7lRpWkGot45 z3~jIMh}B!ST;3g=QV)0^6+kZ=JpWm z*h8YP0Cw|$=lAct%iYE@iL=TL^{*lN7NDSJsYV+P>>)e9o9kaRwq(3-0kdho`3bl|MkE9eZ2T- zPnLjU_P_tHfB!H3+F$rvzwz&V?_c_t&pfAw{SlS*<(F&ScnRPbc4yEO3+2SH+H!Js zcaCiMvA`M z4a_DEg@)Y-kkR$qsAemz`;z#aun=E@#Wgv^Em08zT*-~$OrD%0P|pbP6m^3f1h9gQ zr8xEGoeo#s`ewa)v+26Ne|>$U#jO-rbx=__1xJsoun41V+l#a1vTZIe7R#I)W;TUU za&dP=`CKz$Pa<-*Y@6Ko{ZL9jFn|(1S66o}=1%78o|yxjHYIT`R zud2G_&cwchV6_uq7S9xs<#K6eWw27pFjQ}=yAQ(ichAWZBmsmYC$l7?XzhF(=oB?`@k*E1!JtkVEMt`10!!0W*ADziN@Z^^+y zv*jK&4vuJhoQVjtGh0kw?8)jq1JxsAF?#A^}35(iLqZBSLIb|T3~MGC0ONR>3I zTDq9uG~EesB&~~xWm6R`?$BX9u*A$)=c#w9%ql%Ii)6`(SumnEkH;>E2)gAnqinNp zDGfop%1BWW34=rQC+f)u_MUklFEqZ}g#q#i7v$+& zI!QkJ{6*FP{)WDx_oer(Y4q+}@f-RRL8nYMcSn=`;^`OPo~`|E`_C=s9|1^#QTa$s z6L#ki7PXXa7*thUMIb3N5tBqAJ&;EY3kt!M5(&Gh-I?O{i=>ES1jmy6~;GTpBGuU_50e$}s6a7C%!n(%4(m^fo& zX*lO<>2P<0yKrGhmgW7+2cJH@Ozn$jFJ520d7zrZ-bx^m_WbO@)5i}!`qcSsAnI6$ zGIY8zn6R~u3m0B@{nc%Mb0eF=K+A%*?aOU$8a_`dQkIJw*A25=H0k29y?5STUN*~x zBu^=|oEjENJPgBXb<+y7X~Sv3JQ%vGtDJMnEfW_l>PE~dC0Amph4~y?h?}ERwk?J_ zJ1gfWY$*Q*n2^DpU`!u<^7!e~$M?_Ae)!`bJ^%cR3o{x9aS}HQSk!k4()#11y)j|t zJ+scq5u3%0+L+ph>ck=4(5g(!ohh%@C$=5OIx=HFtGmHfmCHaYpJd zuWnLx96<~|tHDTKq0g9LRX?1~L^z!f`o%ss(Vrv{aWis@vFrQ(_V%{lbfF-*TDZc@ zECN7&2^q2hGU+>EsEh)YUm_b$)x-IumWZ8N}DuV1}*bEUVNGsys$6PIE|B?s#L z&)gW>X6L7ra?VZDCYJT>wW&d=9Z8{SYpm7DJVQja&L#n5Oo@H_dWN%W@*?QPS=)=jpUHodmd53;wH@DqC z`|-=4TyK8#dVL!p=NFeuIRGZyZM|9%2{Y%!3^Fqw3TYH7=xkj zy7g^?`DcXa1EoIyax$oQr=MT@-*q95#P8!n@^%Zq5C4)wiyH&Dgv7mM;_Sg*Rx3Y*Q%rfZj7)2BtRZFUxFiHMwCqUjDv(8yO96OZr81CtVv8tF zq0wZ8k&l3tVNOo0;Q%Hoklws2de!xBZdcE*-@LlHU3Y!kwh?vcrpZ~z$ORzb>;xib zqNYig=V$jXFV4>vXH9|?(_t`A#EFGdawGRbAgF>UGfQp~OJ9a0WbnR}VHk>*iJkR* z&&&>qrjL3b9UJz$7O2@yWHe3DZ6TuD6g!JZ5^b6${9Z&9zOU+t%E?D$+5q^?$s$kp zpgF$%#Qx``k6=9Y#yDrgOkbYboO5<}VHXjRaJUYUgNxB^R;#OyG~N%Y(wNo^pf-=lrhZSKcOod1QrE_)=x+rE z8Z$&=Y$pe>k9B9K+on6m=+*l02n2mclmnamvRm3ZfTImlHnxbEz`P6{1-7!gyOEDI zq@%QRcnWncWKEp7C{dofAj{IrNDg>KGV1blUAT^9VR(scV z!)7R@B$iT28H&LZOU^mvEDL#Xd9Q8Tv$Kn{#WJNPR;CSQk$1$E$#HvXe*3G*a|!zT59QQEK+DS7o-UwBb=dq%m%5w6|^_bHG5i5hy;7$lLW+?~?+P zQFA|j zO?W!q^3$_?yd}r(-x-e!9CCv3_PXdf!64ZNtGcCuwBHz72rcnB+k; z{q+RZ=(ZSJcYoWjcH%ep*3Ys1;@I{Vd%Xydjqy44X*fQf^|nK%M?_k0f0sj;0k8zu zIys)RPdm|`BbHWoul#LXpV1>`9y8k}>1t|x0s&cIrV2A7#^m&k2qrZfhEhc&IFUT$pIhoGgjz^J?a%?yP zw=MBnHJSIg+1~n`#o6ZzokO}>2k(MR9;^z6YsDlSb{_Yj~<*QaIE6Xmvf{K==>o?mx#)Ag%z z>*P(t%O;C`WOOkF9x_G!7eWo%q;p@Xma;br^L!f6pZ zal1~A@lPUXffIz>nTQh*KtR^C%Tk5`21&$XZk*c1Su45umG6G~>652_^n1Ve2jBmv zEs)(aNPN3uEnJ192;;!9^|>PmRe_U%TA42d>1pc`QK0VZoJVozZXLqO@ObQqiSx_N zuvjiamtL>e%Tf-ja}s^mkxxZyN;)MAUzWi+_ek_Ng~1`fy7|N-K|-) zp&^Sfh}6uTI0-lH!w2`Deeu)V)#{^14_t?vt2Y<-E=h-Bvr+bxlQV7l^%-A0dh*fw z_O`!WcU_;HzzlN+iHNC&u1GZH_%pynfzntZY3q?Q?%pb{6Ulgb_z3e55kC>W9f9Z8 z_lb#9V$d)QuV25kqPV)s%$#ejAa^fXLW!6k!J+RG$u9rgF$Wy3Phd*(nduiNxh@4; z<0{x!HJh0e36&zkq&{eI2B*wqy_)uYyI4N@`00~RKWWd-*H*yNG|j6QFW2j}cYV%4 zRi2X@%zC3q-`R_}nigTKLv?qe;=F~5n#>~1oO5cLrfHfOx7*FF7cJe200$F~p#$ay z6_Lo~C1w^vDGmk+GLT?VoIMHUWSjn`TeT#J6oD#lhE?4y?*^1 zI;1uMD8<>`%yP~oRL0(g_8WL&b%b4sDCayB@B7{iWH60wgs>@KcHWs8pzZ_;a4ikZ ze;OiY5@6G5*xCYd4&am+Fp*kdH>DIN9y61aP#mzPO)z!cFgzz7y3K+q6~)ji?Cj!x zFSLHMdhqC@n{~N-^7z%tu5VwzeD>96&t5;j)iu%@PQpZ_svt140H$3-etzDH$ZEAJ z-6p4$#RePTX9R#emgl(eJaI0i zM@QtJDnIMdF!Xv5?CdfFM!?5+qPyg!W9LigIrElpWsD=f|Im*{l$l9Vf|JjH`ez%B z093G>gI1l=7i!(wllswIFJl1Cd-=HIyLS}%ICjhkuo4jndz#J!`M4*~@6>ynoo>_k z?C=@l%35aaAtGinGfqO_urtO!Eu~EM5F#2|MF6%|_gSBuu+3MC*`s|~eb%1n^VU>7 zC!WR!Ks`#?;$iMkn1jq}7!INILzA--x_&?aQ4lQ`=eO7WlRy72{*}M}H-7TtANdb| z02*H24hzC(Kl#aj`Jex1gX7=%jelQoo*@#)n0-5Y@VX|A9*zHx;wd_pDk|Ryk1{l4X<863#7UJ^7Hct z=f1w~%If;|1_`NYnxUkjG%2?ZvIuYC*bEI*3oc`0956#uGm>bqYDy}giv=FsyS#q6 z8a5qMjoN@q!{2891xPPlPA6XA!uaiUjz}7NztiSa}u12!J`ksvUrXam9m~h(U?45F!Psi47UHa9d_9T<+(#u|AtMrpb!9 ziGhH`3_~5n)QsvXxk8G~*I;$pq7E;((J(4VW6n0tVl|f4`Kz#By>)WHXO` zRx^YrIOm*FCg!GTI7YkJ1h$09?af3)7Qqap?w)zJ&S$HuZQGcLs-dS8N~N$amy1%C zH#av|*RMC5P1B^sVzIut4OemX{tg2I zS*R7E9`1poHLZ36OqH1<^IqMHmQs3E?N_y{k)z90>$-s%o;E5J+5- z3U!1Iz9L<_ZD4~@p)ycXkOGCM5DH-s7?}}c3^eozV+aj$G?X3Ev=`ODynhp=1DS~gV8Jhdhb)n4VoLNXjLKvM4YI~YVz=r<+?7dm9EJ>0c_I+j^5t(_; zU8-&^)64X*$svZz1NlTqPZUH#6hKi6A%KwduKz^{0)>GVN}vFaD2aNLAOey|EnF}& z-7_`a)phG`XUQcZ+|2ag9+8n}x%ZyiRXsCgdlj;>;zW9Qn7fCP5gC9HS+J*HEBsN{Jbk?R^qK6({fo=UCH0XrX|(N?<%US3=U1;^ zyn21OK14)#ZmI^&5Efi>iE4!kMW6x^36f5cU_?r1&pvwe*)!d&4)iA61lpv=(TW5x zQs6$0<9_Hxo5M&8PZR-~oOu}X_3M1S&lhjFKj3;V*`Y9ERArmSCiaL!0-l_&KKZoy zJPqLzu{^$S9Z*1D;#ZQ0w;)|aQ7ne=86)1$j0e4scC01CX zu#pGVL^-yl;pUrNqI0{;$o1}aQWop96Q^+UtuCJepytS$m}xcfCv~B$R^9n#ySvU7 z8ltKUC}=E6JOf^RY~6bGz*9|jvUB&J$4lf7^P7D5zJm^`3K6m%D==fuc^KP=lJA4s`%jYu?AE;jSU4jZVPYC055o`=(Dc!>k5=nP z&p!L~v(GRef>gK>`5_XyZM8QO5HDB)U;%!tV%~kU#_j#30z5KYIS=)erytU;Jx- z^FRFif9G%G_kKG!Hd=gjnfcHD`EUK!Z+-IJ@BeFm`QKD+F~kp_$hEIs=vRlWk8sIk z4u)Gn=K?78KS03^Vtoru0FPRx;RXyovc)*${(#*c{g!R!USoHK>&w_~ckP;rZoQT^ z)qL|S4U`l%uxLhL1r8OO1_u(56mBKFE_#bWjd@rJ)>x_ErYsChhZ zAW447*nZhQxc!2;{U3V!Bl5mJX$C&aSF=h>c*SX(Qf2 zIv-lI6rMaM4~>#6T4?5&as-va=0cNX5uqB=GBqC3k9l_(4x_zz^ZI%>TwQOs!(o6M zB_kq`vjI>qE}K%OtUye(QLeh~(Pn+NS$9opQmJL;EWXv4Uv^GW>vuZTi*%~02?>BG z+}%f6I!@d@=bGks_9m7Pi|Vhk!|X9))yO_XBc9pmjQ~W7`CJ<~!psP``+mPK-ruHa znx>gUE!~$Qr!SG04{DRWu>!SKmF0X%t5N`<1d_%C!>tqUEb!Nqk}3O)L;6$Dp9whO#>HhYbg1 zE>hAGS2~B=76I4DLI$jPPDwJ ziJ>EBBMDasMMOnNncz2*bUKl4v7#~-vpGwoDW!QXmbPejPbqa>2LSZ#cAN9C+wIB> zmW?*{Lk;+b`{-m8AoY5^K3i`}@@JCOTt*5C_OVD}2q0_%fJ`ms$Gc}AbIxYj%pPRF zV%)09^42CbrG6=@UQCpdMKUoGy~G}}W9*4uBm-HJyBH-<{Jtcsu}Ip6$eggQ6Do-z9am1 zzDuwOMtqOND3-M388r@cB^go$#=i|>G!{j^YzX%87`5M+HMah-NHP3$Z!~Puf9r6 zGB|CFaj>EH>)rVJRa{={Vc%M`y+u$d85m$tTn(m=&exxQa`r2q=_ikK*IxOsAIDbH zqs``%X0^$@`ttei%jcJ0em!2i=@7_ZNVo$vKCGk-E%OrO$r_&b)cY;B2Fbx-xVs}l zNTfm^(FD=nbKdV)oAr0T_x;bl_xYobKYsoCTP3bDn9P48sl4V zxKsiZrIZq-vtCUAVIH&FzNAH0McY^k-L#vhk1nrXkCuaIwUrQcs;Eycri5rjwQWB7 z{Il&iY{x!ZBt&RPc8AGSmx}?yi@GR9xzLJ1wiy&kVF)AW1@IFLN(EsQ6SChRY4KQd z(waoIYVV;n$m@OEL-}XooF(Huihok)r)?&>(-Cjq@FxWI5TL@W5V8=@M)^JT;8rMr(#zsi2ici zmU~i4vqhpfeP=5`L`Z;=bTUfa`M%DAvlb+kqz0Hk5eC*;yiwAC7A3qG2-HwmYly0W z&Y)72P1~lXZQ3q!pTLQsGbo@2#NFv0^({(7FKc=15TJx9>*8ow%tbxYqq>%hkO42d zxYhx^Z(2i23g>CFS1#v_AVZvDJeK%Gn`C!z%Q=y)uq72FwMiTI-53C)O{*;H{T?r` z`d1gb-FAC;_2O{7b(1WcL!8-&wW{Y{6-m=7rM69-b}6MFeD^ztL;v+SiaRX>jmT}l zjgusd1fcbmtJK7xM_rSFnG^t^GiSKBRSEo-JbzLF@%HtlytLGePGaNc-@J7M^GN2~ zz7=_9iZJ7{|D{Q57IY^Y=xrV6ZMLmD$ zg?Cqbu&r&<*I2UO5iS9QA)Ld2euwQonux8~#U(adTy3pc_epkVhtzhEP81|YA{v@t z5S)2hhc^r%NVI`eKBbBn`>@etM;;)1qK_~_lOo?yq2so7``BhA%Q2DlG+#u-0&T^B zmvDWXdYkmzkh)guYLA7*TBm~6V8t6vM7x`sAFLk{$ahcfiIr)37gqUmx-{$WH#Mn; z4dfSRUwSBievsj`W}7%(nE2<-EA{&W>>&&J>V1ZEFFnhuzUdB`>$ShHrG6gUx23;V z1>~OdXmQ`Ir!3F+qyEl?)$VjW?~(1pYZdwOs}e2h<);cNTpjAdfOs_7Hj%rqq*zfp z#fH%dnsCjdMotb5lOpnkI9*dmM|ch*D4_z00JBGkhH8fQqhDU{-dtQ>?}is|UiG6L zhQT7J2}zQ)WaOL`6c(&r(Tc0>tLxT}A8(#KI^T4u5sFNOjKYE9vRdRoki4Mel43%X zLOcPXYUAFxduH`$&V_i*j^h1X__p}@M5JW+nCvSiBDdM^Det{ETyHk+6<2Q2AevUq ztVFoZSW?t93^KdfN-iJOf-jw<{KW>jAFs3IC&&FBvsx}vQYja?L0P?eIp=ZkqTRT= z*+^0{vwCWzX`)0hKyG_8)K&b5J;W-Bu* z8W~hbMNtxq>+t@`sx*{krpb5j{o-y{mEwCIh5>XlFI93&TBV3^7ZDSYaHm%IHj#je z%B>Dyt@6rjo|u%ZVv+Efx7--~!k#P;O-T}fs*jd*;yEJV#V1WOC$03Ls!3aIQq4-W z;7gNCKBe&?Cjo)8t#~*$b)hOjbb7}sVXH4uLdBcdN_}QdX3tea`oT$?CIZm#?iw99&|%kDLg_{+~qr0(p@c1A-CV`iSzUHb_}*&vfml;N%x=S&`+<+1oPGB3!G`VY zi+w+=k|rv$!>7ul004=pcGt93%k^T4;NlBBpm?VXsxHBzd`@UZql8!oXm@m3@Ak}45 z<4S8_E(jH*V}7j&R-pY9b0()*UW>)e1qQd0{-ABTwrSf&lVpkp5YDh-0W@((KP>rx`f!yLB?=~*8FAe^k9(P z%5pM0Ao6aE=dUmR`Io!j{n^EJZ)2aO-?x%dw_!Tl=WZN_Hlmei+V=6;=4^ewUbX9X zy=t3&zu#^5yX&h`%J#MU-npv~gTR>ofy~nv=4ej6r z6ljPRXaJQ^haqx`EZl>8#17oK4PYk<95FZ3Jl^a5m3t;vq8NFrAW?Ee(~I$Ut^r(^ zVa+W29<-WF(swB)r`+Hd-|o{l;|@0dcDKX>U*M0qLi{@A*s4c(&;VJj`Z0Eg{%Sv5Uk{hp+l#C1zVG{SG_xYg3AA`?Bv3q7QXqHX z04zeuh-i|WtygF3Ri{Ou%_ZEIliD1hQz|~TDsHpGq`Z7daXhya5fKs*%9tITQ`~K3 zq_YD_Rfl0H4&c?g#bQoN>gk9`DSg;doYjq@GElSxO{SEJ4>*rL+xLn~IOjYE0e9VM z?g1$AosLC`3cTM6To9*HwI;)t;;t-_#Zl@|6c=@QmYJE;%(UbqTz8ym@lHpEM;t}# z8%KcOl?o;9x>#B%T37lnDp=b#X13q&V@k(8A6N(hGF7H{)0^tai5^|Qltf+S$}PCb zz2hOLTu`ZzW3+UQDbGcjAQ|GSDoImHC6QO@yvA)$aO5(2%qinfM~l1o5=lU*L4u+r zA|$CmQt}+Z2n$NMg-gKP0Qz|7O~jK+PAMfxT71(b7q%Dg^-;H@ES@`!Va_k@v*tU; zf(xbi#fM?Y{h>tqrj(QtQ+;AYl&sWU((|*kwr$T=tCAgEL;_}GW}#BB0vW3qHlx={ z4KGl`&tUoH(x%ll}5mE0u zo}c@D-@fl2O3yo@c;DXt94R&5?l=FsjJvvBIi`HS2T>>*aUJ3MY%Rs-#AOD4=Zj zQk`=`T-VV|9hd(N2w){O&rzb7j7qGre#b!YJJ$b)(Q~=q-%iiPowqY6{88hd$Mres z7T+vCxlK>L^=z8d(b>XsTJ?PSKtJ|Yug~$9AZvJ5jR|v>FP^C;bQr>&Z~@&8!|(m> zj{sa;T^kf#JV4Y zkVe?Jktt<`DM@4+B$A*}Nvf7PL=F;4Dng@Jty~aB2Q%oPfeLYoAyT*M&d%7hV;I_` zNkSrEooXvm;%%FxZKF++R`}+{Plw(9aCy;huhAb;9vU;DA;uC^35Fv^Hwbmr{@^$M zygWW{&eo%Q48B6UUU!eWGdt`rzWVy>FMcw)yP2{oDWSpYHb;yNe6# z`*Us9B*%jdE)gEZcT`+aMK7wUi>8$`k82tAd+R(p-R}`GVesb@pUZVP?U&`6f4k70 z5Jol#WyxLrjy4rnBYiT76qf|as!XufB?>^;K(x+!`CF;=B`l!gVuKDZ2`Cv&WVL98 zjacN8NG!4up`=oh=m7Yb57$?(U$?9E+4|YX9|`+@I2`t?)KX#NpcJnbTMEP%baru( zaJpNV867O!poDTl;4Y+*0kTF^C%{1itSAK~KD?N0ptUw|L@*LS6o`8)XYii(;Pb9H z&5!3@ytRLdPd*6?KY_m(uvbXU)a z(R{EN0)T|TIak7~iMI9>FUd;j@=@pqm)ef%H%`+sxw_-RVr=c}-%Peyoux$nn3Vx(w|`L5p91#P&hg=}8Fz(!y3bv;mCdSCm}w13}WU!5}sy&u1NyZ(MhMznX*b72n&0EQDJ8Q=ST z=lUD2PC9jHWNC^FsXS=^IQDw@b^sSY|IdCV55 zDhObRF+77lu4)p&!N}!yOPWFrAVdBE}pcjA$FJswUuclA;VEvF1Hi zRnZ)7@LW!xnB=IKv}pmNFQ4UH5i2&V!rU3Q0AXwp2^gvL=TykJU} zo97hJ5u8h$R-RUB6)$2iPTDL#94B0+g#iGk+!Y8_N!qqe^4#QM7zXL*sNXr>qXfB% zi1|1}QERzk=RE!!-q!i)xAk{TMM5j$@6iF|o&ks`Ni8ABIoy4ZeMDGstyzq2rXUTt znrxLikw|WMe@~78mx}$Lc6Z!i(Os-(Ir?QuG>tUPYPOW#%u{VNQ>vvDDM1yg%IaiY zG7U`XJ_C7Dux8S|ZND=F;T~o7vkFv+CXHjbyD`k7#3#F3fKD@$QqD#vy(Q#NF7u4j9boQn1u)7;T+vymSbc}DYZ?~ zj!B!gjibFf`|5$I6A)M8?e3CBQk&W1I5KMcd+a2UrCMV+=PVTOCS3)yH|tyb&x zy6c)}Pd-*gi z_fJw{5R(WI7mmVScp&zaJ!4O1kqqX5QzDe1MLu@AgaBU3soX5R!8)^3d&^*A`u8~W zUq%4GqfO(#`FWpuc5;8b|NSS|-ZGwt!o}|B{}$Hr1N)i&@{RQW%l1dM-G)K^E7I)1$^ke#F=U8qT=I>HfnB_bjaDS)~v-%NNbl11*h@#I-pV9fTxoBCTt zA4LEfaZ6hLMYV_W;eT1%Y=$fUGk?7gZGGzcUG{*R{k&a}o#pSPHUf;}h_bXI1Ykjy zMqIzS=(jbwzX z3Z=IU6(dJRw%oc=Qqq=j!01v8QX*7=$m9ZvW^&yv%V!4QMAIbcngKq9rMA^f3orS6 z#e>-?h#~sj{_^#ktIPdYKl(98GaJK4ja<5Mn$rLu-7MU4_VBJ-ub+H${>ihwCL=oS z&eIvpZGZ4LuU>xf2l@J1F0a?a(2{9POuXiDkKSUog;+ z0(t-u89p*1DO6I|ef0Fn)2C0@ZFe{vzW(a@i|1coynL~4so6TF4#3d&yB(cP(-Ff$_<&T2r>!iZr4i>FX{V;8`O5>CMl60l^V`K04U}j_mYA5iEbolotyhFl(XKn> zk?ztYNCJb@@LbX@(-B|_jHC5e+k?dV@ssnjXXhV3eROdd{UHYTY@=JFa_8(v@l+RI zU`ei3;lfh{aJg-ALETwHcP3PX`(!LAfZU&RmfzWC&pJ-0>@7=zQ+-)1w4a(^*zI9)s_DzQf@=&a?t6H<10F@PW(VG)@}yC4hxV!?-()R;%-Kt|5Al$x&V&d$y@ zn+~mdU=$`Iqm)K+2;(&T>&9s32Q7(kHaL^}A-EKD|Mn_4K3iKN? ziV)!`b&t*-Kl|j#S;NaKUcI?K9Cj~XydEr%mV>HET+|F>cvq4NmIFn~@~HTf;LTUK zbG6*Q;a`Oox3t3h24PQKzwOAFdOLEJc|7x3Gsgkr;qv@9)o#05qlTEg z`-e9~vTt)d4{pT)TaFEz%1o9hQ9*%CQFy$q-K;N${?Vhy+BRQbUp@Q55C8JN{Wt#Z z^B0%@_x}kyL?fc|kN@#M`OV+_&F_ErJAd`x`fJ(!k;r$>xyR!xv)y($*kD1Xb#*?1 z)#*uqe5>{N8)y@Ys^9Au3Afy;Y`V50kc`w7^9?o zsp~C*%jFjjsinQt>F(nXe^?CjK7I4y5x{r!{g%Id%T=ns_4ZKvCwYA1rD$<)riXV8 z;1_HVxX+$*$2kSyIKL+}`LO-?^EU|~gjEOx2!U&agmrY+xxU zB}&a}jgIPuAfkvyrKA|eK}XTY8N>+m)*nWHdGY3AdwB8Y^7ZAeAHqeGu2j=#eW~Rc z0frZ_q(VBXhg*0?E)_m0B8o&wL|Aqk4NjN>JeIjF*hmcuf=Nxs3MZIcIEEbv=qH{_o9t%x7)dP za;1{C^LSzb0GeL>ZsYTPLsd=7^N5q)advigbUKb>EyUv%(ZFkvcbTt}v5BW`Nu?Xd z=se)Nh7+n-9B_T5nstQSkVx_~y7)p~1eM1tg|X^VoNa~9@tWQ0XP7zi^n&k@}<2ybZuI%){I&MxBN=MSd_J%rTr4x zbWBc?&D_Uv9EUtu&N+L8N3Jr>Jc-{X8+IbAj>Jd|;yt-1_Vivjgl3_KI7M8<1%QH9 zO1ne>)j*@>)G4TUpNxc<3Y|Rk@cW<|z;p8HD(v0Hd@b93@vrxJs!tr$59|Nrr}xd| zEj;x*`oE{$uEumc+3#v6v1>~@ED?q8GoD-Ye8+?D!H@r;^?y(M_UL&V(|x<2Ua` zNZvbN_w;{XJoH18J>0QA-v^02508_Xb7_Gn_Y`uSSX&k+_Yxdeu=a|mh^it5&SHv3 zLC~ltn`R4=I=R@haeAex~f5&(p%HQs5 z_pQ%&@)LeL{N$dt9Mvgpxp4h1#AqI$c=AA7jO6Zix{5@gH6D1M@CN_@AOJ~3K~#`V z3L<=T2{fY8v_)jGVGK7(4I&2|Y$T@m8zEJEG!-@REa;v-`uKalqR*c0C738}GLV|! z7{?JpinxXk!!V8{Rp6E*NMS@oO>rzCQ&42ojL^aaNd#dIRWgt?R5Bw7X~Hu~7Mide z9<;2H#Btbdzy9j0VHo4$qK!}qDo79Jtl2!T)=jvX$2e5H=X$kz`t+%x8^PA0mUPT^ zb$$5y<>B?4!;9yelpd#+g0bJ5Wld}vi9@KAJitYphHF5irV$PZO2j9nx*QgW{`cT- zEgOoA0N^5QT9wU4*WK!@d-CK-msW3Hy!`4XKiytjHKLE!8}BcYS#mIkAB^TA0vZC2 z$d%sH5Z)GE@?PiBtS~I_m|VmG-_;M_%Fk>3qJVRS(YG}(fqGRLIP&Mpke87?C8~C= zzY-{^GD;kzB6l!EEDZ9fQ9!ZjU*dY(;aP{iNekGqh ze*Ek^pRW+tU%nXoYgL_MaR5}4hJ-ks)M6bl9PzoVxZprY#FVZ(yjWUlOwWAc)T&@0 zDHOUFHB8$!r4s%tsOrYdX?a(s4IJmIw#9k(E_vyA-c_34-G2#rC6|FO9szexB1G7< zB(JZpxBHz(N}@^;2Ha>7F|x^;8Y@dW}fAX^Z34;k;nl^sU=&^-Rc8&1dsy}7#YeixWTO!ppF1FCfi~u=I96r zrAg~ecfL8>Y}Ota9HVFos)Jr*hO0h#IxQqgl^U$$WiygOC=ka@TGmm?w8vssD>Z-} zD3Px`rbfMKQaL`Y!~`PB&)Sp{S1Gv%%yU>ail}8C_QTcXaA5c9^{ZDeUiba}FqlPT z2sIfs2OWgmh(C3Jl#=Uk-Vx=MIaL&kN`W~{99H+>gWAcN{&o$zJf`rg+uHF`KjNb2 z_m^kNmHYPlgZ1~tdWiYXIqlG?EeSl)>yL6^+%ue`A^5b)K;aUscI&b{-%~%jA$iUZ z=6mzErB`Xv4r-#E6D{Db-*Wm4KmebrWtY$80moCy-}83I)IK-tId?~3-``^TZB%c2 zKmbMp1SOt?QL7F|@fFk?i5ij>fy^couB|1{v9)gfgWvdbf8}rdd;k6Rdie2gqrYa8 zvf+RK-~QMC?(hEUvrj(yjX(Dn(xWFG`006b;ZOUtA9ndLIHQzfECi6K5n!CkiOlbe zS|#*e$K`$YtGgwg>is>*6;XLv*L9E1&(AlTUM0-XAF$uy^#wO?Bz2>-`D|z19_f&q zLzZ^$7?BUIR}CJeI14=S_y~DTG-{1#f&dovQ1Fc0vjy}z#+~Oq!jz;>-ft9k4&3cj zIKFTA$zJ7Tny(u(aIAEGH2Y2`+C;`8aUECtOktTqD`Of-QF!ke&WU;ZefY_Jt;mhH zBP{P}w{uNZ{rx`v_Wt&YrIvTkIBR>5eTnb0J{SGJC%?L{En@`VgQ|DhLwK}@91Zu? zn{Z#ddp}ZQ$>EP~BrIwGAN7v7-~J;@o;+QNhs(F`XbTZ2COKjL+xx82S%07PqkG2l z*8QR}XPJS76RzPJp2!ARE7ziHXh&U<9nfYp2*ju)VG@og6*?Jor+7_yPzsj-+6E*f zGUJfP>;3LxySwTSU%h;_8*F>9{pb!M8xR&|C9wgUR#T^Go!XUlO-c%m2`bTSj=K6jON%&hzdCikT5EQqhY= z28{^!CL&aIcDR;)N|tCdABHg{o!!85#^qbC*8A+|dgJ~nM?#hK%L7HEZM%p_Da{Vf zDOGj2yT|CBBP{2kX}Y;q@ywUr#~WS7SvhtUJnF70FSeBDOMauSTStUhlXK2C6gO~0 zSoH2bj%GF%cVkMUs;V^g=L`HOfPnHC+gipT5piF*X4H%VD4^_!04yS!rY-YTrlY!n zBZrH-XLrj{DmoXNYD!bi?GuHiSV3oC@D!B`+{ZsBwpLzBrcR>Pv=Pxn)i9G%(77xo z3meA_nuv(BLAGrRAsHfNsUiddsY+onw{t0(*TedzJvoZ8&I42G=HfRLmO>SPkO~!5 z56h9Q#EO?}SK~Nl^I_m%SyWTorIeU-PU$>5$7f4Uc(E_|(gEN1eQ^MLu|<{NH~@$g zg;P^X#r1o(-mF%ul#)!7UY=D}A*HOqB4x!qf+8b}hy+T)=W+C59CP;3t*rkjQ&SPV zoKW%KRtsVj9E3x}p58+aZS!6zO!HetQ2*gH zECG0H5SS zktlJ3_2yz7`gZYAzii)7E5gBY?VOrE-`0F8#&$zNA+*Y}HTbMr22R+)D1A zt!Wan+c5f=+to^waD;%_9U|tg!2|{*QG&_gp~=KYO=+{~K6)DG(jROiNmZdRa)=n* z6h&W@o!Q{g2t7$443Si06oi7}q9K6^AnAh86e^@DMd=`2#gjx5kR>+RY|MF#1XDFZ zkZIMm3=8`1FkD=H(ljZ@z?{P^yaqlux?Zg#oB1|JM1bI`X`gl*X}cAWx7+Q@uXitA zjThJ2A6mnA&mQN)VYuGHi|e<|J`VdqAzs}@K`3BV*@%$S3G`~25Y)QeWE{-^RbMH# zHoDIq(M?Hjnh#MbY?=v58JqI- zYSyfJD4ag2ukXky`r+-q8g+NyytH*qY*TCWGf@3YM~+sjL{ARgNo|_~c!|OlV^J3t zHP2YFZzG~+?}{*Z*(KFQ@5*SDO`Fx+J8XPSIJ&g)^hE+R>&L=r~S?9Nb5tlV!LbRniFV1k8f%Rv_lg%@A4 zuiAFA*3Ej=_x;87@z*@M{DYGxhVVt!=6IkYFdJp6VOZWd-^CGLQ#4CR1ceY0meVh1 z3Rg{Q#9$eol}scNW)`qgyIP#Zaa>*Xnk;fjRXA&kzF0^xg;!HZp{S}7DykSQ=V2W3 z2&bqvDXHo>K6C3}Hcwl22KDF{3l( z7=lvJjYvt_Hf>gE-CzuO522N602U00qq0j<=!x*zV||~6sCa+NB9sV^5(_`6;!^NH zBw00UR%bAaow0x@iY*0D2O|~KHt14#8*|x%0wh=hQjl;41PukqMCN8qdvyM|dwj_8 z|NcM!R0At%+p}k8w(EUh2HTH6`baH%-tYQ@<#0BlW21?J!{PAa)$8mgNSBwF`|B;q zpjxSLMTlAPTQs6#C@h4WVwXZlO2DI#OY2)#6CHsmEG7i70^(zoL=1eZvHM@jHtW|q zeFAlvP1uE7vdVnrbTyv%XFgyk@8{b5#kD)fQ_?Q_v{HP!cm%xg`15a8iTOF{GXYBK zNbB)k9EkHxEQwnx+ZuNL<0t2rS64XfzxV9(zTf3$^_Tw2U;8Kj*FXNkeE8A77`FXt zwYs`K{Lla6KlsjPpZ>{T{k5iPHmmcefzKYbTgcY-+i@7-fLD_!0}(=JK%O2{d5f6AD20#L%-AK(yJV-DAg1$+DyeJR^YgShL({f!ra*h18SX%c5fd9t$&9agk17mnh{s%OT@6dGCAYOZ;W~W7>)e zS-Jf5UCVczT%TJNO9K#A?e(6|sV$}ZZ*t_{wgUhzMY#@;QHspOR9hPi34l@R=oaO| zZqVxOO{#%zX1g+H37BrVDRM}4gSduic#53dH*RZiqk5KP#nc2Fj}+dDBo~ljj>u8U zUPNefbR`7D2&V+}kUbz~KIHLgzx(?2n-_0hy}I6ymUBp;QEip#NR|UWZklM6>qgJo z?yOs#tvBc0X4SU+VI0Q8)h@QX-EPd8fyfFGZ+ytT?8KYs7;QqET31zZ3W8C9zm*Xe z5I{olzQqjcA}2Ymd{&Px;l+2%;@LdH$hxl9D6O%iQ)1z!>CDW>JR)phZgZC!Y0~*- zH7V@JPrqNEU5Y@n8xp|ees=eAz_FyBE|qTQa;nASHR*K0XWFr^o%V(Xp! z3M|hJ6or)a1Ps7)hEPg8uz)7iFf$t5-EuMJmh{?H=&c}Q)dDzX8HiWa{>Jp(C$&Yv z;DL}RiG?EqVWWeDAc=rXs`N(Sd4Jt26@uin91(6dMns=2rPP|C>k^ufiO*EW^ZdB_ ztwddq<2VjBj$^6$J9zFIjWDx_Ji0T9Xxp_ZDblKI&d(k{KHr?J&sFIT_Z;qENX2|F zw6MG6eq8EVfgH(F0y?T44>cDY2zb$UZwqWUf!dh${`YEg3~!nXVlR=l zZxQ+f>1Y$?aiQr^$VA}~6MC&6j;q=-Q4O537y_8;_zHlKB?>0y-%g0&oA(n(1i{Ub z-t}Fp&%0D2Nq{31jK$_5XtNaSCpC=q__;($o}^A&;H}8TUke?|g9?&m8Q*Zktd;*Y z8!-c6W=jfy7-yQC)Zm$_l-0MJo|{ilV0r#kEF-<@J1)n0v++a*Sr`jVr{S}pxla*@ zWt_*@!IKn0^}7OqEg?O(m3%HnTXZl3a2i!v`o9~~z@_4G5*505qXj)Hgm6YCD*=^lw2zbXpD9qT!U=|KfrH;F~On|}tHML)Op zds)dW^()JBZ=E|q0CTOi!l~x-*YiMupaI!c zp#>LU2qRnsBeG+F7#ZRQ522?9LfV)G>>7nd5X#0poEcg`9vR$ig9yUUDbHCG}Z#>Ir2}Zz&0Ng!+5+Me_ z1vZI*QV(xd4&Y?7V9|^7{luQQ_-?cQQWfoK-_LqM-lP7Tc1C1KeR3S{h^Ua7|F~KAOb>BuvN&I4~j%7`CMZ%WI|=idT8M+C1@H~ z8b*gC2|=weToen@#%&y7A%Y~463$vZ?}pw3I*!BRCr>{6CVaFS-F>am1`d%*`tajde~w8)BPsB(4Xw?$%^=iMiHK1d17o`P!0uMBmn zr$zT@0Sa1)mEsIBAg@AP!X>iMRmJI%a|pV^w|#&W^lQP=5@2>ETIGhZa_b{E8m&rn zG)66mED%JM75ZUd(q^Si(@3p&XzqD`JphnEl155QZMK|E7!wfuRE80v&&{aPHQUwd zpfplc3pdslVVK)54_?- zGc#r zU)l|p`b(8~=a`TB-04LMdCI#25H10cGIz=9PhCi2HA(wYR$S_RljWo8VUw6T>CuJb z$s`AQWD>{x?wIF&wrm7KtMpYo1SQ6|N`M5%ik*N*Esc@PkqrSgjB+wTll*ytq*>~l z^P6&tCtK))x7W`dy7}q(UNnMP0aGu~2O$_`mXbuBUq=9RW)OrY$dlB?E^oBKIo=G1 zHllm<@l_uG`hWDF{=NU~Z~yL(eim|25yQ)`zI^rH{N{iC7k}f={`J50p8&WT?R%}_ zQM%YQmpX1^po%MnHPIg#36bDs!v=(sg6g3qzk-!&Bofe))xjdd`kX{tQFw&q2&gKX zG`NFssv;0c!j%eS$DWKxbfL2tZd{x>=hxfePydBK_xZ2?>R12Y|B>2F-d%SqA1+@G z$-r^dnZI6-;-Eq$M27Kf>t~i@?6@CsHpW%M%aqoN727r-;-bZ`rUWhqwTw?U@?x96 zzUZHwKlKnoV-f6FOF=w2kBh5ti(L zLCJwCW|Slu5V)6!%zSheEVZ`kKaWXsoZ_^jnbzmL#uf%&F6~+;yz6L0s*=X7{a){$ z^sl<(>JLv6Yc8yjagV+!OZ{{aV?FVWnC*CPu@?ad%ZvMu^3p`@vW=DV{d&V*cc%;I zxZkUuIKS^Sl6(2vvRdszK9315akTptj>du$FMU>U9f&FBzv%6yd`!U-Xn9DGlQAC^zH7`eYUF1jBwXOL}q23Q>Xi!JAG#cgYnx| zx2jH7WMnKJzI^U3o(Z}XO-Wn^h(a?ADfOMRS$}lC?a$6GpP#*Wetvd!z1gNAgP}c1 zU7rVtKt$;l8QTyRxqGx+JUKl+J~|2-g%oo|`&QXwzk)sdQiX`stS$6htPwo%`!Gwm^;4Z<(?AAW=t1-_RLIVK7J({J|55q7F zgIlJjAm$;7J7I2p-vfz(M-nt@BdW^A2^i_l7)p^IGb>iyg1np=T1N@2vbTYN5~|bw zb-3p=kZgi9VUZdc2JQPkr8H!^nVVRta%^r1s(=@VC{&eFu=|D2)W8z5I-3jsRBek8 zFy$zIS;wdeeONErJRAB;eCQ4N|Y!~ z2;~XgLDQ1x9HdZPIPPC_QfLMUbA}T+n}^ueL?`ZE>f@H{r75BJC?Mj15D)-(PAN&3 zx~@yf+}$%kjhO z0rQ&NE09zP^sqjCl!w&!+rID3ww7~=v4-VRE!b_)zKJo$&}s}|N7BK9iU1%IR5iI> zZ8uj}S2;Pw9X|N5?KjkAP^v@(@gye|dwvYgE_+?Ap-+7UQEH;SJ=PYVgCvO{$;6)|2wfz>iw@Wkvz znlyJ8Wl*Rv4DL=D$U&qhdNK(*4QHNvm*OusAX7*L!ZYX@Q%Hi)+$fY>^AypGM|ljr zsMA(YAsG>(N=^>!xz*bzO%gTofe!Mki2w#309pDe(foM6t=!Jt&krGvQfd9^+?4IXqsokbP&n%3Wo`*XLM#U&%rN1isz2mX+!{_{&etq_yj z=dX{@n>Ws#k7m$aBa^qr0k5y+uQiwD81GapIV6klH$g=U{!xY3c`y(L1sf_IOz5`* z8NryvEk=*gf)pW3&COv%5)9&jAQ>r=(S)c+D{lKFvKfZx5RGnhp;Jvb8cSS2cVtRt zKv8><5@@7FMW~j3(BTDtnYU@UCPZwooRtkUIuyPZt4e9FTIg@QE*V|3*`XVq|N|Lil$xKu25`~J~mdAQZtpCXjfKWqc zs@I`DT}cV$*~~1_5$HJ(knHY`KIN@v1ktvUW_h+5*6ZVU-+AZs_#{#`mlx+}&o&q5 z`RbY}h14NudNIl;S~aDNpt16P*P)q}teguE#Opqs?0%c+#=fg--W=xif@V6jM+mK8 zuVQL7^K`O!B`-A4Afy~E2aO~bcl<`$TeCCOH zSPNdz08)-rffc)y!ZL&|gh|Oby8Fp)d+lIIC1St{c*>o?l>sUaNp6-cn>EXYh)~Ue zoO6boC9``j&plGrXxis|mAGv}JX*!0)#>R805GMC>+^g)^xHlU+uVW21~*D^dpQLn zM$sr*auG`)8lk_x*Mlx0RF3I|gB?PW0^iCSZMmPch_e?SuV@Ne07+J@+ zR;wTPbg@s@18y3X5|ljyvCYIn^C@eJ)9H{hHe#^1C`nA)tPskJHwnLtJ2z zMVuis_2NLFOFVh!*Z$MLu{}HgeyY%#n=fCkAzwzGtAN_m(;jbMpmuEl& z{KXFzgUOFxUJf#txB)5k-SuX(xla9d=z2>zn}Qme^=f_Eu8*~CR%>hqO@kOs#Tn>; zXJa54C>1Y@Z0=&oMUX*~25QNiU;yEkUFe=O#3}@oB;I-V#LqU@m#@D0%YW%RAAh|4 zSKlFHcYco5n%xzy&+L4O#ae?{voMvO^lr#Q8dj^W)wZ=wuZze{tBqnAtqCGh(;q@% z;$088M&MQNo9u&2wiID_|{X-IqBP3`uj&DP?zwK~xo43@OrAQQlu3pDe@is%axd;BI6lO^Bd=w1}-@ zoj43bwjmoNo*;x6V~A0ks4_}6|SXGrwGb>Tb z?liN(hLlnPMu#9V#t=(rECHD9v_*^}@hrjb1LeWddp$P7#bS}OtCm#NB}_S&8n8KM zGs!uJASK^#jS{30T60N^83alsHXvTyX65za;`Fj<&0^9NQ!F8>IcFa{i80f~HLJ%Q zLVy-4R$xt(L;y6;1pDVm5-amJ;BwAz6KE{?i%p7i3QP(hc zrHE*VHtH!8xqGp{jo`v*E?j1X3@T20FZik`!aFaRgdieRNKon7_kBs|U8l>;R82B+ zLbPl_q~H}&HA>Jlt+6< zZNJ>BJkdiXi`i4VjPnJ|jWTtVUfaxpS|<1S)t&9kXQZ@aWHtZSY8JKS2i{<>5|!Wa z{cP?YOtTjDj1;p`z1PS*^!nGgGtKYx^$d>iW3AHp`rN~U+|mA*Tc5Yq!_UHaPW`Dq z%ZUka*7`$z6}A)LF=6({>N$*t|+TKsCU;qKQ<=yi>c$FUHpJPMwDmY(`pS*s39yo*U zdVpJeDE)FdL}6p;d5EZ%|QeHeXdlTQt$ zN=xl9_6+o_nrIeUiTJUyTZOI)mEN<2h!7nS*%BRybp6-A`ElDUV{C`+;^o<^^B2#r zFR!fc1DrXDr2)z8Z*j#x%S61)OW?|0AbO=fdZ0cS+PZt zDw}2cRe^;|LC!+lVMWs`){|N)hq!wHW^Q0hP8W(W3!PNe5E_XM=w{|bTrJ-D@conH z<>vb8vp@M>5GjmTL`%9#ra;lodrHVx+m}E1v{^3R{R`hb`RJq2jyadF-XK<Y=0Q<7$z zi>J@8U!4uZAco`&E-d)rTx#W(e{{(i#s4lY4)tW-TMkrJX__XsO^hLV5)l!IkW_*0 zczE%h)7;Cxn1r0WNLUa&m~3HtG8Ky)Gqq6ETw<*3>oWrpA|VQn<*8vr2C}r_#EoL! zhV{wuJC9D^T`!K>z#sl8Up#yH*^j?ORw2)jZ?+Ait(Sx zV0(tt(zn~^(QJf&EP3oMesya+AE18~yGpT&R=JTPEEoj(-XNFT@1A#WtJABMYUZQf3)6I_`q3vLhV)6>8FtG{yj{L}yWlRqB5_lG8c4?lV} z{5SvO-^OD3@n8P8-u=cm)xjPgH2AC$9xt9>Za(|$^Ut0>d-n9RFP=VsdG`GB`s%9d z6C7+bw(aUTI*l`DnTRcmDlf`Qg9#z5nlff6OK*Ev4T3Yn-3;aRFU` zg0O(AiK4eI@C42BVOohll#0 zee8x(Y@=*H&RU7_ozBWKx07#x#WL-?sjr3XQBLPs6v{1{yh^njv-5qTx|Y5i%5Z-2 z-jY9WuhIw8UG~Q5d)9OI4IAsB*WX2l>><-PZ%^MG-*dd@UG2Z&F>dM0H`asK1}UQ% zhBK)Wxa&x*?cBC6J@Dag_GfymyZGk=iHFXk8YeJ!h3|C-)z)17vjziG6>CQ&y%yC`Kl7 zNa?cMUTm(f`}D)lH<#Pt`ucJ(rW(PC6p zAxcVTRJ$o1o*fx*pD>i;tCz&Nj@wqynG-@yPA}=NIpVefl*Av^pw?F_gvmU#f2(?upSS|yV&1@KkqR|wrzlfCi zYT8n(I1~py!5UX=b#_S7a#`pkZ6<$8WfWyz@3L&DO3)_6U`?~=x~}UsQ>p2cY#6c% za`u#fZfF-uE&h8Um~-xilv3JUY=&WgC8Z;qm+HI{9X;GM#AUlUK0bMLe6m`s+ZdHH zmHTlb7lVyML~Km3F-Jv=hzmEfAq^!9dP+$EcQ z;Rz@ibf70p*a?dFcSCfvf!>!KSU*ejRYd^*%+k0C%W=DVzxVy#>raRF)YS5>a^%C; z*Z%K4-K?EGCGf{`0Nl~fn{VzO&$oH^U(nAQ?Hk4BYwyoC9mKxz?g-#Lv&-&%$t~c|6AG03M~S>HSws`(elPo&GR7WR|K8fBDYcr~S9Y)DQ97BI@lX z_mJ7~CqdJU6s2X~>xof_|1!iGp$JALF>aCWF$M$!6bi*5bWcVn9CT_d#X^KR=V7P? zVA{6brfg zmD(_4dPyTmE%l1((-q5;Iu;rmm+Z`rES?0}a}V3(A)G88zw_>U@4ffv(WAv;K@%~D zIg*Ka02^u$dd|suwu_*l+!yXzt?TqsQ->4CdpzGK5Ady#$3Cy9bC5cShy*GT017mC z5Epcy8C*kHw##5*PZXLTUs~zk7)z_*fi;@*xz^MwM2IB;upF1!&#=`8`4WrfGHx`ivxaKDC7Fi zGVm!U3U>Jiv%g&N;u5KoLVuy1iWHr0qk6} zyN@)0G#4p2R+a)&3K%>)%7!YK;$avtvktsoBK?^pk+Rosmieh4Y~MNMgsQsboGm32 z292SKt*Yjdx6MmAtCZbP%0rZFj@WxGkObd%(3RU|%Tx};pbV$$^*26z_Z#0hI&BgW ziGa0kHaY4bXoRW?_mVbQ=K#q-Hop@oH1jM}%3#^u+|5-2HN%6bHZjI1QcBT6L;_vL z`cp(Tb-9p5y&j?HBg5Ps`n&hDV%Wv2SN**+PQ_Wk#OP7g%wj7n(vTO-hdG2P28oTv z&?+tGA$6up1$n$!fAs#>mSGjNxxVgSz3Bho+uuojKWrW5QQI(vFG#U0P*Y0tN0^5- z+#sJ)+l{6ocbBo$!sM{rJ<&MkWd;LS^To3a;7t~{|Iz1d{`hob3U1%@o;2rpdyU`G z&wcr7_F4^puj|9~+bDN6s4EAJ(A)IK%t_GlE^|%f5(18}gtbN*}#ZR|=_AKruKp zPz|}0m#?l{%F&Gz}L^XF&J&ab;|TJ*_=TzEPFH#a)k z*yN$JzRUC`#N);4-AC*9AD>3Qip5h^9l6!YROB~RiU=jBYJ_G3b$nTeTY zLn*}T?y6d3XESq4B`vLp#8yZUUMvJTo4XgiV}7IYP00y=U`dQYx^ul%fSR}}i>vA| z6u+GphoYGcgXNru#28CyV2we2%-c4391j_h?y-2iW-cU4SVF1XszsqLd8So$NHnut z%ifxqjb)WpHH#!+D9%?^j;T+ouv10Isi>t@vHUeuq|>=ZQy#V$ohE1ScDtRTNT*(@ zYD!5<Ew=V|Cu0L2Q&`io~^>zWei(QDG^ms!38L6hO9_<&3FIIXg)+P$jU@D4~Sv zT5!5RO3I;{DTWS%F_+Sib18V=vb6U~z|9>HVF*E#B~5oR1$14v-S#zR+C66nAlgQ0 z%Hrv|?Pjy-x?#wv-wqUs8cf|YvRO_Eu(r{5xj0@OA0Hndt&ZBZ4GeUI3fXb9Qf{#7 zHX~Q?X(vvDTq50vk;*^?*#$?9^CY|H-M7+9K{Jm)V4EhCby<~);^jByBup#-AQZv` zN%Z8>kv(%K($hCYCm6_qNc**B@3$WO%OcY5MQ_^yyo(3gu~XoN@9#EBZvOoYo!w_8tT#FmZAX8(I&hEtnv^yYcxSgB~@CVPms+a2Hg z@odoV6}xtimFc%3NIg(0V)|Gy_pXS;d#qy~u0Xtx{k&^l?z2yB_5XHc-ksxVU*`IU z_NR=%eIlOkg@nBo`csjHx7xpLHoDiExud@01IAMycKz$=#`+{tQ&$2QV_SE4t9^aX z-(YZY_gep8cJS2e=Mk&py>B%zjnXc_VkTEjeZU;(7ql@-#n&Ud7n91&N4%T3GM-`A zpS`EN^<0%df0 zLV`05Lv~H{!SfJ|a0wwP7Ec~O{^7so1qD&Us*)FR^6OfNEwGARMs`GZHBImwcQoAjbn5=J_d24*57XJ=MP znaRpbNVcTuG&E~qX)Tl>hH5ZtB_MG4_vB1fNei-39E|GaG z+MCY{N7~mn_D|I*4*2ko@6mp(COgVYqp!vc?yv&tt?>lnmNC-<-7~5e-E%=wQwl&F zBIO`8)Z#BBYU%dfZW>jTf;HfnYg|K!O>Ea177p2V+e924t=siFN72?FfBmC(FJ68A zC*SjJPiGJnHX$V@xYJr0+!hcW%szklOul#g7ruV_;d_t1`Ejy*eR;LL>VsEDGnj|8 zl@y#TRl4h9DFBQjmom?Gw-DxrF#xihEM8L@o0*9V-Ae?p_t`=Xg!PH@`))QT1~of7 zcHHtt#Ks|h`$ijatyi=TdL#HK%h1z_+(!*h*6WYo2_H1W0@oX~ieTv5 zn1UpsOB;0MNhC|DtjwZqi8@h|8G!D|HYtHXpv2H&h$^beP>MWxar3K+PJx~t;0gqI zs9$)_B^y0`e|&1WDYy_S45fAyW;>cLC3V}h)5+q>p%DggmIz>TipxL>40Lr2?pa(E z8mO&Ci(%-<0F79+t4&CkuP#4*@!1!jeUXMCh_>2q-SI z_en5g0$F!%J$W0J>VyETgoG4>iR?YpPOrhu?|t@VO`aObGESkyWm4+;q&TvVq3XMp z3EWfOKAfnKRKUkRA%pP`ZZGSvDaf7!cj~(DwbIJUT<2n7C$DA2JQYb(wo<}dG+$*|M|zi`&+;BPyfL`{GF#~7iXV+ z#+TP%i`5ZUr&urj=mN~U9%4o~hjDj=Aq67P-)HuHt2YleSZ{{X9_xrB7+xEZ%KYnxj9K@?18Qo7MG(;ob(w9K=96Sdz@vKELFgWw5J|KC{=E=-q6cCz(*_kpoLptAX&aXEw zFE7q6FV8QouDf0sp+apf=V36jEQCm;5k~dAYU9aj{rL3w@zL^V5r<7S_mN}OOuJ(N zdvhS0Nv-4>JkV7P$T?M@QMFHq)kLZWz^gYl8*K2VfYim22rVdGL(z6??P%D9=Fe`< z9SCxIGh)j~a=a_3kVf5`oKw!37E($z6aLI@?=C4j@&M075P=7Usz@l_U}Kd?t8PW} zy2H3%%Y3$Q$l?xkAHl749}Ofz6b%d^ln`Kd?>gDJS}muPQi`gY0zwGI8;ntQ+TlKV zyHJSNH3%HC&(Gy&g;yXZi4a7j4IwlZ%q*oL=R6ECrDT?e-g7dMA;dvMvV|C5O%*eJQ&>>~XL%MWa)x6fPLeuH)pE@B;v<-7RN`Y%jGhZd$|P>_v~Ka z=Z*@#7m}6?ligvIIY`!u*QqOS$}E(aXaF2d?&Ne*-8wz@JUex!rVn%()vJ<2x*p9m z5NaX`NYE{|M{Sj1cQhXxu61X-uO-Qu*BvMYyQt|1aSRSzB>HHQvoSQ}V5%+%Z`d`q`AMu7h0KDDx_S2$+{pT3camSx_A6|b= z*)KDL=_oS@p+RO6nET9{d8oCodX&d;*qhTsp%rf+&Un$G_J3TuyZyJ){GI&vw(EBe z8vV)8jWI09&`EW9sEBZbro~yG$eg~%-@P~~A(?QuWO>N$?xG=(5`)IzQq_zCCLa2f zy{2#}7)**-$>vnd(Nf%5Fv3;X1U4ai9$*wQ1_|mIierLGMir4U{;{HLisB%%JzG9o zO}~Wd*>=DjLk7o)V3D|99-p3Yy}-N2x@?m`1grJBfpD;gy#eM)2~9H63D3ko>pX(s0T=rzM$F0q;^nSht{@Fpczh68+nXIQr6qV0Nda&&rp zblNlv8|?Y#Uvw8QUw!@wt%rFKS%&EDmU7;7O$ZqNI=3`S#FL z+}Clv;*X!sT^;{-dY1UMwG< zw5LZ$@4th~>-5=KzxAe6*mk6T2u(7{W|>yN`xpUGxAXazHSV+$oKBJjwIJ>WH#k}I z1p_Gl&iQZwApa~K?(`}U+bjsUSg)-rcY6x?U^xT{v57Gf)o4->^s`1sT)?>er#g$J zsapB;00}iX(8C9MXrrF2Qj4>M*gztXVNr6BxmchMb%42_r@1PEAV?}1 z$VgEw`@qbg5=3+ijh&559SZjyMxZ_vYp#N7josN?rh}m3S2&`lr}9@*`mAcWp%^5y zmcauPpe&XSWY0tDyF6s52E`&a%LQIt;MueO#fulupFQ1f`(eAezPdU&Iu-}ayJ3S& z5>05dZ67^)6q+^-aQBopW@cW(M-GKeI8c$bUQKwr_lNbGxe>`nf4|JqHr!wix3luj ztXFS=?&{}5x8#j(&s?N$kX_5C*$-!+#yfsEvC}WXH}>Va!}{#OF}VYixBqlsy^MCC z|D1n+qaSZrDmPUIR`307F6{^XQg_o`^6l#n_}k~Z`OG~(lNs)4KhNxAhGHkBIK;D` zy!-w|+O9tQ+F$+8{^qA&e185r|G?L$esO-)UH#L4_IrQtfBoNHy}J0_-}~qP`~UTu z-~FTSa&UM92DHam9m)E*ZB~OeDXyRk#R9Hi)X>J&iL}edM@KzuGxVEo``z#T;Io%6 zKlI3`Fn!6G4bu-L&kQ%W{Y*3x;2;0uz@#CiYaOc zC7Zt%SPo;O+sjMuI&O!P$B$cu4YvX2Z=YtGsdLX;Fu&kVq3b6@`||4S``e#>;`-X3 z2fCA=+!6kJaQyESquw6fwM2i`*27&J$tebu49|dzTksUj)rMf!x<${8Xaht+bet+0 zrxMXqG*@KJS>5O^I}m4immOk0CNdQjHi;aPblF~BUY%cWo}Hh+I6uGKZjyNd5tm(O zQDRUjC`UR)*#_;qO{5>K7VkYWkeY7*03ZNKL_t(Od31WZZevtn=!84>YDo_!43j)o zJi}%+m6wS0Zpl4aPQ|mRqNX9YW2+OtSc=ft}U#^>;sb0m%?z(P~G}bfx8T znR5;y&cjK4s(hPKVsLZLIwp9V)3iKTOG?%Iy>XN{3%sszz+>Y&Qp%kAGjtm`2kX?- zg&_x5lPnU2P7?^kndxxP1jY=7w?<~f7kK@DrAC9hyO%`W8GvI~rMM`*WqFqpyH{6N zQ^M-art7-SYxp}XWwRkW+t4gl%airdV$nW6jf*BW%>sZ8+1x{js@nIxyB9A#Satz@ zmYE5oIikF7Hk*>jf9Nl7OO*PG9Kg3CfD7%}pXY0EhJCxMX6@bs zAHa9KsXvGAbs(bUp=7%@>qoCy>38=!*dM=NgmLNGe5`IE+Qy4+_UaZ2`_72By)n5D z&9AIaL2|-+W5kP%UAu{`coW@mC17ni4j##ZL^WeJT{=$9Z^|-OnAK0Hc7WJ-( zXU^_&54v3g_(1!&4G{O=5!|)LyT<3X0`QfM=d|+Oz`nx7xF3P!HZ$2zF|V(qauflm z$lUsGj!nKD2V8zxj@X;VQ=h+)V!o*r9d?pLWg!FzcTDLD=k~s0hNzL659JS56)TQ= zw#LUKFdtx3BTw@&&Z8Cq+~fE68qb?;&igsVqU{VYl6pf%9J1rRT= zeRr#Z6H)vuq!A7YQ5K8E(aG_8xjJ4xxxU^$KRa{4TnKTKWR6m*jHn4u{Z~( zxwwfXW}$fi0uzUflnDq+I@Ta0#mt}z6(_CK4k-pH60p*F)R;Yi_*4UUdScIplpE1V zb;*E1WVv3x^U?c9?>#wZ>S1nKsYgx2?eO%IPoIAOhuy`+aDHXmuGQcOZVq9LfkO@w znxLxMG)>bqmhyJH-KJ{*DCun=0J0N+dXJJ?5Mxc;N(vM=OVMaa!eFk85~ep08Ddc- zHWK1;xn3-m>*Z3x&H2l-=g*&i@uItY`Th|dgJtvN#vbLyX3VDUqzOnVpyh04WA2-> zZszM`Z;Rf4eU2?mEMq+H$UDxviPOHJeIILBx)t6iW zRGcn)7sN}+F}G6HuWAzItpj$W-gc>MN-e5n7IOhrv|Tjq+C}?e3k?!wd3wBfwAd<= zqdmgW*WQ2p{Nq=jJlziGy)ilif>K>HvCCz4qApy9A#Yy1`r=PNdHnT{mrqWk*(-4P z{EW#0Bmn9zFd|C{_jEJ5z{Kq!!xXRip~X>TS4U2sgl06SLPa$OZN_j|;Q&2r8uXEU4QD#aBJcQe*gcvb>=dPoW;_wyM00>F9+0m@7;(pw!` zY_^6dqM(=Bl2N3AH^_k*%p^dEc!Ap}A&Cw{P`0bp$@(O$R)gtvpPs*Z$)F-4HBuL) zD5WSA)KWZm=Z@lJsdsl5FY&r14AEGUL%3Vn2PM`GbSN}CNbCZfUBsz$^D$ttHUg75 zCrK<4gu9BxAZ?6F%{{JrY_A7OeERh2>C>mrpFh94c-6*cxoS_=Pmof|$;`#QZFIF- ztd`3V+gwbC>W(~`QEnZ-a-u1K$yz0^^C;kGZoO;+sk-p8DD zM1hT$;;be7*UC5JS^OYy_tgKn%sFnl(Y(ldMm&r^&mEH`lk4cpy{(TIE$>#uRb31< zqmR22dP`=mO_2BWMb0z}OzqrwpgsMf^m(U^-tsQY4Y+%4&hPp5BQFa3tG`_Qc2Wgi$V zDs*FEa$+LM?RXU~UU{Z`>#zKkU;S&p_V+*g9-e>7#ZrY=&tLv`f9r4k-M{m9UViok z0789ngxGSi4$EVR;$&=%g>!Ex4?Ag`j_4hwH zJKGE!vD2gFd+YYNK`es}sM49r6OyE4RN(<|7aHj;B`6j_7Q!X@-g>=E*uHrFN5A_| z{?Xt4{vZ7A|9kf7r}=u*mUtyM^c%++kYTR5SNF8N=8&x0qF$zri;EM1m725+3V`FhAVXJ>zgtAPs{C`y5jv&I{D8U=5F z34S}V(Chm%H8n=4(*Z(hNU*ep@%vR~W^rO2-Za!)eII0x%di_xzc>O*5Gt!<- z@@?_Ak+&07>O0W>o#)Y;^<@|Ayjjy+aG$T1xx3xx*|YCiMdrd;;ZzT`FJbISZRJ*m zx#_<5<)3?P(!@b)%QsGx_~6^E6sRcxff!6&SYd)W7=n9aDOzgHTiB9VNN$ylaN$^3 zQn(t_P3Y<-W_07I`y0GUML-rwE}1L^NIK-rwtIEiUu?Q(XIIx&ifU1frUDdtR1BQg1`_Sq-R4Rt8dGf4c*>jc_@2hPG|0k2CkhMP8h0!!VR`yiL=Tpjco6`xJ$0f^V^b-4hXjC5Bb3 ztf!(H_@p)L#{u6skBX1A>LjB*)&33KzIH<1t{W6We{hLVyxXTQGQZnr%En(H_- zUb2yCSjKj}TpyhrAFq#=ZL@3#CB$u7zA&?tilwIh+STAzB9f;EaQ9pjJ{Ks1yTdI| zP_gVlNjP7pezf*mo+f>7;ojoUqcThxS$L_SJY^Zr&a5GUJ-ml+fUR&V>_xi3M9Gva zQuRUm87uz_;Ll+M@Gs~qrD6g31^t44&gix!<&B`T`_RsbTcz3&_E^B(E`8clY>HgK zxgf0VD-Zv{_y%={=xbAdEfUTgfU+cjb4kOh5(hFOj-i104FkG0#hcpjH26>n8n-z z8bcba3eKaLRx}n6)$(3^MXVMpQNC`E7iW}V z-`-Pp^Yk|Y5OtW>4y#L3a?4}@kzv^`mdm(k-+%x8+z(f;&R=}?^u_02r0eZ6Hcw90 z{pA-bLxh5GE9H?$ck>KDE9@Fm*_+V3Hf7(>7#-YqRW%;zJ}p#|$<$Ek;HD<5Q~@>C zbWbL55f@GHAk@%E6MMJbvPO|c;;NN3x`Yn!7OLUV*FWsK?)uecxE=-=%*ClDt%PKy zSgdK#rReqL_QelBU7nmAzw@~L;GL_htBZ>ZzZya=3C$>=mQ`Mqbj$7z8oi*}_eOxz z$Pgv}uN7@)#59)$T$eFr(vqf;d_Avwo6(MMhpOEkfU_3;Eg77PO~S^C;DwHkk5lgZ z?a=pqPQ|36QnRCvG{Q_^4wbq0myQWg%*lqiBk>GIrGO=5JW>L*m4Oh4I&$&1m8jqB z#bH0$+6(i{f<@a>a%|%9lSl7-`0?uGberVm<<*PJS1bk6#_F^pq9qk?HFcCEfk0i} z?*6*a%xQ>57PK2y9aHylvU7|dXFr#jrF9GgcJu6kvR*8YS0}3${WV^lZ_m!oKKaqB ztIgI@cJnqaq6Qnh-)v(LfQ{;E-JTvFt&f&L)SREac#$1uD0Tr(HN5Y_l#b$4+3E9# zn#XXLXpA|HT_?tCDu%%KT0U^QuX0CxX{lo_QWmOQLEl;o;Z0`x6QsGZ?`>h{f9mve zDPcNMv&xKQfRnD_*;OCh3F$-lw}16N`0Pi2^3VU5|G_h|n>)K#m))yNcwV1Ay1uxE zXLxq^!68B8`e=RhC@+t%*kXCa0SQF+gChn``eo?@s(`h1Ck{7OOSd?9CEQ zJ4nbPBH{rq42@XZ`1KXs7K`R&(H=KE_xx7V4SX5elM{ZSD*l2F(f##h`}4Pg=80tX z9-l@R!o-y{nv5BCO<=)XJw?lnrN)MZ<(7GASSpwFCAAf4N!bo+R%BLzkIAF}8zm+J zE@O5a*`_>{JjRggetY)v{If4!zBs?S+@?&)2+$Y&;<+> zA=xWo$;F8b%Y>6g8eHk>QiR{)`*P!Cowy-3l$yKld;HDF;&4(2MS=z==xXq`ZHJut zZPyLG4{q>UKsKnjxgn*LvmqstREcdP1!25{R=kc%)Z-{(?Hs_^>t}^zO`2Vd(cNo3 z*UpAv2q6|n^)L)1OOm!2W7E{auJ@NZc7pUQMMR8Y4o#bnYO#5$s@96d*(_}PD<5M$ zOT_KW$qGt#_c27a6d!vS_uK&&ciTlw_B2n*n|+w%u*JSpkdXnj*gCwk58A&WsHpg zmbQSGy56yA+QZ`;b~&l1$!Pf!{+J-{tO_y?T`c zW<4)Q&HVZ~DFF9b4Uz-x-|o-7F$xt&%=`BLzml#l1yc)eT+cK9;{c>o z#irfZkB8>Bm`QbxQk&*+gayq{1-jR0+A%V3*M1%UnL1s1K8??fC!I2iOxG7lPBpr_ zdv>e#;Bq#%ZCiMbySp(bPhKNt%8=Y>f1V0syg{iHBD)bFruR1(d-aN;qR+;&AS>$9UYs`~3!gBRS^hsLy`zvi&fVyYSAy z!SS5;YR=zqb7n`{MRM#MilZ#J-?6gB%6_lEy)nOcnJGuK;LYCdk7v2Np)Mef^|v@Z zMUf+?AJ)Av{tDyNmicu`26E1x5<-J2@R^9X=Q0;&Swv!NGHpnMH0|nW{oZ@;eeE0H z`1s?GA3b>-V}$u1e*2G}eevSD>ltFRTtv}L2u_8lGY@@QAD=9bj?T87sTu*rX0t&P z41)x2`s1&Fp0Gl#+p68rCOkiE`C%(TJP5s1xRHmVhEXs{v+-;!PVb zFRz>BBIjJHz_e{^o1BIemw^f0_2$F(-v2lMjlZ}V`bCIWuP(p%{MqM!`lFYhKJ6~9 zLYB2g&ADlogm+z6kfEVz5*R|Dc^*=it((;i9aAdRg~#^`s*ONZ7!0eG$1cGvlSlYffL_d9Q0Kj;5tAKi{m+7sw2mnv(UfQXsJ zrfr(0B$5&lvn=EO5)p?$!~w4bv)urZs`m7G$T`Ot0gPe5^$}UY2|^Z;nC5QCmI2k? zvNrAN;?FUbAcGjnh_HxMELBiV2=xAfigKf9{kTbG*Ho)OU ziGsVC7rcB9p`jt=+^Ry@4Sh-pUAIu}Qrc{W228_n(Vf$gZ73F*Ir%Ju)=frTOIy#` z+MSX^nGiTAeuID3`So&+)K>?L!(J>$^;j2UR>gq0RY}HONJ}X>LujHCed-|=LNrQo z-xlT&V{C%N7%na@9J#=VB}iFaIp^fAszDS$Cd{3pDk2_IN`RFGlTw1C31M8HGM)0` z%miX%gGGoC%f+Gzdbu%O&<)ub0wQF4xrwHaR>vG1ISXA3At1Z2R;%;>pS^c|mL)mv z!+x1r)!j359`~^?ESDlhkv0SwqNoU2k}b&*4m(2O&{zLw{vYfJ`IPvFR=6+`*u5eqAp}q;=2F!x%oLC_%n?~?JqvSyL-PN^b(G?Cc=DL+D zd!bT&tY-4^F*O3Q6983h+cv9_Ff+U7*eL=M$T=5Gwuk{GAj92Lu9D)x&Xmqiyn=ZOez>o` z_FDaYeht8lXgQy;{k``uvRD}LQs0%P_USd_d9Xi+>y4gIQ!;D6^n6Djob>ktR6)VR^5^b+&Gd_%_IK{tqjG1SKwNexp`=pg5YNue zPrD|zF%MU7zxNCO;2-|u^Y8z~hyUic{rX~hH3zOQuF*EKSn%qEjviz6BrlHB;snR1 zv^0k&bsC06@Ies*+>sUJX%%6*S%3WfmAG3rB(WiPoefJGTH7q}DB$W0M(7q4TO%Mu z>6(0P1F2uW!eaH_2k)OmI{R!mUc`Q#jWE@2^if}(&sViEl!PeMmr%2D6V&x!WFrb( zWiTRV-a*64w@l2;BVb)Z?-=GaqOR0n8B=#oH15Zl_FD0!dWP@Gf&0s}m;{Oz`5H9} zz^HHD-@&oO`PKb?L!X^!rWY4pmu@z*y=~h=cQ1Gy*Zp!+UbyJHqf->1#_uNWY7$N1k8-sLN%Ehm^c_AX&y|&(W>ugaMp&;MfTVbt^Ft0Fr6WnTU!zEK|uG>ukOZfgMV$jDdY1&rm04E)1!DtQPYL?m&siqXt+9&*-{EGH=mco_)UI31wEJY zF(v94Kx{4NJPgAy3^|p7Vj>!bp}-5dmIp3YYN~m`!Cpgwr-j7KEKC4$RiBNBMtu7Q zTflUDmn-9ogk?)Pr(sCLFr-w>z*fxUsyYlM4wz$%A#yclqk?^7HKf|0yOVA89cCvY ziD80-Cav7ex~|)7HWwEc*Vor2U2_@Nw8_l8Y&!rj*OZAUigaCbbaeFi^vQC$450x) z;J^gq3ec;mCIAeI61+H7(|iPk0Jv((X_Gc-&>>|vb~GUh$f$S{TP-qNl8*39qL_{3 z0V;WqwvtS(NmrJUlyYhCX$l-PFkWf87Rls^Cr$;b4SKc_j}%B+9NXuqF_04ZSWakh0j zE1%=JGMQXQHuEzw0zap}n$$K8=cKSwv^3=mfi&^a>B&3qyz`5{^hkfYWsy(;&bF0nCo(|CU`2C>`IM5WAW0csvT-^WNvo*K+ZJeycmq%h z0nOTmd&vR{cb`x!ch7D`fG(fp(#GcTs#~?4ZifEi;`2{mJpbg=XFvFOb9vQqIO>jU z(7f(L;I!VTW(v}Dtr65+O--Gdjkhx8q$c42-(V{U838E8h|9@9ak0obC(X_#5=6vE zlOwq(QP-^=J$?M>(Fw6%oV_@E^OxYDHfD9#G$wQvpn@a33r5^@Gyh9L zbFO+H`RyidUjDv4fW@IThd#kUO3nlhA$DzSJ7UgoB^Xn;T*#uK4&FcsSpdP{be*tz z`snnXw_dG>&7~bRQ9PO&1LnvKFqLFRjRG0@sz3YmIaYD;(1iRWCU>R=!MH3ivd%_=ZUVNGTGD4Zud(qz*ct0WRi zrEO;C;&09FR8n+}Nx92E2@r!iiE(f?XNDH1ECV1c4O7GKzV(%-Paid1q{tafA; zb*sYrHwL5zB}>I9wo83C8}@9#$8XE~jxhHDV&8fd6MV{&E}+fTRUlq=-7>%i@yue} z#U*v&{9<_Z^7{Jf<>vDG;_UqD;zEbaa$MY0+^vq4E5PiW-HEvP>$GjV*#sgQhJMIM zsg!Ewtpx)+`t$Th3FamugR^m|d+lzn8B7$o6f;)$UNgCOvNaf#L#3QPHuJP4`m2=& zsW8LpBfBh?BykavhPopxj{N8}AD#H}1dG#tbxNxfiYI7VZaZpQje$aN z2^2;z4HwsZesQ5JPh+=Qg{R$HDaAGo*Zt+omqS>@qsYh0u<5T_CT@gTgg7ua6r(h& z1+iI6bh@A;!pk4N_~yUEC>-AGLlWKmrLy_VKglmwkVJu|B)J zT3-*Fl#`N1Y*B^)03ZNKL_t(~Ru_k}g9#0jIZD)F%R#w@x3XsfF{7byaT@V%* z5)Z|9(tMap4mUm2Zy%)M6$M~C--`iH2n-T(BB}+e6k@FGrZ9$!pd>b87`wY^POwtr z#|bXN1R7mlMkkkBJWD1Gu?Wfa69ACSh^R(!io{Z5D8{@V0ETfbKuqS&a8q^n>@H%a zHVUa_?#(a@#=Q}`dQU25^$Ddce=zgW(UF;@L37TfoN7vG`iVK4*;pDF#nER{6`6~E zRQ&>P%-!8`*ZkY@bqJv4a;cVbuwfWV+->pcY?=lmnre=mGc$-JvQAcB%;dePKfdD= zv-LQ+CzVLwlGJVJb4sc7su-|qf6R)1Br~^d#LN&bsO6lC$+zeUHm)vazQ4apc|U_s z{+A+_bIu87*7yCCyUS}eWzETAOhi=Xt`0@5S5ryGynEH?t336e*v+g|XuiC>EP>-C zGxlgIwXW+_HRnN98PvAz@oLpI?a9f}qHP!5Due(dGb<_o%G#})y+$500d7{)U^Bzq z;I8K8!)EQOIhkiI*d0-gU|^s8vnuky4#&e(v4hBu5y-4UB?K)GVM-#`L{~x?$mE$h zGnCl2Tav|`oQrl3R1EV=BpTgWN)LZT1MqycQvImfFCDt)p>5uqsvlgwdA%6*w=QY( zjvZ=dW{2NpSVmO6)rh9D-XouKz{gZRm_ocuw*7mu=CW?*{hx!`MLF3?277OMv-MVH zQ*T^2R6F_25}WTu``uRi`3>7I4edww&ip0o96oTpP4_?S(B)hDV?KI>cunDZ_SLR-#*#7-sn(wb!%X`&jN-XIFoBFI~?P0oo{P)qiEtRS;wMgw=Yctke z{PK3*;vVF+l8wwdKi`A%cIaR~Z}fSKu4;kTNkoXZ(p&Z-pj4kShZiA_@5i`i-Fe`C zuMz5HC-Rsb^B|Q+XOEe4(>H7X0RN}yuFkXJ%0LBRX_gtJ{A&sp~waxb1zcGb}>c{>3Y+Fh>+P6d!Wcp5yDDm z=bPsrew@1S3%~NgTkpTW{`9Q>{8C&%qRH0%H93NkE6725jXbEepYAPz{=MB>o25?fA*h}>LLag(nA2FltkNDLusE~+nsz*LoBauWgs z%tA`F<}X=RA7v35V~H3BgrYl;8=%ss5xpO~yl1J2t_T-0$ zP?eVs>@VPkq%-yT0P~*%YU33fKi#2oE#OWffOa*DLVNn!8|p7c1h=y9ittmXaP~5# z3p~YIJV4~TV?1x*ArI9zcc{$1pj5JVM~QLrvcQN)cDuaS|NZ{_DEd2YiGJJBk{-~$ zkM+Pu{I1l{fP%Yr*|nU947Eo`D^~x(cmCo(fAc>gD_gA(2MQoTTzGdRCr|X~u|Imt zj~>zTu`f??{K%KbXdX$k42wuz$AMKOg_20st5Vq~q|MdkIfvFl^DDpDHt|VVXSz7o z{z@q<+STJ_ry-U=C4gKJh!)YhNL@oq;Q(BI_VQbQ{Kwz=-QW2Szx}U2{Nq2meE!_~ zfuK31&py8{r$PpS0>ognaRCPi!F@>U(35L+%WMN%Ps5eR79rqhL(9`JtiU`VQi$F( zS;%9=`74|rz5n#-)00&vh~~W}599d=0_E*#y}zBe;fXhBoWTlbP3Sz2V3*Bq@NqSk zhfG&|1mb3G?%+$lT{#$^0L*-m9-<%B*7op_L;Cvzn%y?W?jSBXz-G$+Ox4@rUAQ-1 z^k)3w{`}|7_WObHtn#)y#+sw$S#Ol*`vK?Cy!HEx)tm9#Tl%xVK6h#i-~Y|`^rMP_ z@Xagr=ILZCVpz@9EDmvFhZwks3&SSBgt;YO3U|yM(861wagVMM2rzNLiHU?QfSh9K zes+V?;O@@K3?i492`S@x-Cqrx4}bXbs^45)Z#F|RLn$<)PQ-y6@JxU(x~}cIu8Sd} z$$999^?JP?hV1S_6oi*u5Hd}JTaqF;DJ4@#Nkq*69n2$g16Zr3H7X}!0b4kXntn+z zA^;PyTM1HBQX^Jj3t}-?6OAcjAb>4H2_(cp2myqeSGbtL$|H@4yciU#Hdv&K9Yfk| zg%AKWqY;A;5q1}Mn29gp>L%vdl(Qu>G1X$9Gjmm!>=H^QFcM)9N~Te-c?gQcRi0H) zg*^!hH3*o-%mlJq+M~cQ?%uS)%u-A#rJ)Z6#4xjza?Y9(4U$V7a0o0?9H+RX#~J0p zn`Zkt%Cxh6XS{Aywq-WUM8qL1RD-ZFhoQHGl(V{szpjG38LM2I61 z6&tXsV)R8Hb3-zN^8@*_n-GN%B}A0O-2-P;&FTQMx>{yI=>W64T@}DBguq~8wxYeL zRyBueO}Em&l1r1}+N{%k)61<_?oG}$_DH)g499C;E!)&;|f{n|}n2D=aIL%i@mk5O)yBuW72QQ9l z?A9XVC`s6hQU|ZtU@2n`6<#xK1R11oE7sr9kG@n3A$Kt@SYD|Rqz^hDZ^iQuUcakp znr!Ve`gsI!rF|RK%nxPD&Tjnilc#-us5fx`dE@8qvdhZ79z?sn{Ymt^&^TXnGs&Cu z|Hnl)4#~)K zdjI|Rnfde2KY#Y@+4n#E@Y%CxDJ9{k&K#nIQ1T9`nO4ZyiKOJuEFxej;6X-{FEA!; zo~h^(Mq9VsB3u;{n*+K}HmzQnZa+IXm`@UIpP18V)cjM$H1?+ad!A8ZB z4UibT)aW!fmgvHoEvZWrPfm`Gj!zdyZ->~J=2xFS|M-VLxOn-T&DubXY6PMLCSuKA z%rIQ)4G}r{2!v0oXpXXPKYvEf_q(Yo45M~>H%$x5$D?_ADZ7bo88O^P9Ml~|MK>T0 zv0ZeFRcxEVX)t%NwC&O3WA1{662-2AIVc75hWL2N$4?(0KYhGDOPe7RD~DRU)MhE= z8RVeW@apXH;4hmPadT;xG)# z;7|bwDFM2)J&0!uyDGyaPXL%hkdkR!-CQUO7r;9ecMEgT99XE-zxAzIui$w=;Z_wP zVklf-U~?u^6Mc1IDF&X3JA;XXNE2h%a10RAY-Xm8qFfhYgNU4o*ysL-M9vO5#P)C1 zI43s(o=`WE5hZ0G(RCsrp7@@-laKzfK;EpoAgi`%g<3MZrWfbwhaW$C_Uz@wdRTAN zteBEH3JFWD)#J8?^U(-h!x#E~c=7UcA)KAReD&&FiL=3sCfnqApcJTXhxa;@W@We# zoTz5YV{#%>Ev4m&JcJ-I#u%eWe{sbHUZ6S&W#(i&f~I}?laW`yEV^Us9Tt5n@7?h{ z`w0xuoKej6_xk7=L_4BJH0^-w@yKY{|R7& zu*Ei{P3Fz@JIAX>A%FLq|KT_PkN^Eoe)InZdPgPz&X9oEqC3Xo*jJDJ_=z7q#_3aE zKF0EtjvisT!s3y23tzO{H58-(`#=Q0V30-xRR|*s`kpQZAM)krFD@?gSAOwV-+G7M zdm6&!)AZ?im##YP7a7MVOQB-gByvQe7|;sY2EMue!S_D==I{Q_@BXWQ`6u7{_SI*f zgrs`CCQ~MMh&dY(Vn>Umr_1;&zx?*ox6Yn_cKy-E4y6!5mNXGVl2A{8`p{Brxao{q zIJn=a18C57=vojHnO|KVfAH?#`qf`~>(QhB>dFXh+inh5xVn|*YiW+9e$limitb@G zKQ;6^Ib@EKy-ELXbMF6f?e0VEyh+RBIMlyqFM!m zv4oPUZZ_-ltINyF^S!$OI7CW;aS9Eg3O8-17yF!R-ZU}qiLvpa{iNZ=#5 znzC9-gHwVV8ChT{HB5^-=3Wvb`!>4{mHg9Qf<~rDlCr)IvWp25F8BLLQ?F3$Q)5zS zVUIBu>t;#wo3rMeQ%04BMY?V|jYfeneYCJX2>6=p3ll;D5I|b%>~f5ei9!gfW@f|C zySr+3cOnfTl$dk#jfgZ&Q-WWo_bTs;8w{3cs&{(_&Btx3#VaCR*M$(8#?0*M>Z*h$ zm(Qt0nrSK(g<^~nD!RpEEcjGq;kCnc8~=9**aJl)ixixQDJIJ?Hhmt_X6W;PWDvBW z6@llTnZ<&;*EH9%)A+m_L_{tQFRE_Vq3`?6W|LAXS0*J3qjbGqubZY>E|<&Y@@UyD z7K=p}+YlK9GFP}6nO83lnoyaNAGxkWCSv9i^{bjwKlEuxDOpz6M1E7^^<5{_ZU226 z&^*6<$2gbRl5H6S0vt{-GZe*;3Csq7$pUBiAZ&1Tc&$Hy(L@Y(&@NB=g0t)0g@;Tt zOQR)-#)1bAqS3hzlLyEAsa7S%DaK+yD)(+5hyD9sTxlNBGVe(l`3!8m4vFZ&h@Ajn1QTw=Im<54V3;|8L%7v*#YTbCN1hMcmtJcoe#8{0~7e zcdpMH5d&m!*}7Hk@3jN8zdrXo*>~d11T(mqwjOyq=V<*Th&0Z`6-3OF0Jo#S%=y&~ z58~JEcRX;vdxPf(tP-DOL_j|csqlo6BQt{-QMB&*! zt;@HTHm$PHUQfvCe>JGgfm-UD$j7?c4DfgV{KNHneRg*C^5x6xtE-%IAO^YR-pLIZ zbl9XTR~v?5$Y#Vw05b=n9aOm_au#v2yjj1ti(DlRzMt`X*mJKLaeCU%hkkj;Ea0Y6Rv6ZA__Oudk(v zPv3oqg+BS@ll6MtHEq*0#)%7mK+(#km{b^z-i|181r^Jj6A_6M8=(X)JA^niU6Zm6 zeI}B2xp?&G(dpwy%VoE|y8i6b@4xu;v(4otIZi_0oV_0c5K4aEY)Q!sf!RsC*nz<| z#&qA{Y$XZLw3g_>=f!ROlg4ky%qVq9KCt}*yLEr>mj{ks{A56O&-I^ol2R5C2svA= zLPwZ#Bj0#x!JTO=NM8j)CT8LoV%ta;JRtQsTMDs_%Wn1fG^`q9WI)->4N!$cv^SHM zAHVnH`fPpn?0MF!ldj9j*+9fX#7;s~@*XYPuJ?h?`pb`B9R0$3Z@>Fqx>|qs;Sbs? zVl%jK$@AoHrQp+z-jh|VlGq%~LK48DPHJXwH4`&;B{#RM{YLwoQy-D{M4&tAKorHD zzbgFamN~8R(ku=b2yg%bgjuNNUN0)KLbItlEO3bJ;^g?rTkkB7kDfhyrbbSj)pIgc zcXNh|G;`MoA}Tf5n3#yvor4IA6I_wa5|c}ik~qW-#>fdtyAaqRR;0bE87jG=b+}XZ zG2ww2tT+<5gB;MpXuVCCeY;v;Xxd!EW`U`o#~v!O24pScRa4gl=duQ%_%^X{+x zwZC!P;=Qy0hjCRP3p0*vWZC=gL`6lZw~;>_k?3K)IWch@Ha z<*avNhnW?lvol<3)TZ0+!ahhP_sqULUwUp^y|T8nFE723JbzGr#%%vi^5?9+=7c$J z!NeM6=zn%#fdVgn|0CA?nnd=u zjpuI9w|K|{`QhOwmdpo5N{fKN103)%x5v)2?(EMk`sS^4tNc0NS>^hEl<@1@FXh^0 zbbkW@#O^$-2kX-5O@d;K(SRQ%1NQ>6G#zQuOvBMZJn3KW-oC%lL-d|yT_2+-|tyBNyuO6Sg zcjRb~^9yS8(Ds|BM~gs+jkJWuT|w6a@&!Ko@Xx>Vhu{9afAd@a@f+Xx^n2eOF3vb* zGZlD(1KymR=Fr&X6~LY{zV_e#qksC(e&cIj|M1WM^#A+K|L5~R`cLTB&Jja$;w%F; zz$Q^UbltM^aE;H9)@YVdB83G=`#hAY&-C7VU;o1KakrK5!o|x_iIx3#hNxHy^-%4(Qi!HlDyV4pSU(k;HEB%RAfO$vHGb ztHvYa=G)P0(11NUAn?B#{#jbvTb~c*pLdSu>qHCrk1bpz1ON4@B%rAb|x}aTAx; z^>IuMS<6k!+ORb6U@V>koXp4!?x^XAjUdV0%+v-YkchEp2+6$(-6o}r>;B?$bAEMw zc7FBp?Cf%LO}tP_UE?eVfXS*?y%i?(ent3lF&Rvlfov|g_V z9RM&a=fRN#Zm|V(k$YT)ov66?%_`ZC0TMSYVN$~OC=iN+AQQ7VaghK^a@{GR5TjqX zidu*%hF+v6Y=GoO9K2PF^(Dz1E--Fftyb0%;l5)^+^CqA{hs4_q>-F z0U;B12}}qf1W`*cGRvN8At_h55RqjaNVphZdGvK369-bk4^VRA`mOkUEn_@00ArNf zOI3SjDHUpCjH+&CBE71n)aRUYGR;Fu#LR?7#EZ3cnx7ly%&ld*uI=fo*}g6+c5%0@ zA*Te8W+wuXgb;)|glNj{&a_cg)s%BKPnt_;uajSf5X@5up~T<@G?OKGE~!$f@v)UZ z$7#7;{$wUIDe(y9r9zMp8~`(y+Q5C^7n6Aj1x`Z}k(^sqjR7G9;y^?cgs5m_Zh)IR z!R*2Ona}`~jlm2jVve|I}xqN(jbaHaC=z@p{8Q@trtQ05^j4FSt_Vlej zHnZv$2WuVDCJnhC2F=AEonTBvW27$tH*$BD$vK#&IAA9{^gQwsRWccX0RoR$CzU$V z6-FZ{vBI<}7f#NCx&_NDj>57zIfx%D>3;!KaMAIPpGN?XwC`9n*IH3k$L;k8xwrfn z>5hILzW>MM@3v#0+GFnbr}6&%&o7oH52Nz0S$}>44?ozYh0gpKj}?s?r{TiHq0OXe6Etz&D<<1uO6D=Yi|@ zy!LbYVrZPl?U?U#>>q_jK8Ed6?ri_yb-Kmha1YLSJu!31w^M%Zgq-um#l^S3{q2-e zN{N6r#2A{K^RVfan8ggJ{)1pAVOBLSc>CnaYEu!-+aii)a?E7;sbzAgV)}(_G6Pf5 z!r-tHl~zowC9SF%jL3u_oU{iE5e2YF6eA*Tm&XB=iLzVY4;eW&&GKk@+I1g%@cz@M zPdDr9>wc5^!LvGL8xjjURiMPH6HkGaw?OT7j)(wprUKD9*oj3Nl8~}xL)$GMKYjZ2 z=_6^{%gghRKKl6OC*M!&%e3Bzp$joGL(SFM3h?1( z%0+DgoY~!ge#jlm$&<&|@1^U@tKn)$f!rx5#Hqp}AQLhnz!x0W7wgae;-iJclXsu+ z0;}s%e+q(W*OIoj!SdwON~4fRzeQ%%ygi$%xom1t`VGJhmGmJFXbk~yXL2KE7LXIU!CXOh(0zf3rXbyiolPT0oeMU;{Ss7aS&gR> zGf$rGX7+dg_SbEI4e2kwbMfM%kItUIf{K#}wG1U=Co?Z`z)B=j%kyK@oy@WjyJP5e zv)QWYZy~A!#HQ)P^hI zw`HD~4<^yR@A+RgnxM4#l^dVqA773XI*B?r^!J@}YMe397TTM=*In|}mnd78wLSe^ zR{BpyKiZc+r|)lk-jO!TA(NT6<5 zUwr?)uYO%lAOF_B_~*~Q{RjB$8JsAo+W<~r_S~vdfUpKjO07w^$h~gP71W{${7b+1 zcYotIzV@}R0a&lsi>?jQUS3{uvv|<_Zgo{)&NF{P>k2nl*O!IQ+(x@{NWHRuSNQ^X zu<-ju3s(pB-5cSV2gkv`R6MQxfB&0f-AYYQ7trEoU}M3xE143jLxD)$?58P^YZfg z`HQm`XBSu3n?89`%ZNH;urm>uvci$cje!_wwQS#dbo}Jx=xEV3>jY)EOk> zA@4$)=qXALAq#Jq*YMt4-P@*t1yOQ0QkeFpB`xiC;>ORJPBEXWTUQhTV4k~8Y+D$t z$#;7b001BWNkl|K;?>nvNq1bWt)UodxtKra zFYE50{R%QS`c^;3cPWw0P6)*A9!QiB+;z1&wo>sn^(ptIFs*rFR4Z@ER~$l6@uJh+ zcw#}TnD!0iclE6-&Z-?(1&4@ewOXm_Fbpxqk|a6j>|`V6hatuoLKKljHK5i9 zP5u_Dc^HQEdfoSZN}6*nAzu0-_u@xzaODK-v#q$-5Oak zYp1m3^PTcz=byB@Lm!yCtvcH8uhLQ#roe^8)u7a{x4BwXk2a#+Gvf86mV^Pgxq>JJ zHnYpi%ONEq66Pp@N)nkN<(#-{iW(q+CAMT9B4;D-t2{lyPbH?xjY*}r+l`hCD&fB% zW*7rJX6psuV4FF8??$RreW@6I4Pa1U5#m5x@)mJGXrgotUnJ%LGXV#Q08`E(v=`SK zFc~v7F@&%>K7Qw&cOE}}{FV3LPW^Cp_6k6Z(arL@XLXhm6gHm{qcPsM8W+nhU;!K@ z=nbS!0I>uK9fbhmljYILqvOTVv3q*{;?<|0escNpGrjouDEeu$V09ZdI%F|!M99hD z24-fZP@>$jt5al@I6s4jG7Mg3e7pB`8nT`JxN~0IcZJNFD(%xO4*17$9_>Vs?1Gh5 z)K^g0E#`ek=dBa~CW6B-25MV{M7Pb4YqV%Nx|Ix>h^SpGV%wB$mEAbVVzoRzJ#AWS z1i93_84HCHn`T$I#28POkKTH8@#@hT&U#m40O*v0f|<-=Oe)k5L(?>EBK`dO>hyeh z`Y0_LKU&(wz)Y}A=H>=fHzLS9Geq$(DBWe2Y}>72@MM})J9i=yCMB}0xgRt+6LAgq z#CE2p%F1J^9r78srhR_v^IzSUcB}suZU&4JzRyo9Mv1l`^=d*jmKf7&b)1M+tK;Lx zk64-^r`~d(Q&QJrDrFXlAvDlTrb3~LUhXzlO`hJOSZ9kxF~r!lU3dB<94{Bku946P zBC)3-ultu5ugq%*hieTI%^)RqxFYyCa%B;Y6`IwdC3ZvEzyK?m6QSlL0?c!=M8ehg zrP?H2W)6U>QMbhQ&h^1sP0sRQmBIXn?IY?Q>*|TGPMXC@K3Wb(ODqHtXh6Z7n8XUhilMQC4zxnU;M<4lSjbV*!AR%_$3^`r;Nkf}WpOjQLrJCH+`s({IJaA8a2%rF}BG#C*e#_SHK0467PXJg8sen?lnU-rX` zm*;2e{?)7Ni}jEcU?D{3Cix&>Cb*S!xEy0x#PIZVdAw{NA1_arT`NYW$jQuvNr{O` zSi+)Nw#}ej%DJ4ymNn-gXS?nP;TVP77a|@4%)kt1cXmi!KL@Ni6KDVwl!KT>D^@e6 z0Com3`yf0l@?}7xp(jal#F9rwl&i+D|Ux1x-xgM-I-Yj zZl)lvW;OsMN?;cyFd{PrL~_U~SXK>vN+~C{te%UGVwO^|eTGP*;g!csr5GiFsh@Kk zwK$*`t=Oh+%tv)HR8QvNf?)<}Vz3xvj49_K=Umb+j|q=+&L%>t>fRJz>*=|38}Oms zYkT8kqf8Fr2r@Xsy(Bdw1b{>$BnGh<+m!lY*bKvLDNzCoW(zUCpYR&^Pn`#c3nK@SbeOUl?M$Oji zbxLVW`|LBSUK&l)bX~VtEZVjWAv`&K8knVEg5Fo9g-C=-9bI>jD}aJf5mg6VcX!J< zXC0E6_5H@(i&HM##|Z9eRnJ{9N->~Y^rPF(qg&29B2susV>&v()$7jWB*bh)P6fju zf{OtT_ll!Yfl@Ar@BFOL&tji{N{PpUdo)XlRR1nOkU4ntFSFge(@tNGSjW z8&fTV0Wn%}JYpdi&PFE3jB9F+LrZaBh$VG*reIn7%_arux}&q}%gxZQj*oxguYKj6 zci&ws7RBcM!ykO~(TCr=y1Wo45SXQ1F0|Gpb^t=90E_@|qmpd7`U^4{NQo`L!S3Wn z@KD^MLkRD^_mz{AlNjas^XGs5-T(60r!S(==~2_HI^A4s&d&mK7rLfvEO|;vh|OVu z2^nDKz2=AkNUS) zul(YH2QEIIR0_bjaRIJF)3qFfGiA%hMlpniG$%m?129-pBU5uScQcThxkN-5b39or zo}6B8hW_Fz$hNou`;I3;@wOgd#^~8;*>;al^wXC`XLUEvC9kfsl*%Dyqu^1nSwe{x zg#jw0>|)N@L>*vbn2@oEE2rEgBlU;kcn_t!gC_5AecPIUeddGd)4>b?1UY^BbRa)H zdGgjfZ)N4rK6}<*_g8Xp{`uL(*{eki!H`o{Rb+QKMVbutV=iW>dyF!=)EbyV(=1lY zuaWszb9H`pb$-FjJbI}V@;=G&PSU0mZ1#4p3ESiUpYft{Dj!@KP?b z&IM6v4WrLA6O*EbMwdD9KoA0nn<-fHzyG&?vbox9&d)g;F(p;c+9zdc00=q2c0HEYD^HK+(`1^dp+v<&p{WV(> zBUU&<41VLQ-3?1K7F!n`FabCI1>pt<;g18iO(sf*&M*!i$Kl53*z@`-_Zh2)QB@lE zk*pj2wk?|*9bbO7$Z4{J7Zu3NLBviaNvvJGJU{IuY_7idN8kMT_kIUgXN#kDxVo$k z6)fQB+)!u`7KjUPI&YWOb-Y;mvc+matEH?uIudVy4isP!sMZCf9umFnBxIqUH-waW zB<7=&PoI77+kg09-fLGMbidjilQ3EdX9iwt|KjDxfAPIP{Pws0{lEKnzyAl{c=p}D zpzF*~B99&&lHo=KYBfZ3ElwXD|JtwpH~;vb{O$k#zkBk*FD34tulwb)wan@A>U44Z z)qn6$9=-qm2mjUI{OAAI|A|*G@bU!>*(G?0niNAq7mzb~T!#eiaD4LDzxvg${=L8V zU;oD6vDloQU4!N5c)7XK;c9(+a?}r*N6`g%ZB*)9yqeiO$|(Q-F$9uPr!QXiiXodrI55Cws!5rm2s4?P z5pqj%+{vnIK6v+OBWQ(5hn$sRp`;pSGJ|QRK#`-=f>i$YlgDbNIrn{keSJL)5I{tR zoWzSt;$oNrH+ig7TF>z@1+2I=YD{L;iUtRq$sEoMF80e}B=$`s>lSPAUXd&(BS?r$ zEYM9s?SK%yaU)WTY&O)uFm=o0lx;ozCe~V&e1h{BJGtwORSm79C{8X!!~~5BxT(WP zVdkVzB3dk0riq4tVFPg;lCqN{lBky$&YZG`5Mq=NLTqFDv2?s49p&^8}ZT6pdhl5(JbzO1=Suv?mH5ivlOrsYd5fKGd zWiBz}Aq3_iB9c}5A(NvhMD99eDpv6+Qn@Uu$@)vv2E2XDCV8*aB(6ROGv}f8dR+ox zIfgET&^DH`nW^=zrs}F{o{5Omnb{0x7CDyniIMm2)ElAKU>#mUW|;%AGfi@-!W#)j z@T`fH;W5TGMqqXMiZlN_usDnUm(6bIxV@YI-^# zu!Im+-Qwuz=;-KZu~>urFu}=7P`J6PnGUJs(5?;& z<4_mOT)lYK!i!fge4L0GM7Y&YVFVk?^0H$>7kK8NV0Gf%K~7LeCNeg6H#k9vh>N#1 z6G<>8kYsW-QxY$Z_0D{Ye&GZob2!Sm@Q_R!bjv4hU#je8#O3s>*4a@*;nDnrnZ8-d zBl+a+QCr_*A3kONA+2tw1b86wDm514sPndMGN9y|z$jMQcpX!gY=Gclve?rt1H?NX zTk}IVAG|(``lAX~6jScFAm;u!z&uUbjuKn@?_>80Dng~5;`u(6MMUun2LP1B4mSA? zSKpV(6C5Kp$#YMH?Y9$z;O_JI5~7IeO)$1Uk4q>KgdS#|J_m;ryYTL8y2ttb|Ji%@ zA4#(7Oziv4xi=y+tE!*#ASErSr6`fRTEi>bSW8;NSlG}C{?YJ1>R$~QyMTf94+dll z%U!KrBt;H6&z|nCuByz8huw*vL4;l!}QL#+BoV{0p2%Tz!&BI*#SxfZQW2wyJ=C`1ymtnjmDqN=iAN9QU`N-!x zu7R4^aiHWq&TWmu^J4Mr$LU4$&>iz&9Y#-N7+nSjCxSSj9O*C|5ZYug9S}g**5{FC zUTeCHZ>MWdie<*|h@(8bjw8Rt@~IbNcr>2z}^dXE&~o z+uJ;bH7jveP|zpmV9zsDlpb}1~C`42elSWZXZv?)HjaFRXmc(%kidvyuY^*S z2qeTYou`C=44ErxFsPEj1SUyzjZil!O?%>DldN_x1@JaeL`xZZgQ}`D7B(2^Mx<1u z5*EFcT6PUUBiaqc)7nm&%fvmfMouM?gl2$)u7NUuadMjW<$@#Mc{n_np)4eCs#fd+)vHFP{DQr$6qx?&|8Q z^h2Xb^GXnXAN&12og^pJRRRcwgWilYClV5dC@}MIjiPde6`Cfg!U{t+r)R(M?)&dO zebQZR&p-R%*~cGUzPixCexs2vx0mM@I|&t02Kr$bFaSV;xmRSUM=fy|Eu>8iQN~2U z>+Se_nRI|@KQ58ZbshTQeIEALB(JIrsjF0gMZkWP&$Ax5y!&!j&Sx%1+~jzU4?5kp zu1sH;VR5W2I6+TL8KWPesD_6H3dK2+`~)Cy5XmVJYFde^4W*Q#peDj2Q*l5$N??lq zj^s|trm@g2qS4d!*;%uCXJGVQ*}*;8`Yf%UrslD4RR@h=9*>rApkcrno$)eclaU{7 z*6*I`)l2lDyGEyjhoY(}Bl%!$N|*axK3lKedndpD5N9dFR%h!zy@*C*U!wHcEsG1I z8#)L*ED*t9hy)4EAPhs4vTF21OuSrO^3`tDOOx8ctu(5eHDUeB&ztRVV(3FL2MLd) zP1SMqP}6$E`!411V*MPVvQvq!`tH&K4xI%srB3^ZwV#iBp$Q-~(gYz4VF;p>(k4;} z(BW404<4L-<2&Es+2dFHZEn_@S_DvV_2PX0@_hf|m6Tq>*)&sZEM$TE+H!IDdYzAFj6hGEl%UN&P03){6y;G%}>FEBhfk znp}KHF6XZ zlc)xB={kX|R$@ljrFiddT{k>_Bty@ObK7qBpMLV}=O2AM^o_eKR;dA^^kx*(7OK6H zCnskoXQ#W}?$ggcE2gV4ZA#6GiC6o+FJ(XUAWu#nY&M&Suw6%ST1*!2NKhwam;qX;!W5wd z)v3M*_Sn(8>{xk-mk<`1!O6%3!v!7)t6%n1b6x75nq(lNI*&NklINI%jnM&dQ=dPw zG!Obra9Hdw9NxF(KDBwDisXf<=5rprsDNfc4_9fZ3DB7M$RjZSn^Y$q|4D>vgjHlf z#4zbGAQHk!C1R{aH@bamfrjGl;4-7-@H37O{fpCWJdZd!j5({Xi*Xx$2woK<0VvKo zHN*tX6mo=WGL*AsCF6Kjzd&_L1E|iy(cwhH{@wr1mmdZ8+pg3! zHUz>2Oh`?nbz$3wYP;ge2B%HG0XB{Y(mxJc5BeZm6S^WYqRNs=`qv-=J^)<>@t!~x z8S$#a!}94T&;P@p{p|*ufBmn%xmo#D#O3Gv)9wE12Y>y8fB*0P{Qv$BfBCmRcyakD zoFe6fEkwIvH$YulNCPT156}MKU;fK~^C!Ra-~Kn7Z~m68SD&UPQtqSQ4MkvjlAp6& zblc|r_kRCR|K#!Se)ng8`@_HZv;X(AAO4Wf&SNN~1r6&bkS5j*-h1+m-~P_;{EL77 zo$r7D={LW*x1kJ0lZMCsRT1c>J@Y;?F)`uvet6=f&=}$$rP|Ga2>Xh5M*hRv!Dj z@NX=iaOPP#=+*VQ3;leQqYFRP^r^*eUTDk5cKi%&IT}wii*FtFJD0G6>M|YABRlvg zmZwt8{@x>hg>dQ5;doB~N9R#J-|O`o5TiGSG35(ReH#_SLis9{$7h>|o8f>F4*^mcJzAtdm=Q2@ zKm=TA4p>$&K;p$YRAiAb0x!IZ1LRQ6X@S%i@7?je8 zwA6lkrDhRD4H6|$gvH6i90G%dBUnc37zz)mngt-9>T74Xx>X0Kj?n`P2hi!@D3L>Q zyV^9vFzl`_hwYB&5mt{ZIBh6lKCleE9H^Kp0zFC)U|t5v+-;P@df2)P`5<5>rLy5* zWEql(@EJ@ilA5Gh!3>Yfi!CZNzzy&)7VO=m^hs4yYI4phjfj9^lit4E?==gtl!~~k z`=x-O*2sD@c9RV4FzF8!$XVS-glMBFokm2{W%F8mtdc^_4F>jiZ zbc_~Tt!0~3B#DUEz<+fw(jD$mA|j`jV{Cf#idP*kuWDQ-0v2!xw4p*D#yh2yzAIhV zmE!IWqgiy_PPNZ_HcgWo$vLZ1M1(^`*mNRSVkeS)agwzv8OL)+B0^ID#;{Qa0|*Ea zVFYDz<_hcajt37Omwwpqx4Yf0uN9q358*HjtJSIs^>FQb>$?~R>-J@Wcj}ZE3kih# z!_%|Jj~}0%oTk)>h`Ojri5-kJZb~vhuT_qu%47$^=>kwf7!j2@dyGljP;a*+amPqo z05BwwN1sz*(o!6O5F6Kq(CHwZ?gC?}F&A}+iva41Kt)pqE9bjA%;^JV>km6fftXZe zzeEHq#HrBaNi_v9gm=z;xT{74mLx+2r<&zevtmq2_DEKBOH6J)(3f^iO%FRdrsuH6 z9f1=98r7j)uQu(o06Y-Ed9Me6FPH%=xBZ;X+M{&9`PX0db|W-+qSM_SI+Ks{Mn6Y=3pFF39Dt%jv1Q zZ!Os7Tqq^=1p%PncL1_vO$nh@iA*U)F?e_>mQzFoBM65{HP?kjIV2XK31kN=4U>e0 ztJly&h)m$NQNIy{1jHdjDekH+t)`ShR0`c;C+pS=`fe9tg)zA2)Shn6-h1>&x5N3f zS0Db}PcJ@w{_^8b&p&;}!8W;FtyYBZ_gl~c*zNZvoVgVU;1?GcAN=&Eug=deFJC?T z^fLfm*G(D20aa!sT>}e;*EmFiz+i(mIi+0OdM`%gwpndX_okP9&tmU9ef+I&{*%Wi zC%)@G`Q($ApMKO`T<%}JD*IgmrQ&2uxu(I*s%5p0>TH1v9K$Wj8f@&=001BWNklR|`ehFRL7t={yA>m3O!XQb-b|l>L7H^!-f-9|n8z;zhqL7cXA!&o70P z;!(WjFHr#0HEIlb-S+X9sB)$*V`*#)omL{Km*ap zMw=|2Ow;!K${lQ^*{s{mMx_i=BDW%^*p<%1b9jW6(Q@+%t-B~L3q{BXh!a&t#K>v3 z2;%r8xntzwu7!$xvGJ=bp&~eZ#g(P5k7tLt+s7nevW6KzdC>Ra<|)EUR+(h8rtTh!nudich-mXf}V^A zrzfYUr{DO-lSfb9dG+eD-|s$s_W9-cg|?d;^L%)cQU1&T0-(N-;8glxY^9VCs%DBf zG9w~r?wW)Zx}TFMieu>Zu@6V&oL48SlylRppwjpKHL)`%EmXYJ%>`MH$l3>WBzHP& zw34ewv-)BWp7OhhDVGj{uT$!NF~0WKwIi=O>S;LQJS1w|bR_D=T#9Uj%BgCxqgvpH z%;PVkhgIJmRs5KK^2R%hV{|N^u!!f}_kex7Hm&oc#~j@b6B_1NY5S#bhaeUKREmXI z`X2%*K!Xd!t;6o(XaD5~m!JGR_E$gw!o5(&Y9L?+GgLzpR6QkRK^8O`tBkdjHpNPi z3!8unv_g0hB%~6`R~mPWQJo>9UqxzxHg@*mtLHyB{mJU#!zbTuCFA+U{xAQ}fB*CU z$3-`(c!9#h>52`Fmm=VcsLX9H7QH~!yI&+RyCt~zlGCZ zIhA{;#1ab$=Jii9LED30(bo8N`x4r?2WNlr+;)JX+hq7p>~%NPO(CWrdags-Bk!&YvOay|hzD2+2a=vHs-Lthk0IKtYh z4jGV~hGKm&r$8iB11W-5{9?O%{_5)G)$aUqc(LpD1%=sbMq8MQ2$P5<0D^&H5$@%r z)hB1`_Z~lZa@L-%QVL^K04N+O2tte&8&u*$B62f@CM-Kch6BZ+ubMaep!4oRe!34nO4 zopLUoJ%O-e1QlvZX}wnQbo4_xVfUtDScz1H`wE6v>*$f`}ss`~i! zQPVV=)w)SpA#ex-EU7x>+(G)h0wQWn=&`0WVG&*mfPTNPbkj9pzsN+rWfcY;Qwxd(GVeu3iBlV}}1*Yf{w`9d|`bXn= zkMAxcd`ETr?)t*D^)R>Po~&Bh>t}O59)Cge_OAXc^~J>-Z`~GOz8B)*w*Ji0WWm3& z6o})wS?jMH%znJZDm}^<{6(I6c{5qOd$|6THU73&#-WGHn&S89&z#43*e`ds<$6BM zm(w}Jc^2uVs`Wq}^N?cvfwBJ9s9)7UumXo#8ty&>Q3Im`v+5XQZdx^0?#n3`%hh;ezb|+C_$=dR=FsmHqg~Dm7N7qj^0Oj^ zkH+&(dGfZ`Uv};u`~Bv=dqcZ@e@%z^yd&Pos&-?Y^NXEFw_KSa*+gRsq%FG4T4|Py zVrEuK5vEX8Rg0*$3dvfKMMT1k0+1pyCdI>@F`k|t@QSggh)^Y1DOl$-u}*QgMktUe zi76#fM=@ipRx9n$G^=L4;dWPsQmIov`0?L;@ZrxdU!1@AZ=V$#w%ct=snQOSga;TxX+%9r4dY0ajRGHC z1!;%~>!r;(pODd&VR!zrIeGleaX)KX|gVlE*Z z)fm5ZZkEz-t{;!XB;9O_$-9??srKX~1LwO{$n3-ubPu2OjdSpAPoi6DUe5h@KqP8f zmrRvnt57`}w@KJxEY?0gi;o&CFlCHML@oA-2!M<^(HaQ4s^(Q*ZQ39pEN({MY&H)c zKWtA|{oT(N3URUGy4?p|ah<0256rCm277>YsBu2=15 zT`sy3wo;)c+YQBRS}@m+(E!}Zy6F-H9<}ffgyum})tb3pu5l(l4 zkdp@w^Ex-1HmzGpwazRgAQsULWxMyTgA0KYoq1_j5}KHEQc=m8k{7xM))E8Lx;cIS z$>}?1LxVv|Xcph}uP$Hgc9;E?gY8#R&@|1uUFXavj~xk%)59>AD^` z`4+hdfOE{htO=0hq|b;<-t7vAQDF#^Y9kPeh*#QlM0fdt$<*pvO*y-JCCXc>3WSYm#pKeN!aMpIchxq&tBrc>4K4I-+j3rRW}7YL z=Ns&=`Mb**Atu(G1u|fSX57*4&?oO~%X9gLKji3=ufN(&JL~pSKI$Pomc*E^Ot26x z?z^k)pa0pPm(QMI+Jj?%NF;~Uux^q>%R&_-mDH4`MbjX+sc9pFD%4OF3S3YDh$Nkr zP6lBRhqu@diXnk($Qse^&!7G9Z~v}YH{ay9AH4gZ+uNW2&5u9&i@(HYpG#q&fdT#Q z!c6l+U9X1D=qlg){vZCyzx@|~{69YZ_CK}NskQ5lQo3+Ap=wOk%~3^}1jC46{OsA~ zD(N@A``zFA&UesRzuT6sn3?8QQcgKXlR~)<+wJ%L&Lp*OM|pewJgsjY&&w_7kC;$& zi-Ps9Yg0IX)EVyX-<|g3UF{Bk-N8PZ-?`6qaQN02)N1b7F9)5LM`!eW7}Y+KZ}JS^ zp)Y+E`~9Z>^XQVVy;_aAjxy~RIW=B?9svkMg~|OQ{*e2(TjqC$t5k@?b>(_K)E7Ne z%nXYp1Qef4*Xe{)Rt6@^1hiOk*YF(CB2H8{zzTBK<`&TgQk0q>Tn)pbsF*+z2qj|7 zydO$*26I75np+3A`+nDTm)rj3`NgxBuP%1`{oq{*mlnyr60U|>gffEkfEQC;!AqiS zHmC2r^Z1=d4^CQW6fY)Rs6eygdWT4=KA9TJ5;Q8=vpb>Y{V)uD-*sK|#mvH-WJyU? zn=0cHD)WBz3brnA2q?8e%A5o9B z9Teh1C&K}HI6S%22ZWmoJ-m1gJW)NR%AQtj{ZIh(s((rlMXL5fCtWxJ+JsaeyTjSL zC;}k_(zHpCGt`ULbjeam4WN?r;#Mt~9A=ORh%nODQUzQc5XQmEx0DJ`eP`_%ZqofLqvJ z4|>#*T&O9xn9UZds**L+cNm76T3Sj0-6L#ZDMe(cA5hgUqGkrClrXCFQB7b>0K_qN zUddlP=3LwA7@Z)1x9f7MqAEF~X;a^ouG7A+bjoA!+sul&s;W{|!;^@lEUG&DzJidc zQY3twA(f@Lxv{^XsOiXukSYL#Q$(Aba)c!HKtBw{hROull>)#@O<)xOR3GM%spj2K#GNhC;)EddV{lwQj_H#liEIg~% z<0I4KaAxBOnU4JGPnM_yB~tl{s`(ni1KgHIDH28wl8gvpN9{ufU?6G$IL2K2ien3d zF+7~c7$OEvoKkaE?V%LTuSWY41HiYpaV|OA@4uvNnzQ@P9G6dY6xX?KsDH85aPwOu z*yl^S{#}i?Jj=Bk{;GV5QlmL94i{`HV;&<$hyT)yqX>sc( zBVu~42tq}?a%~&}zyKg40&5Ha_CN{00N2mI@oYE_g?`Cf`{eHjS?pPv;Dj9Geig}61 z5p(rVfd2I9V`-9PabfXc==P-y?mq1Hr5{Q+gt~$ zceU&HLlkp|is#(y2Crp_J)+I&!Gn`0k51R?HY=N^0c5-FFD|$J$k>*ROFm<&MBq!y3IL<&}#;PdrZ!tn`&(x z%fpXfpdHzjM?XhXdY;6uN4uV+`t?=xrAYNT-gM1xQeCd|Ggdd;=#0C0kuTK_IzGh? zU|xa#PU zvXqEWK^UO{1xb|U{g7pZ@Ip)F1EP*`1$nQ-k(|(nk9TU2waPw1Ko183Xv>@i$N zUy%C}FNzg^eanDW{Y*741tYl@+#T2LiBg zaZy#O3@Vr6(sN1}T4<0Z66#EX0>tQnti^2{fYdC+8j~e3mbVK^ESPK}SnDAM zCE!7!Bvnn6I;^TXvK&vrGn-m5mQrf5+mzeM0y?NMvqS8#GD!f6I~fOO{oxRtn=C8< zwRWs3bIxYD=5)GytqNQ)27^^qCf1_*m0Ry}PhE~25vvRO6%DrvQmrdWRddc})^(lL zf*EGh+Jn2>P_k;yc`&P4xi$2AY){nyXRS%RaN+W(Gs|D*mu}Spm6Vc7&NfyME1Ka$&^ytwkPZL>FMdodef$?q7gAZUG;v)9Gn_EP=Ap*g=4zAmojs7 zTPe#P&h1uxn=t`8A)rq)gVmo-A_XR!R=q7Msn*nJSh_knBP(w{o8_sNyH$MtU+&(~jc+|-MAUO#I$ zD9!2}mtDInBkg7djyF8@eK37D`g13O{>E*Nu;h2On+ND!q;9wUHQqR; z?=|0-Lw}Z^iaX@kTp4ThyUyqMBA+H|bU_e8h(Z~I`Z#GdnV~9WGlNsgIj3A%(H&)Q zQ)*I8sg`~zrIe8^h$2ZuDH?FAopULRP~--D*(YQ z!lrmj1z8J#KtF|kQEiN1)aV>VB%@uYyh+-k>$(9E3C*Ty&rZ^bmh7dk!0E${r=n{p zrQ}wbX{LLSg68DG!*{>&{G%7%4JZyx0;!lHi{j8wL_%m3Gm}VANlDl1Xj@BC5XGyx zQn#?x+l|rZX^%Tu^PW`|9>XvcvrvXXk|tSsz{?;efpncf=nWY&ug&-wn=RxFZkxg5 z7RUC*n-6z!4@4qhhW)-=Ui_3Q5#hzM3 zh&DG0HkzufD#cP#5h-QwwInPB8Y1dSZ=>6nZS+PN6t-r`=p5$0PU=Zq7($~IP{(=^ zyvA!g+SndJ!@Q?GV19^=vBbE*7=UxYu?=~{@1qDoq;N%~h!Cj`LjB4Gc$(&M=&grfD8Lc<|2C zcTUe%pMUyU8GN_fx#Q~Us_VLa-*G5Oo0;_ZR9S4(k;q35z_*h-A|K`ts>$xqOR39+SiIHS$op) z%HcT|Qgrg*EeGKB`uxpyPksK{eq3Db==yOi$#8>U|F*_5X_#Y5%C!?`UaP|}RL7aB zsHT{x0#O+?a9y-a%HYv}2Y^~*^2l<(YkZdDc~i38r60b&EuQY?-H-0_TKj9vh2^!6 zRf$kNv12ammuw&1;Saf)VR_T@b)dGqc9+S=KCNkt+LD7#PqL7E3}-+CK9m<9e~#xb zK}Hb8fPiYi$GMk)1QY5{m!JwIF=a`OXr?G~jHS{Qs^iI<10+gRQuc}I06>N&Zq$?Hj6QWs{gR zluoz@P-zFNR%7Ezc%zAQ&A-H3Jwg@wR#SekBsV(Jobj=&R^hp z?>dh-Up?-e<@?OnqFVFRUcUmbkI&IExpQQuYX%u6aIZlqo^H;CV zUv0Pj@M6F1%;-!>$)G!;qen_9D3H-~4TuOsybSj6I2_j-Jwj;f7@Gbt_6JiM@Y zHp?F2h_O;oRm%xLAtnIDtIef!1j)oS#_BLKJx?n|>+gZ$Vd2GN0KGc0Do8QsTt~*t zNKT9?;eA-KK|;h*V>Jj`lU$bvZe8uuI}2aIp&OOyp)TB`CC*86Gpp<@l2lbSBHT+v z)PU<8qBbuvgqhS7&|0o|;x0n%JjrpV959YY^0|iUD<#mfJC%QItP|@9pQ|=$Qc2nX z$f+$;+|i?Wlwxj92^~lshB`i}$+cr+L_8GLS`I`3NDrTB(B+o zZ0Ks+bzL{u7^6n@xW&9SMsv8$d9&G!q2IP`Qzlu4LO{ZWBGf70$s?*;r0ODvfNo{M zEQ6O)>W&^c%x_50>Ry@NJl5w4pnyKscSjZSUV9z{!zvasEJz`s;gf&Tt6Va|fdT00 zeXtiPzz{J=;}jPu5j6lj$XMhqfUM$`91L(Cl7o2|>T%d{_oVz1wy!G#c!3$2rudf& z>lU*ee%$Vw%G(ehhi6>kYQNZ;m{2Fz@3;i={36%Cs~unG@cPS|t~Xf>|Jd6YH@Jbg zpZ)no*l&Aq^4Ugm@0uAO`9t>ap{ z>aWaE@^)?cn4_lmrLO1W>;J zZ`&5YHPot1F^>uj4XK5JBjUCLdD=~ZF}=?T(48LC!AdE#!KHYcB)PVfHsbMvr>Ddo zl7e9_%A9iPt!#G@J@bl?(%ULGDzfeR)6>?>-g)QA_rCYN_kUykS3hbzDnV|*i%+_3 zM40(CxMc;wkW>&QNIJxYE;NA)i^5 zc26FbRgPk>_vtl+3s-sz6 zh)B07*naRIQ&QA{>xX z%|#Vc7J)Tt%AV+0pkfh&*dSgQhMG_gbJ7VxIHY>_YKlT7W~RinsbdnOJZLEr5f%}F zaL%G>9+^>KFOr7m&y2#GIFQB*A&dyBFuXFFR6mo@6?(RjOccY5&&#uCpML(?^UL$g ze%~i1H-lBwTaD$3fMpl}C@rUSdV2cqJMX;r?t}G)=g*s6-|b#qYc@zF2*?Ysl4!I{Ec#OoU_*!!SrrxydPKGFyb1_e1YN=G3(9x@~h-Rb{~4`@WD= zhN>zBz^)&{Y)-8kg~0Ks;yAV9;NZM>JNCyNe%_R^Ur*x_e>tAKz?Y}3%_XQK0yv1) z{l2Tze6>LHtbzOBIPSpfG-?2GODN|x?P&ZLUdFrb!o`>@+gEL!arW6wKRH4~Zf|$_ zH}2}@SAAaJetnNhTFK)up#WvqeelB{V!uaFK=X=psUNH?nN^5+jP-m$i3$Ok&sGF0 zO{rJ+@Ki>SU?PC!)s_iVcBQ<$y!=$UB#$0Fc>3Nqpa0X}+x_iN z;?)kK7_N}d^t-?P`+xMufAl~9Pw#*CcP{9k_Pynl&Q8MN0qY}7WQfLDStD!V&Y1wX zB03$s+;wJyn}{N>Hd+CPgPp9A!VT^beOT$O^WyI7^#)@U<6aYY-S0oX`PTFJWwl%T zgRj?z@O8GETJa?M{@%Lu>-Gg&4Ps8k8kbtuYra#_+Y)ksV-iq@c+jGWkU#=g#Jg=i z5o;T+5;IM`NGVzd2~P-RP5%WdLv2(;xGD+4q>vO!w{YfdKb&9eKYj7?`HPG5tE;}4 zQA%DF9{~5_3`6O&pwR?C1TJcU-lKRK8IcgHHa|Q&Jv&(^!rheACeu;L3mh^l4S21e zZ5aTrBMH*oMI?z*6Evliil$ni)Xa+43`H+yRe6rK^|mRky1`3vAG|~lp6;Xg%kY-dS-Ca3mRnDojW>!m3)r?Y~8p&?hSGu*P zX(D2dZq{nJ*Jg*Lga>cIKwOIp9Q;2=+=sP5l14<^wl%M`lwua{j;I;8UhiK2I@T(l zHJP~CC4XZ@s`2Zf1Y|57a-CB6^z^i@qQ39@VLw-#tpMH{8`hi}w@OW?h=ZGVTAw4Q z@th*I=<4YEI>see+(b+bh?#=>xIeo&AUb{4N-5&v?jE_6(ymqjL{vdk>o8~wN8GhG zJ^SI;iI+QuVc74tyWMUWIy0l7E}m&iR<~P-2+SWpeAu?_>E>j!*)&a~pu2~;ijZRk zB2J0m5fQL!dB9^2&CP5W%Fy-oVJDCM%&TY={Z zm{!I`KW}-iqlNW${kd00>|0*{2zz)BOzRQH{U}M7=KbNq)elnVeeBQe83WfkRR0X% zUI@)wDp$R}9X>hLW2n5m?3c_pYjp_VnR;U=+d2!|D z@#)EWi+bkLPmX#hyW_x?)cYv?L`cb$`&ReYIGwbNm@5~-LjEBh9X`V?WR3>{IET1 zEpY&tV=NkTqe)KYs5N#AU=CH}llIAPzIQQ{-EP;H(m-oos1qih*LihzqN^qnnUcF- zyxJKdn^xEBzUx?q1`v@brN;393og-#bgEZ>2BmoMVivBdm5e>9#!!Y5>VzZ#2QSxo zN{-~uyawVel+QJI{7-aVcGBs`{+{^}LWVD@MNnS_tw zV980=ZG*fzJ8iRK`wE|a`s}k$o;`p5tl#w_+N5@Od8JH%x;vbzjfw)WvZX~3P!SOX zyPo}ki>uwm#l`vg`PFVa3B zRGS5rkRf^9YEDhlq?DLW21MVoTvMK7f@v!UO)b!pkMm!bhQO3XcQfDjNS|M{FQU)irf-jZoHOKR!Csv*_s`yorTXE#_9pg&%4I+4u*qUYNNikEw!(^G7j(b4;Ifx+uozGG2p63)Yl7w;8mH9L7FcZd}_SWm+aA?0)>tg}RXe6S!$Mu&rfZx_Wx{vLAhdp&y z9`L>Fqnp>fxBR?C(#oV7E#2c7iK$q#-@cH(bgyrHq469?={_0N$NN2S3xn4e@_#O_ zf9wwl8L4e*R0NV@xAZe|XlNVTs;l7~hK8_bGD z&HIID^&6KUG0}yI$hdH#`tzigvX#lLN+1v+m6{)PqDWN4nG+thY&-$2lc~tU5D&O9 zB8E^p`+{OLQ40lyHMkoNNYFShAgQk;2*836RH7OgB|}v&s|VF<1t1AQ_)KCC9~?r5~E6$vMw?w*d#q%8Febp5lU-hDPQJz?JfMp18mW5*4ZP z-=o^hQB#JQlBz~ZV+EB`ij|RLINaSlin)kSF<@0)pbTqJS>_co0wtDWyN1%IJ&2kI zOjK=LM3xk2^@WHuZPLUvpzmdj0eekYjpF7*1=E_UrXi`S)>6tGLE#Y*ob!uW9hgh= zWR!qQ`G6k8xU?V<4k7|cQxXwvQkJHqzVC;jH?yIah;XO-Xi-*2nH8UF6|1TU;W3sT zzhi&RkM9mMugjwAhgxEL7>cou-sl!!wf)TEWsvqdBnJO zD&{ZfMzJb;NmM*_RXL}8>S?BcG0r>&fDM5eUP(H_5cCinVXUhp`Ld$3Uqk!KGk|~H ze%*fEe%*dW+ch0x28C7f5|Xv1)9h0pRiMQIyhOLXvHfZt9=~||s-O2C+jxF;Z8?m~ zSVBz6i!)hDebLw43qc@|^x>n2-~RTuzx7-H8S=B|>A}1kH&}|Ldy$r)o{_1a^|L}uXKmIUp zhZ8o*kpemC<%{QS(#?bB!Fu&zb^7gZfBW5c-+lS=l`q7X6fA-$J zNs=SE6Z^S)L}pcW_sjsZ*u@$t9&L5EdQd#k^fB~@Oy8T5ooM2jiN{?o_W>+`c~3v8 zG9%nwe|Th8R##PHdKP<&<-rZs=&8=ijEwN`@W;>H-@beI&%gY|?QWY=N0fv)q6|9q zzv;S8Rja9+Rks8-LSQaaCJ&UbkO?XS3}foL{L{}r|MBzBbT|Iy7yt707heo_yEW6Z ze&uCXZ?9FANIId-W-YYd?Y3}rs!pDm)YP<8b(Rlt!2Qwb`@G9&VLT+cPS;Goeee>Wpc0H6ep?m%7W9tZ9IcK<+@h)5k#WFb=NObJ&{(Cs>b* zAAfrL`mMeatK$e0f)g8)!c&)d)j?R@U^?!0uV1~sLc4PaU)OK$m#s z);%ox$vVue!V?n`Q<6lifuc2skmJ0?`8^{u^SNbmB!m$Wk+^FaVT7&&k=M!~&S??D z3wVC(YtBSsFg1g@)}mF7%%p#MSr|nGIj<;N)!}Aac7tp+rGx~elsHooC#czW+^K3* zkn*Y8sfeVEu@e&B*E}$i@S~XnF_ael1zdy@lQCG}b+TcBJ)B}LBDV*ge=w0DdbiDG zhtVPsZp|yik~jV4YIDV_%TGVS*S{;TzWMs=ufN*eZi$d3k7K>Qc}LE9#VK{A6gRkg z)mlnPeG(xzt;6p2`tHSx7w_J_8HVlGU%x12P=`p`T&$~GEp~Ia%Y355y)C@xK5yG8 zMc7;Hl>*HjC)9egscxlK9SS%}PC0k0B&#QvN=}Yy3RQO}b8@V@u1guD<8Ij9-IP+` z3jLvg(SIe%IS2Pf21z8lIB}k87W&jS`1^eH{ITgIO8C!$j>kM93!MOVnqUD@Mbi@e z=H)AplW7LvAW4dG^3~0;Pa`)c-JfsfZtiMOhBnlO0&q_tZASx`*a@y~3KF=Hu_57I z9fgfnecEhB5o|}iED+Y!<*n}i`e*;)LRSBHbNk~TKmR}fkN^EgKl_WjC!6v2j4?j*%Svl{{_|vLN@Ex0AqLY+L>kbTzzGFLFtn8 z0^KJ06_u<7=24DR;E5p2W>uJp+?|!-W)4zAaT}Y$My9$Q#&@^7o4ef?Uwv~o=QKNqDd%ivBwpRr5Va1hnpD_Oy_na^s);3~#6o3M zOd2#(^v?wZk@gqOqvoOmt>vjZ46T>3Bcf{~;Oyp99nLUfWkV}j%uGncQ8k*BTvW(a z$VZ~$OxA+{7G@nwFpPkr;Db1P$_=qry1xMd158KeV5ZheIbi01xoeB7#dJk|6lz0? z-&>BayNkfgA_N-^U%Rf0oM7yi>)RLYr2l93b}sKTM_U0zj&D?`rf3UhihX3TMF;0v z&^Wr=V`w8JnkGYe8m%t$Fk0C;;>LeHEMWHmUm71@s2oG>8=O<$LjGmVsw zj@w#mm{D^`JE)WrZ=Iv=kVs0Rs;1RF%C1xOsC?eyz|n}e1sVg}=*~&L^?;9-%;PxL zTHjyaxVxD~C*b82A@&+`N@=}bU#u_tzQ0)KR_)FKa|SUBSgcfVODt}jmXe5QZE<%p zkLRkYsgC35?y$gi@N(DB9(8=1DjNyBeu(>7!UAlnK2P4l!&LxhBX+QZjYz>tY#i7O zCZgmtp+DdbofBN9f1K~xw+$1y8NFJoecobJaNy)n0CX5s+Hc{!f}UvwEW&m zyZe-zdm0@!jc4(bqV{*5fB!aO0H$+4l2i9T2-^h4Br^P#IQnyfDNc@q4CDDer^qm) zpU#he@!Xh`vbb{;tUF-@&ht5;7S6dXX#caN3(!2a<(tkj|K9vec`+Z1DAnoe$tCkC zlQGxc|v*f`j>tYHPggL4IG#9nX)p&T~ws<;ikI z!dI0ayyx<(kI1tGa1U3zpPzH`Ga6smfuCfT{2MSGPlVwX(Zy z>blObyS)QIMpi4YIsl1fXXenW%k}UYL^KTBC*8W->@Gj)?ryHv1?$nf%wK-}=H+jH z{hNRKFV|oE{=($b)aO;Q+c8VZOm{aoPdAsl;g*2s&p!F-Pk;J%fA@EsR)7EZe{YIz zwf_3WH($Q|CVI17Y@V7T5xG-|wkhBw;_zXt%v=p-keqYwz*K83WvmV)qQup$!cy)o zudX(m%}+o7{QC9VU;O8PeE;f=-<4$AyHF{ncjTI#5(929uS2OY0yt_1yPMTm@yw_i zIi2@cpZ0LtX$@)4+vouWZa)mApu7lM<$Nc1C^Xy69bkZXc?Tof#S&@jhwBy--?{AChDrFsOQX@y2 zn)n$_F;Q1_uSmtQTCKX2UcGwd?iW{=!!Y!Hx7w`N+?U%eiiXBjOzDiIiqdUyl7>MT zl6<%*er#h@ens(VX%0@<*S4)@|0ze7RctP+t7zi{bY#B&P&6 zXE%4MRt+Xh#K2~?X5v0)X0qb_DyvgffGKxf>bq7hOkuvS^Rt{EW_B%{q#C(V5*JV) z)>YMAsKpYRX)huGcX_3%EaXO|lq6kMccM^f(427)Nr=03tyNf4byQNyFoT`Fsw=v_*JAF)-NSbPNY}00@2o-yM09<9eRK1k zry&DGAX8Tx4GcuRvndO~J>tHx#I;sp7D*5$NN8zs2AKl}5>Cw0<oxG zK-0%2IK>jzf9Cpjke;^hPSNR^KTplWi{_SCI;~-5>!| z_aDIad=f8rLZ3fyyxp@y&)I|LW@dSP8%?MW9vh(*fhneLW44h^vAe@CIHFE7Rjo(@ zGr-Xq+~Ecryxw4UnV?#>It)@PsiG>^WO0?p3{mBVDkM;KV`39{Lak78n8M4Dh}XiI zGz>jSR1B{Ny}avxa`pQCZGLhkfA#OaxqbgN@X4po-*x46*>;k%@VFh>c$0e!)`tcS z4bOnVT%x9=I61%)6JpKYVRgW1*#p%8a!Scz>hNk4Oh-h-HC9|Fcm$ew;nVuwDgGxM zeRjNLvB_xS$7= zew*cZmK2iqTgHE+-yY=mKPXQ^KlkPJ$M;|SjO)Aj?ma&h?fGE7{(esLfsr>o2AJUN z4gjk07oD9YXU`Y3GDs)6=*0Qe?B&z`oI^!%@6T~MKJOOqd+>F|EYFYfq$m5R{c9dW zJ0EdoJ{KoQI33RNW0W49^i@n+S*^sJ2+raJV=JU%(%RX0LG(1ICn-JQykYK*IvAHh zT#1MSO>G7k)LTG_#Q`M`H<1fhV@^F252e0(`|kHIUViiH&HI~O1v`?GIC!jXwS-oj zCBrni3hYVOKYz0R?CFyy7d?X?S1btZ@Ls0J#=pB4OgWqNbymQ^0Wr%!p>o?py_CG!^}J z1`}ME5{TBEI?$N73XiH|*;VCIGI7TdBNHR2YN@rjN#7Ylmvc9oMJ&ukn26Y5Rkc>~ z>ZoFwNJMDq5OeoZN^nHZIi(ztRx{fTw?s78Ar7xgt#ud%5y`pFImd%yCq}(n7LJWR zDRLG*hsBPV1>I6!?e~-|3Vk+1V+8=)?Y7oBj=MND=1k>Miio7trIdvC$X($QyUxra z!#3&;n`x-byuaAoNKz}2ve>_2%VbPbOC%{tN(n&jqW<$3@n8@!F*8TxvXq)q%Bjye z=iEyYLUni58gb(2ejEwMU_yj9oZMYO?%w#k)j~UvC-M4=DOv+ao!44-yWKdBGAa{C zOuv-ks;*jwA?Mt6UElYTk~yoXSq&%vGl%E4IqTd?DR+0f?RHyB1bxGCt*Y8Q8$wJJ z0p>2{)oQibY}V`by6aO)ZiS%a5>kw&>?UDyQ;!sgL;yi+(VFD~fV-(_EoB&naU8YO zU{`jM8IT{{J6g%9#`?1~oie`{>*#Fk?lcFDCyPb^NEUZ5qgyG=+;trwqgL)#)pS?J zT8u=xe(mgomMqNVLX@4@qp}(+qk73q4pQ@|0-cz_jH1m>bw?}3vsX%R`T#mX4{BJa zu7613dGxL3LvOa){#Y5nK9w{5^P=x?x__V_=m+}VQuCQiQhGAXD3EdP6dFZby9fzm z*(~8tHTYxlkIjUb48?X6cysEV@4@f`{Xlz~n_)O1DjP=z@NO9Xm%sa8|K>mbt#tYQ z?M>?P==%26o12@PT5G7V?p|sMnj!9uyWy)MNLhBJ{6^+|T6XaU2zETa&s zuXEa7Uti|*tn16mcVGOM7ytUjuiw9atFPXCO1<9Q4&y-1;t)=*wU%)=l=XW3KmQN^ z=eZmwT^^P6A&`d=5A?$AV=Vd#fBkaG{$yX{@SUTrq(QR~~=YcpG|R_n`) zlIU(6YaMf+pFR8Z>C>zA`XaM@_3PhmZ?1Q5-s5hY3X+?clBrt-jGUb;I*|sXjFzP= z8-4fbX#d9aA9gU4fWq#1K>MEZ2p^W}_y6Ps74jt1XLQLjE5VqQd^Ee*^y?=Z>S$}W zB`6zMyuy7S{hgEMXPOt7fyyXie$mU54c*?s)W8NBpp?bC#C>+*YN|zt?XK)bJYi&# zoFpf%HS9nk=4Q;p7q8(=5Kdhu#AO)kIL0g)lL-}7E`yI%989goC_mnY`D2j#-d%mp z=XjEMkELkd@#Y*oT-$vis7MI~qHZySs*q-W{?~tb@%eM=v#L@Oy&lSCSJ%mz*%{2y z4ZZ0Z=8-*3Zeo@VY-%p#-hwD(JfSEAa{#yvW*^V07*naRJ(XVfJK~Jt0%ysrZj%wS@W!O7y(B!j!EKc=qglD=2E{R8wT=fm&Z&qJ*#?sP1Y6C7r4 z3av1greG>q0d9qk&Eb_$9e^27tn7RoFl>F?`8d+9c-LcqkM2YYhY&ewi=kQ*u`~X3 zst1BZmS7pkA$QqTF>2b@-MhOX_0)It-x zE1BD{?S(ffUG?3w)%uh5>Pgpaq$}et;;o#LY}P%e%k^rgWhK3NMHHYK%T7nnQWJM6 zvyiZI66O@$J=~o+0$uy?e}n^PfYApYwUHSdq0IOegAxlVqwQf=f(My06;Xiu8X3_-nqLfFQLzi;44%$ zrJPb?a%Kk1nIfP_lj#v9rZKr0Kib&{Am<$5k8t}$Y0(qRvl|?0o2fbTjsQysAhANr~OS0K}s3vx&32RR;^XIWr`3 z^yeq~loQ;Z3lPM=AKs8ZfYM3%`vF4vZ1!OwEC9GGH4LBackhQ9SAlLjiciz>ugg9Y zfv#PSX8|8Ne&C7gZGlQ#`cEFY!biDiA4Dg{vv~MHR>a4drVr2O@s01J1sl|@b$0}o z2j>1p$NiNTsApe%@(8j+*y9IMz)X(2;2e$T!S%Wa*ueo3(20)m6Fi}0?!jpvJ3oBp zdfVTu&B{m2=i@2*P938!4@N%Ue*p*k;0FLe!#gi^t3|%`0bn)e?Pz{ZjOUmFSq~uU zdHQ}%2uxW)HmQZo%#@mTMP#6e$^?)cADV@BOh@ByYkIW4-!_f2hIFWw#i-8Udm86A z1g^VB9<4jM!ui}A@ggDV!^i(f{@m}!$L#kOz&YjzzCWsuTd&p)SMD#ziQZA|3-`w} zJGxw`2%0O(h% zfToV7H`_uvU48QGlc!HFFE0qTd;k93?ahlXzwu$fP()Q+k~^Dwt;A|%edGc3gKLHEJKRR(ZWy`bqo5kLBt>*s*8tCX>kTMT4;u3 z5ga0Rz}#vyIGxOvcF=hE(!x!{_kvX|_D_)6#k$~sa&QGBb^YctZ7wP2%2c4097#4$ zuC6}4qz-q*i>Qe(Lp5BpQ5nPzLcfHC2dTLj#>DjOs((K0uD3eesgn~s$?EA<|MZHk z*48HjkK>@jh^m3)PKiYboRy6`DLP{C zS_XnKk&zpW$v#R0jqk|OCk{+qEe|xY_@wSLEG8cIsR(!Tko%kp8M4RFI$}EZLygr8 zS3C34Ul4yK5IE2!&cq}QlJ8Eg0XAo6j|O0gwUgCn&+_wB1a*+Y7)IVEyF*dFA|&Dr za&Quns8k=#(y1k&kvPL#9V||6bKNR(kRjTjMOZ&q z3jy5kDF9?}i%1!@Uc=UI+Gf=HEGdD>O$*Eur$kvRDrg+*?)vua+jlQtzkl`i=KbAv z9O~uj!d=Ta#(WB~WCP%}&}=nFTR;+z)1{?`Q;T-M39Pf%%I~|mVlCVLBLcg@DK$ug zxUf&xWQ6jneADG&o2ykMvRWLtLpZoInUochbFYU3~epMUu5=l|Vb z{pH_CM<}kP^prXvt5fwP449h{dtrCDiMOb3AYgoIR0k6WI}<>$j%b>JGHR=PcVdYa z7^cY7k53lzXX#&B9HP@FlWjuNDlfGYkALz)HHv-hi^7)dKL0iLxV1aGA9BJO`LpaY zd*42amcxgfcEZy9So`R4&iZ5j=fYvw^x@OBOg@Z`^`)k(xT9&1*hfAdV?WOO9Vh&^ z%Q=X3wNnD&A^NV)qcigA4~ly)c_a9L;?H|eX$)Ksmi6$f)A};}z-9)F9B^Zri#CLO zW?~j+DBP5N>_|7PYqpKpCz)4n7w#+6wU^|U9AwTCUdN?pjMYJwifMsUO4Mf%muh#_ zZr|O$dVl-k#mkqk-)@J|z{Ht2Ics#{Ff$=#;>ceW#$`@VFE-CM>nH2(NxxcW$*qkr zIZGzVIj{TfiEY$v980Y-j>A|=9gC9J5zMq&t>zx3DP_)y$%rU%if$}sMq~gn%j``B zjA#;PfoX8Cw-0#1OB^xd$o-3&XJ9Z_Czwy?Vr7Rgh#8#R-NELjRt@A}HjsdlFd7Uu zFl6c;J#Xy@2?~yKybUN+8Oo*voir5+wK{IaY;a*PBPFhhvr?xyD}0RZr-o|TAjC|> z!fHkcpbtRF0XUPROH42_h1!H4CAnvoFC;3lFLVHACKtGSmbICgb*id1w2WJGxSOG< zS{0MdbI!T*B*H0X-OPzJwCdTJO$!|t0Ep~tU+~k^r7XlktfJ;)ge+ARuI{L6N)#Z? zlq_HbQ~C|y&7vc72)jG9P1uBy4ZfPV%Q+Oo;I81eY0&_1D{RT!r6jqtTE=l4$6YJD z4A-gv6jiHes?1E9nK@;Vlv>)onY*{7a$^U;Op(QosbVFtAJv0I~5P}lOoTj>G4L6P{HhdVY_;aKLV9sVc3~@betapqPru!%r8%-T{u`jHrA zIi?f0xxb4K=;?q%*ZIFx5OPEMWYt~AdGIglYFtx7i)B> zl8>ep-d}AtPcPON7zkA@iXWN#5;=~^U~k!tgw}wy4G2|mOSHP=)u&JIUccME+uEr8 zs@tqKPk!=Q{?Svt=mwZqx2j~GCHX{VW>vjZSMsXO2^$?zX%AdbLbqBma~+GT5<}f8 zykD<;SITZc)#SvW>i!Y2-|tF4_r+;)c;4*~zWvV!HU(4UC(S255dmxrKJXy7?X9sY z%|Ij)LK4rigSpcPjO+kaK_OR$GL*=L%?(UQLPTE4qQ}C_Pp0B*?$jLpU=TYbHn{^1 zR;1an7!g}?g7M@d69>61BW2|5*gHKQpl}#1g>aCT+NC~&S6xpRa&_^f&%(gVuixHX zzkmPg&AWHkciS>nXG*I?UCO&%Q7xOz=IPU?Ip>?3_t)3g)Z`}|+Rzmcz@lXF{Lokm z56{~qOM@EpudNp~++Db!n4%Jcn>&TsFPt(*0f}j4TN1VdL@8wwCJ|0T%odRfA~9!m zHU}9LTC0}oRjq0wCZ>QOKxz^A`ygl zkPv~1i7eVvxX(o$K2SqGj{YvcvK-Yk&i(if|1phtIsP+qaP+<(N+-AQxhs!Ga_G!G zq`d=f{u$C02b1}S+Z{&~{zUf3}Ew#3Tmx4?@6vq z%XX_>pKdARSHJn)FMa^8Kv2K^m;c+(`-={)UXj6>lUF5k5waG=55XHqyVhck9hkx% zVlf3F*coIzWkn-gsAR`|M)ywo1)n*6EPmsIiH>|_O?^6Z{W*Q$2Pyh6o%gT)Kp#UV z62A3?W4R>oW-45fs+q<{h;frrxzrP)>uWxt52o`XHvsD+##ICAV)yssxB(Cw;wXQACNwwNzT>>QBh|`U>5?lpAxI;u-lm#=4NMR;Q@|b!sf}$ zC>^-4u<$2iG8pklDILkj&G}3XR8dMP!x&Ym-5useS{!70H)!g+^?IFiCZ;)2c)Q&W z!?3*@YOO@gl^u-WRkhX-UHz)xY&NT|U$56mq)$0X5^(glg}Df#r{Q9UwjAQ%k#IJs zs%kN_acgF#wW=zh4|MjOYV*@QU13(&BYL=BHADh(6oi6>(&VHtcb3#avO!8IHd?K9 z*bX=2Zbw$g-HezG`)AGA@2KzYUIFf$-KjD-k|5x%|Ip%Sh+&`bA05&;edhb76UX63KJ&*#cHm)M#>MaFGSZH(54H}*Kh7XL(;M|19iv3QMJOHbm;HV}l~Jt=&WukVzJIL#9;Z*sw(9MkOCCNq9y&dq zgPg4jP~$gdcb}vgPkCW5O+>TS5tV9eS@wB`%QPW*oVEY(emv%f<+~hbte&vo_xE3# zg41{wIdJWwrAO+%EOpOQ=-0i4AEwSG4Rabpio@6+J$^sp&u{Tb%=0<#`iJG)!~AeO zs$(tE49 ztFrTKmGozuWonSySuxq)h3r3TD6%GL?kmONA)=m*vTDcaVzmj zYij{u@=Qn!EkhFOQ(E=;*^|qg%ZuL1)60voSQ+c>+xITM66*Vvzy`BEd4-!*HTDFs zfVq~s?yp9z|N6yOzxv(pce|astyU{ZX*U*{Vn6Zp8KvH;K*#w>&1Bt`lDe)-G7Q7J z+gkuvS682Y^6W>SeMUsO9bbR*>iz3iyX*Hfju#+7C9lmHY1Jbp%|3Nl47dq7VM=g} zG!ZreytcLQ`R9^1mJzHY{ycXcg*&^Yy6&r?oIk&O|JS8Hus@IH{rfO~e%yJqq%-;+ z7-SA5_Q;zI7%R`eMqOVbb$5=?FuNB(o2;7$)Iz4SKef3C99%(Nw@#ZUslTkk)oXDm z@n_GU_ZOGusDy|-flzB@O744gC-Q*zZygfXIiBXgwF@WoPg3{n+0EB)%TQKbfBF2= z%TGU*Cu!(mDy8MBa^jpgK%MHQWX=vTkhySR3Yg#%>yi^0i{#GTYpp_D$<@^pv0<}o%GVH|8LbSBp*uYgPMf)ojWocoh1Q!}5Bp@Ym%6XkvC9g(HC9NpsYRWm~ zu6I>brD*cld^2I+5;-N1!i8MiB=Qpgn^Foupnag$n^kh(3}LbUq zVTg9KWRtyPpa4?aZn#N8eU_g*|8!ey-RI%1UT^PS{N~H;_50g*Z^vB$CGOUY>|}3V zybfvC0zzI6ppd>6ncF%AdtD$=JQi`iXElFY! z++nR12nRlCZzoRtPz35K7USsUP{ytxxXI` znD;mL`5H_yJiAN3dAI%^V z_XGWN2@E)P~-C~dRFD-P!mH>@~KKw}je^6hVvVQk@z>k;b z`Tq5%YAq~i_Senx^RWD^N5|dA+3#okOD9gl53t`4a(s`jKga_4J5I+Nox@Y{ujqib?{UqmRXOUXl^aS)Ejf z^U9>#j(E4ddG+S{_1ib^@9ti_y&cq5l_clfgHx?qN^#~ylvs?_v?R(;)~hF*?z5-s zRiahbcOtDwfy13xB^a3C?Zyj znOP7qEu!$h&A|qqEX}*r6Z*5d><*C=g*=gt|O&Qrn3J2sr?QySWkysSuAw zeWF~cE1a{_P^?;2Bh^kwXqH_7Tp$D_7jrW;sKMH+!O52U`oKRQZb_d*zoAnFW~yL>douW5z>$-iil85u5{`v4uj8Ot;je8S!W+p^$f;9iSrbxuSPpH3-LN-260GuYjm&go2mp~8d152xk9nkbGMY3pI~ z<(!$h@B1+g5e6=$ggNC^$66|Nb$YYhk-LxMFplGHw=1QTXs;ILt;5}6Bf*m(i>y|w z%gyFubG7RGL`*~sg1JM(*+DD}1(YCg2jcC>-J|Gq@KM#Vlv3-cs#X%r8J?nIG!ePM zJaXI*_e(pc$PZU1bQnEKLyDfk&IHnMl0db2B#A@_D7D;e?}lxywT^?1wN%a~EFk72 z$m~&&z?lIu;^eOElc`4xbhHRrXlOi((b-bj`17ZO63~aS_s7v;C}O_bKK=LJJsRluud69Dcd1XARBNpUV1_!@NO_IYMZ(bmPNz2_b687l z6NLItR~Hvx_n~ZWudSAx5@U3=ySrNm=MaTwGv!9vSKmY1q zUcG(;Van5zUXHMcf5TE%YPwll^%&ed5#ImcXnzcyszbOpMt@GWl+q(cC4`;g!kZ zk$1%eX$XIHN7NQ(;+#a>h{zD_!8>Px6!$8`S=>N(-T5Ccw!kh=`i<$g^K7yvHJCF%2yuY|={@K)W2SV4FJKKp6 zkrCLrl>}raK)ue0wn<}uXgtUMkmWDO_TWK0_yGADBi@hv@aMrC;5-Z6>%?&Xn+tm2 zvc>(6ex6mU?`!h2J#y0S`0lm zhnVdDP189(`~xYhRCY+iDLQ=mkh$}EN#%;{g0V@m5nq${D9LJa6*q!_+(^LW;KgYb zryeQTK$Up)(ObtZf~ZVQ#E}kBJ;IHFzjkJinlWZh#98|6xzB0r z%Qz0IdOO^@yJ>4gT5A+1HLnF$U2Ad(IlX=eeL|0&ojNth`erUh6>WqgOjE5)7Lh~U4 zK}2i-AbytLQk66?M+O?K+7}oFkjPAYQhPi{bEdVK zg@zDGz1?LlrIb9DQoQOoj>9mNGRmqqvvC}Ws4C2CyS>|Pw?x!h1-m=c%!12>k-KiQ zTCLaXb-(I!Cz2C!meini<^Y74n2EV+1?{D!dxOJ9#&)fx)>`UNN>MGYM%I*fW}f<$ zJybIDz<0gikjdq8;6rZMI09Le>tevw$qBBmz%Y#0+i`cdb0;@4Fcb`8;Y=(<40x2m zPa#^3*v+CZ5)(zQrb)e`$n|f`0*B5pl|cBO$bUb0uM?l2x&BWTe>o@t{jt<=D6`f# z<3kZe?`Rf7H0_JSJiia3BedhgyXgQ)_i#qq0oItN+?S~n-V*<~2nd|Rah%K7{J7pE z%Vn9Q+~VKM`+wYg9%rzf8Oa2ATjby_k%q@~gw4bPVb|{Li;rd5BrSSFc&l2(vr2V@XcJERL!NjZ~ zF~Nw)g@Mg~`>THi0HR*xYJI7y@7`TMx!3@Rwl0{oF?Rw|B$cS6{vye)CoLWR}F39tWvct##YZ_sz+lr7ODd(XU5qbK_ zv*$nhQMXo_nBFpxJGBN>PTgzWANc7l5}kP;kv zVtwX1I=@oq`134Hk!PYQL>F@V+`gO6qkH;*=V<``LFdtl^Y^jm(Q*dp{-0Et$i!g| z7)3*1v$@@`Pl=gxFTlm;n8wd7Q~5yaU;|%XJ?l1C-1P+*#yXPsoAv5)efgwwfojC) z$xNLgB5ttBO|Ts7Vd1e@J2C<~-d2o)C!bu{XFo1C14uwJqv&%F26E0j_o`JAxqBT; z8Alikku=Sl3{wX40wTR$ubmJDqr&`w;NoIk>o}Gjm2vHf+1(WcP7-nD#mt6Ip>K1*g?$lwq2&QTM6KT~fH2hB&SjUFhok775s4q3dQLDghq;0mzIZePm0(~6 z$g?7=b2VkIxyv~_CGOUFa|Ks5`1M=3g9R)kn5uraiJ;aYm>Cqm9~@lN_;a3$HiHK< zz!N}@rZRR9si4G46zvWpnLY|Qj`1>>GLN#cP>MNk9ffJ-z2%_ zcvbxQzJ+yKUuw~Pit{Ok(jbg*5E(hK2k6J8iS>K#{tvQ`+Bzo2q17+t z=Yw|isi)H+kRrx>)+Ke;UVHd_KN_>k?B1Dn^uy=-WA#rUUX5T>!4^9z=iDVJym!Ha z32@TLwlP$>y}|0j(~akzxFZm-@d6aGT1%I#12SO*NSvWcJg61W z=(sC>Gs?{!-rw2HjosbU-L{qywgmvQQMbEy`stIWE2Vt98(sYCxAn!l?%!$ZZKoiD zGDfD

Sx+oWSBjW(f|MwymHJXE#U7Fbnsh5<8i)8DPw8zAj+QW&aOma^IIE{zgar zEDva@X&l)~$K;rbNz9vwKS0RL*ZYIQ5QqEyoc+6?v;Ms$Up>Y?qI>-LasH){;kNkt zIsd?;{dIHJuP-a~oTIb$iX>JOOD6SWVI z?teh1<>6#S%%hwycbJ2s%)BtOux#8uOMGd1k$lCpLhap>D_f0bALgdiHoh_uM69yI znq@8OQ0EHT-3;$9E9RdtLC!>Z=hRY}D` zs;Wk+S_-95ctbA*W-_CDOfi}Pqv2mzpG97p6A1SVJpU3Qw-bfi+bRy7#Rz?qrc zNq92WAt>_Ys7_g{sVbO~g-h8L4p%6o@UTCBPjgsOga-(CAlnRb^#Hgu9ul@?hp3p0DaE zpt}bcLJuL4o*wSz=JwFX_o=4Ki*Zc(a(}Vg?Z!Nkq(`)@>;OC#cyW-6Q^FU>k+e?}1RFc}~@`}O*fNeeR<wH^%9o9dWl!o^|e`dimjJ`RKsjrr*28@}5timtXs{mWGn*Pkrxu-1&|_`)B=mWb2t)zq9u%7Y5DQ zB#>^BE%oXFbk<_ikh`C}6Mx&@Zs9FkW)g+aYl*fQ3mI?(|FF3Bk1Bu6TD@Gs(LJjz z=Z)&!n9K@!#EQW9i~Rpi9Duh}J1t|2v?DNa6SVJGocRR28VvjWKFH(osA?%Cm|Lv? z2Te&;15wPY)o`j>5=~Uf4v4@6ra%r1%W!N|xr^d2CjQr7{nxi|Utj;~H~9TGY0fW< z)Qprb#^G>09&X=d<<;dd4(V#Y`~0&{|I>f^Py5S@+vDx8fAiZ{-@nn6(|9qJI_@rm zsHG4n=JPxQ_~esMZ{OVrgn)Rov{EDlD3s=9Yn6v$Nx53AJb&@*^G`o}{`@&TzW?^s z*I#{g{rxK`*d@J62?aLY9_Kn}j5*g*A!q^K78GeKPG%2J;SBHincp?AHJtv`)~u z2OXd9xkq)(gew9l9s#By#ROofB>hC2+fv&W-b9=bGbzt7e)@@g_x)7u6tiF!4ywol zAaR=&q?wBa4KbbUG{b~$VL-K@fUt-Vn23`QI(RwmB6xF}N-1e4HN=Ixi_7`uP^UT+ zQ>qa3a1BxY;p#U(rM!Q?bGn^93%*o9Y^goZ&hcj9_F`J1-FK%V(u#`pF~IPa7tR1# zSR9Uf@J9ehK@ljEh)94UG0+Ix0~eBvX-?V`KeNTK1q6|zB?t?n7?OnKrp_2bTFqPp zr3$Nn;nH&p%d#N1`%5%}`$l_Q)?o(?tj(*{J-P(piBuGgnj&dHT!2j1o13>^fBovK zufBhGJ56(##gKN-p1n9-zoV*9N-1-lQs&jw`26|RIF3LsEkt{Dk(`Y=(1!M zVI%Ze%W#Mm^aw7Xi!}>K)HF!aqyv*i(5=>5%q(RtS)WBjTjIiS zhgTBn()>DzDB*CkQd=%*gfV1&MPVSpq&nnbND<*DH#@^0TJwZ#=((pfL0uwNMtCzE zmyL3bUapb-_XceKJfwL>+UFA!^#w#UgIviGbJZdy@o1$sYr?h7Iq;w}OacOo-4 ze|>ZDMJpu>2gr>jx_qA3cYB`3Ui%VCe6<6c@yiHJYc z?a&=_;jvcXX`hSZn*mTHeC?8UQi$F)vX%>W$Jo-Iy8&-s{dk*uZ6cQvbZ^6;#dqNv zP*5d@4kZsBRP-*O#R}RoH`Ic;Xqixsb$W~Afc-lh_Z%){93%~m0RkVx1EHuu4de_3 z;1EUyPL;E9HXJ6sIi`045nLrwJ0s^wSCRNk4g+9QAZaUhVd}9&Ta1 zjLNyNWJ@&7#W{bg7rD3YZT+9Ykf66}(@p~IZ%BwUB*f_gar)*+NIWu7e=6y^-Giri z{1ejG#}>Zb27$Id-X-=+>%*WU+xMBd%CK zPq?ti;yHXkQ6O0%T!pPRZPOQG$xhc2?>NK}6;i3@tdf5Ho8P^o+$yvy+;F z$w4oMrup>HV{H`?hG7t|Nn*dtpFDr|;&PXS@I&f_Ioi`T>~!7cU0;pRg>u=PmR%_m zkwE}xN>Xb*l{`&Ho28dxjh^h+YE++6fn?1}DE9kHA`lCi7ie%qZq$R;_bm)V(nVX@ z8ul2nhDy4+lEf%#^JFtiEj6SPJ1EihJw|Fzp-%N^8Gu}3rn6;A^2pM0g3Y2|Z|xoW zat5+6oM>Rpb5sM%#@FLm0t$>YLDPOGH*eS;5h0a=lu`|xjtJ|yX*|JQLK|}!R_R5< zDWMT?gvV2OtzK2PZ?@gsJrDDRt+ZOf!!Q7dpu3mZN+}{%-PBOSYpu1`QrP(1Ip>`Y z>!r8cr-p;=k^Dss4uHWs#~17|dFC8$V}6b2+R{^}6s7c=S5qL|;9i4t_txf=6A&5# zX-Qv#PUriQKRqHLUMdu-EdeCx;f?0%4nUG-p=#)mTR?g~mPU<_XnCq@SdjF{DWw4* zv!EFUtu-rXW*OMaO6$uyd#8`AwzFmNSTvUOJe9D3P*YYQgl0CwZ>CCWV@p>%xqB8F zG*z2h*tos4BxyJ9c6s>4%jcSyWk^{v6%0~B2y=%Ew6)M^;u3CTD?S$9oB%yIjp=xD z_v*#W8l1X;Tv+?-1<>NkfzSq9=%M9hvb1Mk^qe4E5aEj|8vxidp9>c)F(5{9@fj=< z1+28%(iBA0N>eq8AP^?~t^sqSnn{F-WJ)+odo2y6+{ZTj&UUb77Xt#K=qTi+b$=dm zCz|%)zv)qZ;^DzFja?q(e2)RZdASL+jijHU;{vS;pp|b2&~^x47SDumM5{knfpwGK zel}^Bs>_|$E!sCnT1cbSW@w&+v|cBAO%7R(dy5aT8;TNc2=!*ElOn!c-0!v|we!y{ z4+8L(6MrpLv);Gkh-1@!2SCZ2YwG$LcPz{E_s*PV#{h1SfPJBf2!yWq<-1onD?q;d zifpJZF8jT1RCR7zb?<6yM~Hgg8yjoiKGJ@)GWLP{pDhPsKO*N@)@uwj)l7Pxi~u%@ zLTBf+_kO-_^fUXOnU)UZ!t-utbsSSffQ=Qp#rm~fUa>g-miMv*0hTlS`)%xG7#6&w zGX>FrBMs^0(LPfEt&+Jz`}Y84TQjEJrL})EPBtp+-Sao6ENbk7=iQF~^ZYt%fp_~e z&NUvIN{Y?gS!L6nMHh}ZUx$QS$I+8SgXUv{!F({^*X)d&RyhFpyiD-8)9j@^Y_3L1 zQ`!RtVXGbiq%|!DkVPbAO(_ZcG8h(a#}=d)=}RZW+@X->{Wo()-&qKXHauNR^wB=s zTieE`Tg}d%!bQTHp6Z-8Enm7EAjk88%~N=kWnggqT)U@36d~wv#SP!0 z!7rC}Y$e_U=zGK?$l}dpGav7mxEub;on2{-gAk}4R|^2;4E2UYL?Af`Q{)tp zEmAOx4la6f7g0}bV#XOE8(?S}Q+0O)^L{d%iVx!pgwY*jM%ud^E$HD%(u>_xP6;)R zhnFudb40mRT%TUl-RsjSQ7opEchA%1_5c0N+yCpU!&kqPGVgDv3XhK z-d*g+t9`OE|J^S?`;Y(Qe~|EB|N7TS>Q}%2?LYnQ%P+tD5;8jEG=aKr9{pDBJG=~8 z7?=+?`<$YN*UErWvZ^45u%HwMgrP!}P-)h{-~RHiUtC^}!gt?(`}^Pg>gK!GqwudT zE~h$0J)r^~!jOz`oN9^1)O998l&Z~v5*Bo{@$j?c4-@o;>${nR(()7E(! zRu%;SJx*ImXF0VfQ z^f<@cZ*H!p{G89m;;br3NX!-zBEGJ}t4hRYTo=e3K7)OU?QwL?(A!M#RMRaFxLZb<4P&6>}RNgu&dZ+5#~sGh3L9wI8k z4w5=k+PpxMCwfW&AbF`{x(W*q5!tExX%@l0jenQU5>~)k$+R*J>cc1FuoGtST;f=V zG>=Kj&EewNXPSmmp(->mkOQv3F3(DMB&(S|X#pi7PtX%^o5pZcGC6{SRSv^YCpdtV zPj!-n8mEv8q|!z_n8Ll(n`-Z%SInqDagoR=MuDS1PxYDV^NZ(KdMPvCygt49`kSx+ z`OC(1hGh+t0IlB4*Fsc;haJn&JYHT7fA{x)_xFGQ;+wB-l4`AWKFv4prrVo2IE>>^ zia8)55TcVu)ahVxlF-JIhzJRaNJ^u-JB;QbCLkqT7>b|*+FT4vaWdUqT-I8rX)3qH zEub>!K92%cNo-n;TMdT@RCSkzh;Vb8iy6%<4DdkpP!(0B5)t7dpvX9m5Qw-YI!Y;} z;AB!7Mm`!U-hJglDpJ$tg%Zf-o|txd=hX+dS;8|5l1eb3A+%o0HW1!dZwMIils>;* zA2#}Y%c%H>z1($@2!M9Bn3f62Ge@M&)5rALF-9e~H&dV|ti9x`GRc?iIw5txGEk&6mc zvna%qM|h!!HyXJ}B11wV%pLAd6`-TKqVxG0{3`%-UzJ!OqH}#7=$X;d$Y)?JVAT85 z1MCiv)`xz!H}C9#{hc<;5djhD_z}<%6`_Ncuo5#hA=5RYR>0U&M0V!A$HKf^g5`Jg zPYGn!a5s048jZ9RVhGg~@I=W;Vy>mkS#%snu-0%lSOAfTpk`7V?>|Yvqh~jX;_jmR z{w&dbh-l%a{yr0g2-Oa+LB%1&oer3=3SvYZfYa&pKm4!%%Rl~?{|&nB0N zef-DP+5&}eCxb{42$u+`Cz`NQDB(RGPZhJapltjqJUdmJ%XqQE;ymUb*hjL|(CsDP zS6$X0w|7h)K5rZAkDuS|xE8tYe{j>2_x+7e@LLe8Kcsm`*5$e(%r;K##qYNow1G&g zUnP15o$X3a0FpL-r%i6N==SxdKU+%K$L9Mv651dNkwAwF=+eEfJyI47p*TIHZFmGd zLRu}yAOZ=D=z&lTZ~t8h`djY=mv%4OKI`g^Ui^@o?&+FTm7uX}3k!M@&@dJ3_Tl4IsmFPqr|DR#Yhp2T zN4Q4}h?rfS=0;H_O{&_0e*h46F?gGL9zlu|WC|rYP*k*m9VI|RxbxldG+pF8?$hof z3{lElqgXu_B!?i>A{$gB1qqI+j~I*Cg;a(WsRkE@GLnZ%q;PF1ljJy?2|Q?h7E&Y> zsB3_;Eyum1V4*=6+yYhFIQNRk1H%v|&M?#2-DZzd8IC7052wK4%5XMlIV#P=3j&Y| zwxl*u>dDyR`y|dHoz)=xRD+mk(!llhh z3KE$T_Im)hy%|a=(=?Sbxu05uSe5f!MUZqSiCOnlDiR5YElC~G*2AU7Y+DuM>`4eG zFb>i?#~tBq1te*<#&LwINs$I&xaf6Mlxnqlv`D3-MGsaIj7=t zH1AC~sSZoZ8YWOQ?h*!p-M- zny1>*KI6Q#R0LX9cQOOsJXCaT@Cygl)K(105=04l>AJLF;a&L1vF*O|;Q0AV+Z)%t@Tn_3b^UW|&d#^xf;``< zb@QEkl0Tiu24W_QnTLm7zy9Y>OQMy#U!M5vwp?3Y-+Siv{C^$tQLo_RU)B~0a{lDq zBj}%xO|Cy1S-YmsIX?Kr{qKK~_X&M56jxUfx8XN(Tm8ZULSaDs3@BtX1*P$IM1;~4 zOGc00O4pKp_;Zyt4)>=ZTx2_>wh10Kt#$N5qYXUq_-^*EfSB?Z`6DGdoTWKd-Mdze zptr&pO(R-CQuACSBB#{U+Un+x2#acpfQrq<=aPa+REV3?5f}RM#f#^=-SK3{spQN2 zEM+~#&f_8tmJQVoZ{F5#-`3+%Pse9DtL~jOW@`yQr)jzv2CGr#dB00veD?X@{MBC{ zkGI1x{Nq3VJ%6AcfEd9Dhklv7FxqnRB~r=t~p zzLTV&&QZ+#>hkilzxv{{U%a$=e)Z*-U;oo@>dnnF)i0i1a<=K+b(UlubPq6&~7H za=%Z`Fs(%wDyRV5lL0j&U0{^Uq2k3S7ehigjHp0Q-XM9tEp|L&u2L(l(yB*=JH&!? z(gKZfAj2?>`}uH^;_f~Zk+becYW8Z$nH=H^^nC-2{YhoL$L5VcBKQ7##_@DVxvQ$v zTU991$wUyx3h{S&cfMrkleY7G~x}TE*msHfxE5k$_EnPP(fe zfGb<+SP2S45=#ywnA#vgB0~}rDGSyL8el6SK{tvqu>k@|hJg+y7>qKDG*6^Pt*w}I zpvB-8yk3N`x|=nWJT$kICe*~{&Lg3cl|jHtt*7a;7gsNLy8)w3^KZX-^WAsf-MqaK zS4MM(hWa@)Wwp#rwaCM6pY~U~ka~N-H{X1Nh+6z`IFwRU)j{{}V(!%{TNt?0!-Uep z{ISCK0F+XqC1w^jDt61{TRfPgS0hWQduJlv+}yNb09EEBB2c9^JV-Aq(6MkpxcgN4 z0e7(mhimM9SrA&$QnZO`&N+`6fOB>r5QeZ7>igKRe8}%?f2IX;V?+^zMGDYEdX6&~ zSGU~HXYV`;`~KslL0TN$2fb>Xo7;7beG`yg9B>b|r^bL-zIJj4y|E}`-77oNlHGv_ zz?X$q2(yA{+{7M35d}kAlqAAn(KcuXM5JFXu(mH2`}B_&`6J#h$+Y45I$9=6x_C<` z-)VYr|5xufO~SpsH4zCF2rJ02H00yqwv?HJUJT<%t;cCPUQ=oag*i(S$&Tc;1oWaY ziYx*~5mLa+uqBk(x!r6QT95t;7o6|PQApzugtZ6^HN!^NL43G;HeNhK&L}f+fnF9&Dv| zSC77IE|%9Oa0NRjMf-p;`O(_aM~VOvU4Ob~K5hvUKZok@Cn2k@Mq#z!V4)o_n}&j$X=u`gxy=^ZEYXMmcBJ=?dgug z!Iby=*>OA9w{LI1yLtD`o9pl1-d>-|3@s6Lt`ST~nzBUFaGS1&tds->MJYlR(~N2= z5JEs@12AjTwpyNx2sHFtEnCf<5q(CD^(4b&h)T)|W?}ItmV&I+8?sZN zZFji2xna^liw-&Gp_iwnS`;o!B=6a4)>S8Wr~y4D|cb zHM9*gxIvV5yPbQ>2whh#+RPB8m3?*hoV~p-5qif_N<(c(OCIcWn1B&3Bu|)@MD!~b4^awG%9++bLn2#T4uEOMe9{% z%@6?>MD7`y%n8s5?UtuzGb_cWX*wRJR_Fc4#{k`9ulBopK$JPBr%$_9BM!Ba+57Hn(S9y8iu>DB1AlSR^QCVq zv826k(7n|)gk@TvdF_AVa!y6_Kz_sk@W!0G(<|paqJuEFJ^z8UENAaqyY9+I*J6B1 z?zR8Uz0U;bbJ^FYp4ZQJe~>KhBjiqvll%SIkP3|^!i_8WZaW`dXVbPPJBa7=ADps@ zuD#Da_ulqDC0m>39x5D5Kc9{BkC)B$J5LvzJ4*8^Abv23#K*R0)AN7e$b90yA9eou zc{ii?&Mf=LW<4BN{qoxup3U8-XF+VPcIO6PeGRVr0&xtql8WzJ%06;@^4@&scJ41YaUoZZ$RF0L57y^%Es(|BegFLZ*!A6UQ~mGvfBJEyotM}Tm+{aB1{^e^ic4~D09bYgd}~LDMZiLu@75a& z-{wh^hD7mFy-*@6X%@v`c>wkS1PVy-5;1t>0Ik;Ju^x(pphTULP#8nzT;t|=&@4Kr z%*8NBt3hOO{qFG3Uw(6Q{rzu$`@47V-jzTxsV)?4lp3#=8hopMP@o@{|334A|lOH^2Yg?@rg(^X-kA1z1sIE~Qw?;>(cUK-$5_ z=ZFJbycPG{d{601EqdLBu^*k~sr_jA_p&D69qoU7d+rOlBtzRCTn>mx zH4D(w(2@@A$MNFD3(09}ys;4T`uy3;Pd%4J#I z8LN@oy$6kk*r85$-Xj5sGJ2{HtP59&IMZB<3)5~t?Dlzo@%$IR_~g@Hki5Bm_v)+f zG-t9(qEf=dS`4_iAcWC5jci1aH5Ekj4k3cVq?&Vtwpz<_?9HZy5zrNeR(5hoa- zbN38b@Nqqnk)TRqW(w z?+($v2{b<3nbqsdXv{j_K8HF^lGdGT7W+NO^LXeHRZc({iMMBwzs`E4)@cMtD) ztTygcTD@+#Y*)G7LFcaeASdQi_Uy;mo9xuLh55FOrgcf&jIQ=xddpYe6#4KSoyEw- zZ7n365?&)>o=&4mPP-fyr(3D@#gML^Kidyffyxk&x#Bd{+o_&v#q6_(BSI6Dk<>ig zH8*yb2!QT+U3T+M(g7%~>a7O>7jGM)2gM>Z+!1nl@#2dw{u-Zrf^Tj+>m8AIyW^>l zy^<~fm|HnI5T~Qdh~XCL8kArz5tsq)qn4){QKZ+X0q`4IDrLX^y-#9>5YX!vP{J8P(FE77N_5okoB`&#U{MI<$c zaIN%`Nlna<9OhzV5onnj1Eer@ zrLLlS+fOwbK~`GJt+YHV5tSAUZT)}F#?dStiX*BwB|e&ZLrFp~ssKh8xWgMXK>Ft8 zeTO~wRsf3$-)XJlP$C62AQst?EE>B$4@qfef!gZWhoP}iBis?*a(OdIhZ7=WbpIX~ z2d+0r-Z$zW>wvUT^(E`A&s!Of4#eGYiNS31WJf}4E+Q5k--XH`m zpY*PX`1F^YgI%btdyc^!!YC& zl5{EJ(&O(D7LEuLNzKS!Mys>c&(Qn+kX2I$@NhLxx>E)++-tSDHL2F(-V&*3bu)Oa zUi1i+F>+&0tEz~2gu91(PrSSqx{L)Vr`nTHqpR2qA?X$K?8oDLI2><}r&5ZUN02!P zXLE6zv)h`y*o|WzuJ%{E-EPc7N-3*|tT9zt{le?0<+7!(b{_(@&Q|I?*Lj{>t?0!b ze_U3wP}A}Vc*_diQyc}tH}BV7qop}fxOy{-dIgyvOw_>2+|n&n>QVJ1EReY|fJLfA zyKe-TXhaCyTH+{QVtGx?_CL7hR;C(@DSUnQ>0Y`3JUW!>k2`rd&d2S)KbB}f9RwoId5{1M`+YMZTqruI zDwtGx@&kt?(1tWtRRN>eFvw|k+)l&EhFw++(`}uvZ@>E0_piVHy4<{r(}~4%%Db$} zahLM(_Fb8b+SBTW8Gvb;F2>!szqC64>es*d{`>Fd>G0im-(6llgHSYQ)u4K?7LSM> za?7&_=}zkgpzsE}rB?Uq1;Uhul!h^RO6l_Q^5x5yyZzDX`fBEX$uit+6{j-bx zFD|cgL^&RAZ{KO9C~DNZOT?p7Z$0v{kV08wmiOHHcgDl!`@ht*e`MbT@bq|HR_y+L zRl0tn@qI5&(;6mA#9}e>!=l%qq)OgjT)cQj5sNA<8bn?_fA;d_iRLugAl+v)vIe+)fbuDGGI;o7iVH`(P$8k;$4FtVvWBfzI9Ju#cPGNSgX8Xac=QdnFO782{Q(hX7Rq3_=y0+B6iHk{gd*^c0lzcA9?CZB(Du~rmDwWMJ?lHP z|LLuYm8zyJ2nmreSBgzDYb1yY)IdUk#55o0SKogB_3ysDesfc%3S$x-QmS*gryaDr ztEyQv&1#j-Xt* zHn1K<_xlS-(wtlwjA}NA89ZI?C21N4F413)P;(8i)-Vru3RfuLo$+?AXb2H9scKfR z`NC4ly&^z_yVqLXYPd7rmyc_^Fgd&C2|#t(?rjs;%&9-@I;*T8 z%eXtKxoDo;RFC_>n{HQ+?yjXSc+K_7oAWn3>~)4lgju*(rz8!iC?Z<@GfAX{ld{yQ zV)H}v`>r^hpL*YX${(`o$!uEvW~pgMwkzHe7(OG7w#(*2aYD!zbFgrR^rDmD5}p-1 zk->dP^8DiBitXHpcF z(n5irUKDLvKs9ScEke+Ig&Lj^2>aV#{>|U~cmM9ouf7BvI-;IL(qhag;X!vuR12RX z-9QqC45kHCYA`_dC!F{CLDXhj82tEdZQSYMaiIE%Pt(rzm&y(kFD($Ikz`?odI=e%;M-#PdCbfYGMSJ+~AOa!elyTLTL(&@KJdox);1iIwJPa5k4Z4 zvk_0V7f0=NF#xor>xWYf5}KJ50`r)yloG%D`rCKM>DAje-@SQzeY~9_Bn^^MnVrHx zTY75qS{N$fUwr!VYQM|7eW~^KbUL0+(^N{CAmXKz({U0W!#wGbpahU8N>b#EuWevH zu0YgAaA@{PU(N6DR(HV7($qIqAYBY*R!TK9t5F)W)O^U<5bmvVi<_`3k1VR1My6Ij znA%qOMyqWuJe7uK<$lo8HDdab_l1OlCWwF}3Pgm(oE91qtVF1Xg5oRaa+E8S6j3TQBSs6#E(f*#4hfT~IW(z6veo+3ot z>H=_!mX29~R!(c(=+^)?aNiVK-^&NaRGMovB191p4Zu_vF|&D|Bckzdn`0;EoU-h8 zsTsSi6#yc({;2by;=;5!51c!#?SGuVwoW!{c8!RrvKctF)_I=Y-D;SbdvW)wE=jWq zL|XeB!=A0oZS*ojpNpT2-^+#t4`N zy`BzLl6ti?f0mo?p^;QT;s1Z@CyZh<(#>^V)wY zELi$Vu(+=R_r_gg#xFWwE7-CwG60>;k=SP>3@jo6H|nfbDMe9)6QzhwKoLwLRbUh{ zQrC=O4FpAatMz?G5&cop)$HZ3^UC)lsRK`{h(EEq@uR1Jeo(;f-a}Dgp~* z;5@I{t5<>z;xCJyw8nk0s7k%Y3Cgkqq0t$B2%r04eP|kTE8*Dni6^emxu@^D{A2w& zoPYI@ceV99Huz>&WsFOBd%>2)Sw{?6I4IINzFfz{s@%7|vx0SjhZWH8)S~{7_P_se z*NV31E$|5h^uvDpp!xoA{Tu;&7y|wM>*o{W^CJ-7AF_Tv?9WHmPdQrx51#ia2Hr!7 zjjQv{PTKzsI#59Y+o-65Dz55i;Npej0RV|IN0?R7OmPc0t5ZcvbeNfq7?~j!h(epC z@M^dJG>^|9)6HCOuHW2Vzy13A>;Lmt_T9C3TxC(F9fEZ_9S#>SURs^#Cw=7tjE?%7=2A(ZfD=t`?x7<82YCEOvXE^Iun!!)J+ zn1{g;rCK#h8l(DOefIKd*rk*Xw{O4tr(a*ceI2v!l^4&Sc`3)&*K@csvL=x3bz9@` z5$93Ym$z>@^>+c>-HX@jY~P=EHCh^PuUEEy;x%vA&&~UN|9At<*C#ue7OD$FB@&szY!RdyQAs3C`%$wLn-4cr1WJgh zrrlmO+s!SHr_oHpP2AxSI9=h0VC>I5d}lx6gN1Iper_0b=YG8hVQHanSq=b=dAor` z+<^l0{jQyJf7C6J50|77ZnZ)OO)9&KA>|jJeDcLFf2rf{`gl9n`StZ{E9KqW>$f-G z^Wt(Ot4{!DJ29c(h$1whX(LE57`=Q#dtdA0h=^)-X^F0ajLrJo7*tKq44?u-P#oKl z*`gvOb!AzRP1kWST7Cpd_ep{dZxKpWrliR%!ax^A_ES~kPV+^IX~uN4!&FZM@F;a=h{M-4fn=*XKhH)sEM0S;goua?r4#_Fy0{pO>_y!KlqG@o zI$%sfAhK`)+wi9{I<+KRAgYp58ZuRM94%PFy;{$$mzC6fu@7M=JoU=+hLGx*gdsf! zi^YKxcY;r71xyhEsH!9mV@{&offx~CWu9BwGc#+PNQNj{K0koH^7?|^=<7ox&;%QE z=xiiBSww@jSR6|}oA*OpXt;yx#T_g72UhI!^n4fw-n8eQ42z#*6(#y;U&_nn_YL;?-U5$4vM zPsYX(3W_Kc+I?;Aer`6`9`h&O$%okQPwDdy?ac@GIJ+s?@(wTpY~7CT1#X!+p=^0Q z*{zS>9~&O|m}Lb?~8;x##ZI+)MTpI!djFaGN9J{@*~T=5Gcqf_KeSzhAw zay&V|yxM<(=^y^%m;d;mFq0!Uy@s-mAdf8=sGl^Ti@yfVEFjR)E+}`R=}3n#WaZ z4YUREj(-UNH&)oA_x_Mxdc0!#)AE#k`r-ZgUU|e{H=e)Vu?nAh-Z-CgrzH>1zvutt zh6jA_#P|DEwr4)IzdU{Z9a-7oA7VRfZJbB{yZ+uc?5E2I8r1O;!mq5Va#)j(xGLUBM7+EnY_9}bjWlnp+o*1mAFtwtg5}tyD6O}?l z1O;eSCSjBcXG)S1G)<-49FK3_zP&k=fBN0K+f%(hzMG3v_c>=M0%CELAmLF<%$`!Z zx)`o@7k~e^Up%|q<=t*B<;~6Q_07ARo5S(Q`7}uso2R1$z0{;Nsj3bcs?0g3q(W(% zpu3B5B_TfS)jKaR1b_%v4^u1^cSt6fN(^I;NFFSu%yXG4N}YjVD;wUBiwRUY%|&wz zNtqHvAq_GYqN!CnfFKCbAeb@$m(U=>J5jbJ(5W6IR9rJuA>J~6ghenyJ(5SFr~|zW zD!J68g+xfeh0g9IV@P47$N~w9#vD`ty|Ar!Yc8_z`&;?%VHfDLfh-TqF&Hq?Fu! z&U3A`6l+{qcP}x)SgJ8;>N2RRFp)Gnueuw1M7C>4qjvWiw0-mgi}v2jpLzBOL@Rio zg*s#)J8^QaWk$79OPCdRM0m7x)!B8naU5GMo1D~riTJlzDACxtZiJ?u!zNHlDRVWm z*KcpkqE@dp+!|O`K)9V+5;!G?VYu91TwPu5$K7tX8&b+Dq%op%y(1|5o}uAEq?W6q z8D2}7=ed+J9c~zb5CTb*4KmBSVUkTWgj+vVU@`CzY~9LXq!m>ETqNwby-xVVeZg(Be!)J50gVv?NMz?=LfXL-Lj_+O{| z^bFu9R-wE5%7;I2Ms{UBA&dTme22_;*b*c3$ zvSQGBY8(I^c-Pee{!qoNhq65HojJ8Z!2PV!^NB1pi-rI7aN7PHZ{+>5A_UhXcQB-n zocR~IFORJD5B7_v@hm@58#b8owXPw6d7ewHRF$M5EY$-{IS;#ZJRGK}>@P1wgl3G$ z6f5<)j-QSD-C_Rb)mOj$-EY3XxxRh%cK2@9QU>Y>L@6MZnu)08i_bp&{PWNM`+xuM ze(_hI{lEY9SO5F}@n1?QI_%9*$}GT;vLtnP7rI-39&ig6M<^N?v(@H71e?Xzz=PD? z5WuMxSEg~ey1aP);*;kW`(eI`d3y8a)$8xSzj^)Erg@)syWJqcYCg}!qlyr!?$)$? zJhrOGgB_&z=SL3q$Hu^!`m^5c<1YFW$dk|el+*D}sPBA*A8Rf6p?!8W45S5HcHKn) z03ZNKL_t&lEJ8H1d8||3U0n^&o>>xebD-4X$uFNj+h1H1fg>93s}aZ|99U>Tt1I|y zx?`c8MYl9t)H5iAn5AIy7>Qltm}QqBfeLSBh3aIt?@p{7)6OQVhm%e-+)_}zg#bi^ z)e3u(q!47?v);lkZ9Q693Sqw-aIDoQ2%`N zjkFB_caz(%`@#kaa6W%K=C`sGbRbD@;OJr4J%72oe2y_cd+}no+f~p?eRq9bO1Ztg zt!0{T56{N|If;M~BC-Zh)+=i-(Y6BT?mW)64Qr5FMAmv*+mn3*YKSLdf2)4dej(vb zi7*B!DoTlfN3GROn&U0ZtvZqRdHkEtfBD(7U+jf;z?)ac*WZ2n=KHsAUVT3ujuD{{ zA){KURb?25JWqAOv7KMc(*JD?t9wvHBn>Ku>5x=~XXQ$Ssv6a>pf}ihDHxJWyA5;l8yJt6CUlYNW zyH7|!oPdhtq(fE;-L2H{sI^+1&CJRi(MpB2d;l#5_rCSCN1C}*g9|RmkCi9UdSd~h zEQxC34@rRa(eh#Y#fM&Jd$mRP?*G7pH8wtm_q;L;NN$T9wXwwI);+$v*&6Omq7EzR ziao1GOY)e*q!Ia5+AlnuG|Doq``!9r{kiP@^(pThCmYCxfhF|YKJP7it>KHyV&wtj ziS`F!?iCR#qC!P0gllfc>(`&|$G?90$$#^U=l|xD;R}f!D2j_fVu#rZ(IA19`1}|6 z^4Wf$hu^bn?Ry^C50tVZOoffaw;e14}`5xT7Q_j>lVNcr7^GBI~mk&tJTF zL9!`+tGMzB^^tZ){9K#NPbwcx=V~#IyY(6$ ze~EJE`qBawMzoNLAv9bO8c;yNo!iK`BnHJU=}xf|TuAH`sYic9+{8VBEiEwu-hlZC zu%VG?5FPdvGF3kuj_+=7{y+BKtT~b-NfY}%Rde?U+*w&iAJcR6EQihE_Hu>K@d`5$T2C?vTw41+9nYu%R?zcqXIXWd&!;Z#o5s}KKSsx^V5r? zbhPZ6wjHc#5|^!>wC!rs-CSL(NFxIG+;5_&2~{;~+q7yHUDv3Bj7d}7j*62yg-`C) z=PSl>)YZq!T);3Bgb1ZkLQB(hZCRAE>U)nUUfkVKSvt(&ND{RegC-ZMs!)K?rl~5P z)o506LNcAcm|{r)YSJtyG&hooVPq0&5MGgGA^|nJBMJhbfe5K*2|-~!*TMrHEY*Gj z6*MrA1O=cYD`eCL>65hAF@1bI^D1pjax`S)OeLBUjYV>(g?PAoCCPzMIEK5cdgCcG zRYlqXFoFj6%GX^L^4K1ulXZF5C;xz4;#Bu{o*Uz1L|!=MdR8in80m0Q&bfw!s}nVs zUR6?R+O};QY`Kn0DF>e(Gd$pd9^U#Kz{vYjpH{c6ObNcVCT`9nS@qZ-&v2{F9VsOh zRQqddh;e6t*n|t;c_(5HO`a5FjG;_uO7yx6>(^14#%t~5q>*zPScU;Pn>)aO*$|;- zaIc#y)ooG<;75BEQLhE*s7%p0_qCPco6S)5YfS3;Xl)TH+B8kqw9Do4^!ViDbKVoO0iMtlNS;5R2W61Ac}~MCONjndgtqk@2cph~)`!mZBjp^yPdo$HM+s|5?Dxd4i~==En?CsagsE zB2<->BqAwcc4Ur^*@3dF2(KR9nl<|fk$9^{xNo06-EGw1W?$Hi^OP5IckkRPKRLsR zYb!)&*PL`~1m4@BDx4*^qyMFK5tCi|#fP)3}F=PH6?GCQ$N!M2tUUia= zhQ!|WPv7sm+s`siZXwX;*Vo~j?f3C>0Ef?1JHo$vrPA*m~~WohO4^XDIa;~VSMY~XX$2!4b&XCGb6$Utk8s36USQ~7VOHB)fAcWBX1k7L!xs$Upd zbA)Gxi9;-at^_0C;=H{EW6~dL96NCPOqt8ixfHr@eKNe7{hVS(^;@x95A~#e*ZQn$ z#@)>dsVAq4_da?aT)2qk^76%tei*LTtJP}N_kGS;5G}E6(n56*ArOv2ce)A@E(}Eo z>!cZ}f(UpG8ckEFQ=k+vsRF{}4!3Z3xB6C5Bezvuh?>_hzG;oENPUBvBtn32B^;nv z+awaeaKaG=cL^t{4l@d5vC#L=-+$IEQs~^);sQv7 zTL`3W^r-7>$Q3h&(IEyHNH)>{2rGawEQ%E?R=Ks^$2`Rvtcyx+#_cRH91&y$-5HcA zV>>7lO`9Y}lGJq4BM)wL;DrZU{HCDCWI{BQb$)UcAQ5 zRD41M)LLgyAyrAypfXr*QHmG0kU%MeyL(uD7lME>5FuNE3-~PFD8NXT?qgzHUH-x9 zNelu|QYsw&HWC1=Y07+*{M=77 zkuAy|lbty6Lf4QaS=T8+k1el5J-9|6ivy?`8&j~ekRz*pOd!W?uQdSDqvi}(582fJ z5QhZa+VKBt^&kn&XpL_eslrQp_wxbdu60zPNn5*;ojhHpYU=lre-b&2vCtWDo^_ zz%{(dLHI&NMcYn~TRm4f13o%R@%r^Qo?U$N+4(O%{SAFc^it0nA!^Yd0)WDu#XXRF z>Q#iHWDY~*;+uk@V0|8oV_7VtX`#s_ftpeZFUZDRFcc2GtcMs@(Z6JW9m58jYYaJt zfgWLz2B(^?7LkXXGuA6;ck%uQr)OuPT1uIUAhPDh-QHzS^@qf4*6R9yynpO5ZQovd z@VhKP0ST1bHhYYIv$+7AeQnqCoi~*`{o!tZ9qbbzC7B)_U2SY{!y8B54Y)j;p6oA?a1sLr;qRdJMSDjlriV_`}EuccJ!o4 z62UT-djRClisEgd&hTK+1LA}cWAu0YV_~?ur-%;T1RMGy%6rY}kwn|D6=_-8a4osB zpy$Rz!V|_y6pUI^IDkr80E=+AML3ZKtIhE0>gwg?)#ckam)AFMuQ&Z*hOR{8qM&Do z3=sgGV2DRTERL7&ot?h_{Mmc&Jv%#EAg>g?7o*2g(HwWjUF!R8eY}ha&tW;2p*J&_ znt737C>*loiPX2^qHV%1*VNdW3CoG4XBzqWkjDf;0x;EFL#P7o42OflMpW9QjkL=} zamzO3ocq$(62ZlzJ9!UDrD>2FHYrFSDOJP~9>u~V!U-}w#@Hk^2*RbpD9vFa0=ifN zf~5rD!Eg~FpoLyythVBjssn=)SQD)5J#-`+H4YD`(^8lRL2)R;#gj}Gi7Wo7hJ+_U zA^{0$937Ah$(RhuO)WH{nkT4$VbWN!P{MFsBo?7+|A5#NlDupHl83* z1h(L`DHbw|ryS6rZq=VwV1#Kh^sic+_O&&stvz$# zO_P*hxJ>Y3*8bNFsNB?*U4z0qHYfB(9UJ8r>xJntG}9&SC-sj4(=#P6vV$)1HC^ zQc%K(m~63_EQ{@b*z5n(*em~Ow7;JK@Yn6@_I3NZ{lVMTs}9tPbg43NZBu@?=(a6l zF?IqGwsP}ycqgxf*zHVQ)CpMq-=9yiHAf#!4aAgi3yc{i# zzx~}m{r>mA|Fa+c&DGV_+t=3>DC+JoPvG&%>DBf1Z+`M~U8EP6Z@{=XJBFtI^{eDq zw8u$xP|@%*^p^7n&)@srU;MX*{PFL8cfEe|`RAWsUA`GgA#*@d*S4AvrIbQyw_L1q zu71m)LIhM1t)$PO`)KB31SJw?)(Dp;XYYUb{Mp6xzVsh|{MqN9{DwD|DT;WAl`;g} z+t5Y@uE;)=RgHqRDS3?)+3)X;c|zNQ9uJAK(f#_5sO@=9|9;zKjk-j&MrLT4h|m<2 z?5;_;T%zj+go#7N!kNQZ#N4$QNjA^N(YltV1@4P&Io777_pQR?kd`K+H{7S)oQhnB-$`} zyXe}sE!Vwd>zpavBOq=B1ZnHw{R6iB*?;_csGfxy%5-;Wnxmtm=NHdjzwL|J>T31& z>S{goB-|rP?#LuU)df>RpqRPmVr*~SwkC1PiJ#S_NdU}jp&TyYG_P1SP+ zu<9Q6$-zR>m7)!s)U*q>DO57tEDt%N=`^L(wzYtkyIU#l-ilTlJOJ*VvkybYkUck~ zP?<#BKo3+R?TC;mT&BvTA_*jDHB?i=y_8Z4yz-zSVsaD(KuEy%i5v*T=+BMYpO434 zb+nAGz`AlE2dFb21LXYb+n1KE90B%^+K+P(;!Ht(NSbWb^?7@s=bZdf4hU+EXSjq} zmBQe-YpbtE%^e2NU@)O1O$w2!3i!R0-T(Dk4TZ=2pR;VfX?%9O^^vxW1fW7uC-RW5 zuC89a{$g|W`d|Ie|I@Sc<2JF0=p>HG1t5SH$QVd5L?n3Qy$J?s&w`5wB=o68&SuUHC%&tHD_;_}V)^#$TGzn3fB#B;ZV4#t-=-L3wvh9}(GwU~beZ!4g z&bhk9%*;&8!pyqPy6D=DBI;hIsL6!5I&4%<<7Rf}n2v~mFS<60)QFM=sZm2-LQw+J zKt)VyST{3dxd=_7%9KK-n&kmxw;;TNt}5XSCz^dHHCT~_0jv1hnjJzE!lu7KqG@!O z?-__dC>)^`T`HsyDi8(&9tu$#*PS^uXhd-&g&LxAii}(@;Y69LB-h+W1~iZyEufBM zNF~%mJj81ukuZcr%|#gRBVbB84yKl|)P)-(Tv`EY>R06$8^e%s>*(Jq01t1N`iKfq zsy9hVaoaCCeVzbB)N;II!nakBGdvCJiJWs@uh;!%)%U&GxKAZ&K$S|0sxpyrcG4a#+T-Kn z#bTkV@Nn}XZzkSLNDbhQslfLZqp8;4dcCg2l|@9QX;TBQf?`Z0+EQt{AC{k62|ZtU z6$w!dB~IK(QUMqghlEs-t3@P3v!=C6uc?N92bC<$f*>gB5iT&$Dq@2~6p0E06aXox zV?|-uV=T$RXUb_lsU7iY5; zv!Asmw_Gvzt>@jkmARvav!AzKr2cdwqRb+2w-O`vAF_AnySKgF##MUo`hCyov>y*U zn(o!@?#Wo4XARLz=*KoBGRPM zQ8>-Mmofm@F>vmBj@|ty;eXRQ;P|tyB?FmAN{SH)4W4PTd_nrMu?0QdR0$Rar5QwcoRA_HpI6 z#u2+At2^Yt`rLOE&Yq|M+-ud4yXVn?`&Y!796pZ@wYna7_dfUSlo9Lw#PjHJ`*(Z& z_Pn?w*|r+(UHSQhJmZIOaAN?&wGPOr2qrc0vRiD#l&o^y-?Yce>}6B((b>rd-}>m{ z{fos>_x^_;{rZ=`HZSY->gMLE5jj6S8HQnVb=3&b_m(%OR124zA*Ix&#&d~040#BP zrdzfttv2hf>puPTQ%UlxU;XCqe)H2!$z9iNat>4m_$Z}-E~y3JfwWj|HhrIaNLqAl z(>CGQ*ihh1Oes}6BC05fa(cA<@WT(@fB%D0^2fjW)u$hSd~>rQOv@(1>7aW86F@f@ zXzpX6fFwfe9_J((?vv+t=WF`&U7WkfVYz)^zf8fH`GdCSyGNP6c17&W^$$rz?+NDQ_}x)e#G4FI~uu*pVcBk9e{>ra3Ec`AJG z;(WLou0H$xe4{Kq%sgj}5J3rUa_$4oaa-1FX`9pY^YwcD>1UrvB1P9;mM5pDr>E<; z*EcU;bveXDj3J`Zh*;1AA@FMLKN{e)H^1-De|S(|m>)FTU&d$$5eN}vvxsQhcC%UK zoEM2vQ$oE+QV{_;48zU!bwav)^Y+cTGuXyl`WcfnSvG?SiikaLFlc^n%a>)H zbIzb2HA~NBD7_{j^?G&v!H3VEUpyOz^3ez1=(^^|KmPGB1SM`O#i(1O_8(y7R~z*T zuX+eE(e{!GB4!T3S=vZ|46=j=AWYh%rdy=8N$p~jhu(`17Mfg{Qny@oo`fpO6hK&@ z24yW0paC(DY?k{dCAn!-cYv9VfkpyeR|2ODQ?hBA)U{@|*=!a^i-@RR4`eelFX8SQ z9uZPCE{=$M05vteCJD_~s+pyxQL+$TiQN>Cphq4yN^v)Mw3_NAsqHtm#Ye}z|jbAFB-P=sOvCc4`=CAa^2uReC0EaJ|Rh;7o0-)p>YRdEr~sSXPO zRP@5cN^(c9p7(#c-T;W!_mw+hp*kq5vkMMHO^Xjf3)!-(??z_&qCn^{cQbduTXr0! zir_YH(B62~8yvQ0M=OJKxi{MHyE{y*$efYh&(!tU7H=`Pkr`iV`Ef=>+je!`wr$%j zbm${yrcFKIA|?uS;qAc$=?pBo_U)VNllLxk(f;tqKm6&>fA-C9eejpx`<}a(Qijrm zP#K9#u%@!&k8uG73cc3Mw53I(O%HY8J4ZPB^JhQ(wfyaGzqsuE_(w{IdhFwl)2z8T27G$^t zU?p;iVS{We8}C04^eDkRggJbm1z^KXf8M_5Hjw1j@z#|U(ClBd|yVL7#E;79Wb2+ycAP{6P)Otv{yR*^~5Dn14JGUdqvB-(0 zqtq>{j z)y?%V6h}}TlHJ225GpPVI3t4Lsa11(c7F1$51)Vd!F%T?$8Dp8F`QvuTmTa8;X|$r z32h^2q-)Yq*KRh8_4UnawHby2V2YM$DZ?-fX(Ot7a&iPfD&YjAMqwi&rJX0O*37NJ zp{l#iXPHdO*xal{q0)fxaCZa=(!xQCww=&mLAZNEY($;(KqR}PO(iLL*0f4^_< zPz%{EkGcrIzP>Rl6XmkGyAUFBd3mX-P1Dqiw|$$cKiu8#H7*;o6Cvo+F#_yahIPHw zUWrKCwr$%2zS>B!VHk!|%Jv8-rL5O$5m9Ywao{mJ3Nm&VP0i z*(A}F5=A^p&ZY0ywFJ^Qu!L&uP`0sJE(Mj8OGt)!96ktSTQt2=e2zP?7V!>%9`ssv zO-T?&I5dPsQcn(|8_Fh0uN>H9)y!0cf#eX-t30oqssy#F(;jr_^j{c~L&G%y2a}Ro zPmO(L{&piOzJVhJ+_Yxl?)pT4?)JPsY{&h<+rE-kfB8BISqEVN03ZNKL_t&o_-^AA zZoyM#i%+i}`gQxdecc{z`x|hsXwI$K?V&y|Xb}Gp#%Ja}d zlfc~tAs*_`s0C6-=!L|NG3+asJYTmzP@_wAjo-m_3CAj}Nzpa2=#ZLHYX~7UHQKcz zU=uWTjL}~JPUz?~xOLC%LE?mji;@vUXt-DiAz%~eRJ(*0V-;SoklLmeOs`)KuRgtO zygg|X*Mq&eY)j^lC6{p1fWQF;;S^EH?%FL*&M(|?b#=AbY&z|(b6%dGE{;y%EUQ7X zr64i!Cea1(7{TfKxYKWIcpr2x{$Z-nsj8bORaDKam|b6A>&utJ%5H9M`aX+-sxk%# zJ(1PPrlIPP5F$#5d$Fjz#iC#>&;^e$hYOsX_{m3Z=yz!dTZc79DY5(09T)FtKa(Og z-BlV|~s)D*x#G0C~94A?R~X*-4(Yfvdg zHEEMjBYPf|+j-dZQ7LmhU=`#9dWcGO0850yB^Z-$USdlYHv_zrF^)+D0GVJe)p1m3 z)1$f(MlQ&&&xfbC5o7>h8*1Wi-&LnmkO~O~XEwl2-p-?>1h+o{0>xb!5Q&kf`X51? z@4h?YhX*MZXKtyEe13NP=IZTF{_`(>^7Eg&#B#X+SukdOl&CV>gdQ=LEguVNhJ-l7 z=!6Y5*Udl)v@P)d3CaKT;`Qb0&zsaN+qS=a2`eW8xp~v25H}6$LfeMRi__!d<+HB& zqtliH`i&1ZY*sfv{NdmJ@BilC{6GKa|FM4g(q6w}pn;{th@f&P0gnhP6JjN4mCx`% zM42`oSe)Th!&^qTKw6>gs0q?WQehgY9RdhLDJTPSaqD4Muz>|A8RiJH2!t=XMc!OV z-?KfzroeUaz3+YWXMbvsk0*ZJ?r)E=@3z6wZTR!P)qc4_0U0(&z$tmEa;myax|C?iluM#XxDZ4Ucd61xOsG^P)kCs} zc@zjzieNa`Io4O#uijpN{_4$}oAuRAzZ%MFuCVj3~s!WQRkHu6>3oA4qa$Pl^^!4NSCkW__eBcMntO%AVF zj}mZ1gwyHMaSvcjT7cgtBB~syTwJ@ZjB`w9SRgZkFhzhAu#9MfFWk*y3FA!wfXBzj?zIr_NWxq@ z=I*sjubI`5=NPnh8?hE5^T$=a&S#+WCn;Z3ucYg`QaJWAq{W#DzY_zaQTx0Kjr_aeM%|kd~@T)ty?rAQpzx7 zyS}+8r3}Nch5k9fK)>FoV9|C*i^ZZlJ~~=<-BFuV(bw8Dh@DbbcV_MH7~lq~hicJw zb@Ak!bLod+$hohBzu)AZMfyOiWJo&WG}`4Hj~v>pnamDxum}f98_{05QN2mJR^4bC zM2n=ljp|;xtysxeZVpf%9V{BqK!h_OK5|>ifqGtFw_W?v0pQ9!kY+Be+18kY{GLo3 zr%$wuzuf%RZ|%Q+03-DFw*0y8dT^?^!;wPv%UJ-`Q$4>ww?F1xd;0tC7%!gClP9vJEqAyZGbb-bVWzE42lPCc326;FB$fZP2a z5wE*G@Zsxu`1&XJe|G=*d`(!q$;rmwV|^ZO2T?Ps>RbI|R0Ne|Ga=x(&9ALlCYbf= z@cP89I;rall`GL3CJ1>B3OksrSJvi~(0X%FlkFp}6 zuIjPQ97ic#SuH2G;GO1f%j2Ve{r&HM|9||~(xkUHZ(qND`Rkwm@>jq3)o`;}whIQY z-@buI6px6b#WIps7kcDO__AGei^cKT@u#1EF>FS&vt}WK-J7?oe)vojLn$GoF`No@ z55g)&I07WSE>=xW$sUGWj1)Fa)3r@utos|cylk5fKm73d`T5ae*$Q8N_UYw|FJAoa zvzzO;>as|U(mWd_MmV%bO}Dp+ytg9d9h21YfZSOO^R-lG+$TwLXxko;^9L?^_|JFS ztr{(lZ;w7-?!6w<^_-pZ^Yi_wT3@Z#zBTb@_lfPPgo#%sW*bwczg95%4pBrBF{Ve1 zE{i}d5)^a`x>A;HbG(#AJ2Yv?o~WQVUDqBjqXUFBDaTjB6D<}~zBoq!( zDL{xp0|^kK0Tb8=8?c2K!s!krS^{N_&pv+h>XWM@IXX$*=H=Dq#j7S~lmR|SSPh05 zYCOx0l8Z0SPEO9whGBT~=1ml1Vo!f|c5-@px?WumZ?1K)hU#WDD^ZM6dD8;{F-{Wx zP@5k{v){M5hC4UJgSP$l{*PS`HCrXZCjliS-D-Kl5J`aK;_Fo({wnw8#S+<21qkS2ZpBrFNJI@=js@xHx1`=o_ppFX=_}hN_q}qkVg=j}8A>EnL@5fd zoF~I-I6q&eMO%9JjURXIpM3M%XQ#*NDE;c@`ugR|moHzuy}nwNOog@#7MBPBW)U8w zBsLf4XBQV2$Hz;OUDqs^-K$qOpfen>+3D|OgQ;TE=wm0QWPMg{XRo=8RbQ$bYQnbx zFgRH=7s0fUCZ(nsnZ$@3K=Hv!hBGyq+SIk88k(p{JRnlbb_s;;;e^5Z5hnt)3=`qoOD72n4HkJQUkYlu2q5e^rZumc6+8gU7m0CjhMQzuWyW+)jQPM z*^L!r23R~$Rci-ce4_m|ltKwbE#{X1RI>3=Lk)u4z;76+fP(@WV$2W?#kfevLvX$| z-78~x^#!|5A=UZI(x;$LTdX%1fBD}nmq*#7cw|Hgc!<#oXi(YhgfVauzyz^y z&{LF-F6(S;tLoV~Km^~ayL)}1X*uh;9YP4Azbm(BXw`9&-2k}tdVc!`taXc%<( zs~eW}<%<`8{nvl}fBoP8_W%9&|Nhl4ej0tB+65vK&~@ErSeGd|nv%lDK5!}kxy?Hz zN`$}y;dBej7z~?LGz)7RNP;LOnP?prCm9YaQL>xSb3_jxSPcc)={FE1Y!uhg&%AM=$``)(S>&pK!q4oJX924U1_GDaLPgp-Snl}#~ zY?IO$u2tj)#ysE%04jx~1Zbv)(g`}1V zstHtaE2ZR|qp$-05LJzb))$e=lw*WcySo-|nrgcO&QUSNw#sTfr3g{fsxN>^C}Bzs zM%n=`F{%X7IJWG_b^MegFJ%~Ns;dWs2uB1Uk#tlXC3yJ-VV(Q=uKL9l%^@eFsKeW=aRkBhg4SZoO3g^l#)OvIUR@ws4@PS zR_^#WZn$TtQ(hi&&5skJNVu%LVG*%DFA_9Swl94S%Q|h|ob>FYoYwvq#>T_PL`);sfTT0Tt-)uIU z)pgB~u2sV`BI+VH{JFabMihV(&R@?#xg1&x~RzYE0J15O-k^nKDS)D0`I}{aqzprM6cs zA_f9d$(+@FbfHvS3#+FbG0IA>>A#%v^JNU=WAb2ceLjCsfZjX&tN#Gny#e5VnBCoP z2m1MY^n7b~)qgwy=bw~}-M6r_h`xdrxBLRTpZ_>!n`{#dr`mMpfI?nB}4GMdbYt&%gbh?;Ks64aGkG?I(T75&{o_ zNRv*Ey2{sCle&s~go`AUtzRujS_Fhav|Tq?>GMERnpT?xYVn-inlZIy{PL$i>r^^P=j|da;06nUd)3ItAjlYLG(=2la&UB^Va&jM+IW85{xEIw z{k=mRRCfkI3l_Q&sco9&5xcgC40KVtW3lKKM@tbH5lKp5n+c?FL=7vBxr4h$O7&e< z|ADEygeOD-8fq(SAgu&|0TDGcjbsI-;ET^TSFhI5Yqwl#_Tlo4zrF0Nuncrp5D`vT zc!|iQc|@znr)Mdp*RS6U>rE1MqCGoVJiF+c#ntLXzFM`Usutf+Bf`Z!P47|-%KIel zL7BWgME2$OS7l!S#Xvg0>>mO3&h^A3JR(FSB^e@yVW6X(DBr`v2u2w>v!?LBLtHDa zx&ca6EwmP#f+tFl;m&c>698qT8sAdda?5mnyJNeNLEJl<*hZ9h162o8gD9v)D3>jk zA3PhD=Z*04^B0$IUcGwp^5*6yJShZ`A{R&DmQcL{TLVJ;(I5TMH$J@B4F2lX3lFY0 z*OzZz4MQKhpxqA3b=y&16)~;hlIj;wj42wx2s|38AY}9~Rb36jv{+Dts$Mx3%{|;yYWX)XB9bUU32GqR!`w7=@hVY%7R3J?)Wsa&i%XGeH_ zvQNeBMnc(LaW9h89R*zF8=QEgu^p0%3M8wmB*v$cP@%$esktomzmaQ>+!s8P+xDMk z+u!eVmGv>obNv#gy;C8cm23Bou|ST5hXR2GgP5{BY)cvxs983*f?PnrBv|iRx8Iih zZ7XW#{hMcje!w4`DAGG+3Z$E$e`qir!pBG<$aCG{? zvy=BP&J?GM#M2|3En)#SC;@!_rhNXJUw!hEpa1e_Kl-a5{NO+T@Na+ncfZ7D4Ug{h z)NeL|P)#|I0}x=@z%{Zl9H5ATHo|^nJlZP@FCgK?!^GVYK*Jcq8j`^VBGlxS?l1@% zJm3R>h{CvuFl4~0yV1am@cyO%Xwq@+Z_u3J*~Opy%fIyHVsv5O!Nop$LjT#eFK6FP z>p!N0=$-e+-u?gUDCkdJ50BTEzT8SX=nvV8!M@}AEr{Uh&&BROzeoS~*H0DCqo*du z-x#(007y!V!2yzhOF&S>sAf%J8+HUN8PAu?BgC1tso@SI^?4Y5@SQGsz0?jB(z5Je&u;-^Q; zZ@qv1jpye_tsX6!1fzs|gd6FgiU6SqC$=%*%7+ocTEn$68KbH;3Y?xE59WQ}_kBMM zo0?HtN`Z zrZL@0sS&ca9q7c@j~3xE+Fbw)p|UTQT5~%3Dl$}5V3lhs#b-NQ(fe(GkG^+_uIeoe{KIaSaEkoNRzZ_SgZUHbwF|+ zEZk{SwLEM#n}~_Z+iL|Arj*(wCnsmiu01_EJ33l+&4LUsH1i}F4G#i4upn|NV+~*t z3P+-EkJb9Rlv4M5-MKQ=Gd?iLyH|N^V@!#^(LnF@W>m11FV%fXJgF*O6cYzfTV}zf2|9ksi|2k&5jQ}RZ z!|%(f!tM@wxId)tz&OvaZ_^iM&)P%eaSv7fFfw$D`rO5<9$bS@z5l!We+N6VfBl`z z%i9@32WIo({`=_2oA+TWoeyNJ?xWNne&2nh%p=EhyKElZ)CbnvJ|c2<&3+B4@pm4+ z{y+`jr>@Tt(KG$vY*Y`epLbYhd;OX1mpdv80H9P~-J}CiHE~w6{O(uA@tpVJPXDJ4 z&Jkw^uCJFwU70)6afg!IDpk(=W3f4Bb4M+rO07I3B+Wuq-AgG2EN$D0(9Ck#h=?YD zD8+5k_6`i>xXows=c(E4S_&c(**?eqKL$;(p&>pHG#a?>NNo+h03n?iNnJnkKP#MvOh%^3`mgx_`t! z9g|)w96=EZq?#dzNDL(g*_M?B05l#>w5ctd^(TM#cPROXKl;(ne(_Ta=itdwCvA28 zCWfkpxVvvwYf3EIZn0<=%d?Y{lRx?6?|kRazI#1vq)FK=B2-#15E|~0k+TEPM#G{n zE+XBsb%elb__u~4>JSc**=n~;6}0PKdM}`V^!&Yxi}Uv{&INIG`Ra?$K7IS@bzZNN z4@oo;w37SmCAZa<@G1X(&fgjgQk3QbNkBt% zWT)CN5-7m{N;naT4T&M+`VznU&1>ts)3!@FZ7yHs%WK)JC4$(9I75Lj3lBG_1C;jU z?7UkZuh;#XH*dUHo7!B;#h-jbkJGT)iPV8A0rg!t{~@3_)XWy3UNpn;|S z47v%Fh=5dZ+t$+-fVmetJvv2k?~9^4ZV1Npdh@%_KD~PLYISq9y1sGuwmEK6};{b+w0-w%a_^+7%yJE=<^1(avjESIJchlNL9DNcBip!F{1=R z6qrbpYW+?I5!JaMkebFK0%=?r7GwC8DgseyyCpOi1XVy4(Ex;kFo|GDn8y${4Bnd; zYefTLj1UCX1EqT5wA8TtmgR9=C0?t;hMQR~7GA@MiJeuHe_cyaHzXlYQ4yw;1T-_` zTq2{A&CcCrp$^Qm1Y&Yz379R1m+{c9v{Er*(zhPWF|V%n_}%u=ZL4r6|F?dOck1)J zZN*fZcdif5^^G#F?%isBr~Muiq>#Hi1N*+ch^Xh$RzA!ek%t?lI@rTt8e(QOjj7Qo zrFUn#0}zE#Fy#?d)xG9mYfT2+`H`jOGDfY*$1%H|Rz2w+_xOh%w2uzhvo`%{dyvWg z_>9tW7f|8&-!7a{Kc4Cpa`flgq(AI{s?&1VDIC*;Dm|6{=YRA6eezfT0pZ8*KW|go ztk%cJN5!M}7(xbM2=?I7NGQrWp4F|-5K15zC{^JSN<^u?_YV4}r~cxjvmgBS7oKmv z`^Vq><8M9d6c-H#$5PP*OUCM|eDd4h{HGuM#~=O8U;q4X|N7@Y`^n$^`d4tnqC=aw z8v4sCM1WEtfkf#-Nw!f26b(Q{Qj%;N$S%%T%@oEo<{>~vIEoP&Rvk?VDxnF*YAwC0 zFoe}i-v~GyG^f)8L5@)X4yujPHvJ0S@$tX-vyc9p?_R@w%sHIXxINL32-gr@We-FL7sW z;O_5t?DqhW_7cJ0xjtoDU3X#!+j*Z^77zL-@2npNII@yBro|#CbtyBSx4!HAJ@sx47Uw9&L|7DMoAJ>0DN z&tJWHd$oFXd3kkplZ!hWC@Jb-&>7(o5f!IWvu8JAy;6>r%{QN)e&hM+#c?N|nO7jG zJ0hbBL-P=UU^G0dp;~oOi%Je1Ks5ENbzrevYJ{_x&)il(Mb3OH!nyv2-ew zM@hyyrqzWS7z4ER;#-mUO35&l6|oAp5)DzN7Aa}hNNOXYDrecAgg%*dT4+F4Gd%{ zmIw(Eum-mTkbu@@RV$v3x!)8p`9Ohy3c^D?!dyH?#aU2m4M3`;5aNx*xMwAZfY9*& zv-c*=wj{@y*yrvMndjVl-&9p707Z<%z;2S@&_t6>sztJ;?v+}mMQb55$+XlTkePmm z)-vt1keL>;mKNI3B++EnrWQ$w-E0EHL=06xpk#o|+3YOX^ZeNk~MR zE0lN+aW@;J7P!_?FD^*AU-d+r<6{Gnr0TfX4q$?*IfOxQ zSB1F{ueyAA*soXJgS+=6QRbAA5(;1pW>yA3#?H~1VxAvzFi41)*sN-)Lm9NxVY72J zRdq9NUi8F#Q;+$$)%E@8_Wh9nv8D!4lj>w7N?e!RKCJnAEgM z*h!;!T@}+f-Mv5PhwawM-hA`TPkiDNckkR;ultnvo$vnO*~y8z<(!Gdt5&m8OU~H= z7IqSKb&paWW~x9G{J=m)guvf46HY7=IiM-$H}2oRfA7x6?%ua?*gQRccJlP(>G8$+ zS=|ogdiU_a%2;<>S7mU{$=%0sNZk1}SD?rvZgPXd91Q2Whg+0xh|m6?6?5;% zVX_dale#fn8Duy=v!_osC&$Cxe7Bce&d)Yap6TYIt5v+fG!W0ihBg4iBGet-xqJ7n znLT^n6JD3-a)Th96uQ!zyIX; z;iI!>$HV3#3$MGitJUJ;I0#cpsTOiKm_u6LSiGiZ&z=s$`r*SLzW?Yw5+b6_<{V3p z`eK+w4g2x3CPqAACr0AD1Cy(*&5k4iGf8+F$O!5hIsaxxBq^n?OVVYcyh!x0b+e9t9XeH}szX5U6xSq^ee{xiety6kfNbe~XBS`o5#7 z02twj)(RpgurFRK?Vay5)d#d&2(vWD+~hEuHf16y_fDRxk4cI}()LJ2iWcHB1Xd@#P3xiKmlC3)0rNho?`0b;B^!TF*`|FohKXsCuoInOsl1Bz@oaeV-D~ zDrNZJmd>|WXx>6;(H(<42}?%K+;xzIlq`vn8@#%jdv#-H;)qO5#s^0`W4Km#rxq4< zGB?`${V)}C$BQSlcr97W%>+>0nP3bE8$$&qFll@)7V%+lG+>5PCN+o=0itk#4NTzF z9?TtPfhz6np1^@g(<;KF{?S2d(NV~z7_buv#LSB(sla|^UHTB}h&z_C_M9_-S`EPY z`S~0)1s0c0L17Vz7$iUegtJ&{`*lQ%U2}Q7Z9N7)&Qb>sm+ax;VFZ99<~qlxHzfkV zHRs%A$~jBd1^+CJ@fS;Gx*_ySn4pZc##F_lF*8=H1GAcQU&>I5)mpU1#9AO$$0reC zNwXDTlVo_IIJ!}uJCIW{vsRU@rJ5G4VT^#8lDI~dy)z@Rc(I5zOXhWdaCERfy0bc1 zbqA|8Ioyd&9Yu(VA<<{b0kqJ@Y$$@1u zW&eaEbdVBP=8-TY9tC5PB34AIU}WBrR3-bS@Zz*Wv=C`F6`^M!}i?Yz2*8F#=m^(R~%2=eLt(X{C;2Nd0(*J zmp(@aBr)c?7%+h7VXzc%vvGKf)LSYyx6SHp-wO9r=VG@O>}K0n=HNUxA@wXi+uT@#siH%uiJRfrCau+>+-{=^ zzEpZ`*)nBi2LKMeLN8g_jH<|E{Int;@VH;~Q zTs(PNE-om^p@@#78Hpd3I=U+*AwjLRdIhjr<=poV-gxa7KmWO3{Kd~`tq&hQeD~q| z-}?4nKRY`k=_#)Qz=zNiQ_3qyYqv&1pyaMvOh6zDjArKO%fuk0)S3IJHFf#$-qD>q zckbRjy3?(O)05Np-+%AD_coi0PSQGYNi+_nY!#|zmV~k-z)C5qMJU6W$fN0~?>(Ua zJoE;2mrJV1O>}9$1NIdR%NKE-m#))w{=B7E~XwR`% zdM?(f$lwx11Z(;%lO$(gYTkQg^voj6SyG=UwH7_d#4M_mQcBqaZ4?Z54w;F`23-uZ zJtMUW^#-JwNfKcN^g!px1aUT?HrI)m`8Z&^(I=129>2fIeCXDV+p<00jAvUOE7wX^ zoJRvOa&w3hQWEN9wO*6(vy+pPlM|Yn$=|zo&l66bozm&a%55zfwH7#%R1n;fHIy?Z ziXOm3DvKB>Fmdcn>=t|FT;AtyS9hqJzO;Nxz|65PZ-_Dh?#`ST9<`qC6crC5AR#w5 za}k%0$r)${I0K9yRN5SbHO@)W(V{ z8EtO?s`mEV-xrbd&B=DRi?C5K%`6}z^Hw+G%~YUy{B7rL_|Je4RZI!;lMhlrpqz*q zS%}%$-Cf<>n)jWEBe*I#r*56PJd~ZPf?F-VxvMIh^KMi%tpRNp83x46CG;JUlu{H& zn2J>*FRh>x9(nw+A2ARh&Z_EaEYZz5YWk)M3?>obB+Ptx*t>gmb$3;*ZZ(RA>6%Pl z)Tq%O3L=v0p{mfyClW8+C#x{pPQ$%9DxNF%uG@e&ASk?yy?h(prf=M6U;FLr@%lc} zp6j~Kwx3U;Yx~j7G)HDJyZFQ7sZ%_+Md+u>0V22&Qh3FU0T(BjS+nuo5ynFBNy_1B zb$2suT)l5|F}t>3v|Zk2&vM<{<9mCPFtrI^s<^?!FPsx%Z=iRrDdTJoL?3Ghu*681 zJ*`as^}qa!cfb8D)QZ)rY&YBURX)128_O`-P;{$xt7!+?0YgT1T@$laA~$NS?kCHl z2{eK;$OyH<$yD?}hF|{tCpwY`EAD~qi1(kKjAs|$`Q|sj`WJuk-EV#K-FLq8&iB6e z!*||3-<}0kb(^@9h)$AAdYNeLSkw zYMh!jJ1?Q>B}LO_0|Fbv;0mh2J%FJKSfBrk9k~io zdh=6n{l=Gniw_Qrgj8=?dDrZbTVLt(?bF-r z_lKMgJskim=QSK<5Lb{oJH(wmZs#--XLpcmZ0+tavNF~Iyi+?LPM&VY$0uh`PR`FZ zyI~7MBI->%R0~ydusIR2Q1GYD@i}2N-Su61a4+9G%!!K^W3SA{#6s>9ro{X->;S~T zpm85ugt_yS%oJW72fUJnKaGj9WKNv>Y-Yq77794fI~ph=>vc%xlD3Opn}4%sbz@}1jy_u8uSXN6L+{VsRxv#7{p-= zM6UpA|2m=wSj8LIj61V~U>xmBCXi`u{bHgXxnrHw7_Vqbck^-1i-w5Y5RDZo%uJ*0 zi7-G zTE}4=$8p%zQEN3Pa&Geaa`_cZ|Ic9YG{>Toth`X{e8AzF<{C8v- zgtrMpmO(IP8U=-^cvcc}kP(B~m|YWu4Niy-J<3(dG$u=>&2~&39DtD-c@zs9!z22O z$Q51o0LJuoUNxBY0qIu%>dy>)hymc|P&nWWXv~4BiPZl5-bweWitGm%45pD_%5j*- zFmv`x4Pz;KJ~+jkv|o>^0AJ{T-p>D={-)8?hx`&WPsq{MZ|K_b?;shq=7`JV73nZ* z^qdymEWGtLaQB>h?A=4l81Ro}%N@UA@Qe3FBkg#yGuX%{7kk~i{s82b~ju(YmtlIIqcJla6VcejN>@& zO1A=-gi^O!4Wp|W;9W07uH)$LBC^?RR;$%(58n95M?Zdec<0@B-~I0Q-g)N-50B4I zO09i&Kt$ti=T%qzD&=n64J~hxi8CmPnHAMOXF$MYAY(TsBN(Iaaw%h<Rfmt7GOW*fCWl+u&zO)Cdc}>h{ zhW!0GeW=uwrI)3JG-M;d*a;K*U$p&Wi#7@kJ(6^?bV4>-#L5$pgt{cT0|}fMDKSIb zgh)7rcK}Gy2voc!q#FX?Er4QVS|DJ9M~*+UTTZ-k^gtq{Sb7F^9{>n3NDXzPXUDs< zr`z)<=WjjuWIZe6$*G>4@@|{8WUbJuq%O$-gBy{igg$ZCaZWnu=E;ek?+y+Qc3M^V z?rRU~SnTu+7iS5SQz~1nZqkXFwdzPGBaJ!uz&%P|QZ9WU6==^4PUd7rX2iR3>;)`B z7OsSFcsL@H$W7hcA=RtZaU4^B5J5~QfJ{S{P3=X^%#xzt{7|P16du2a4+Bf#=Adw z=Lehfq3i~R2xHt0>(#1^!^LjH%zbyK>tq~kx7+orsE#!viauN6c6|K!F#r-1$$(7- zBB4TDekruiWtm^1le91iMeItPU-fA06U9t$0=tcr^-rBL*dCAH6Md!U^;~Noym;? zug?RYO(-Q!sS}~~dR=S9IFwqvs+9^gclYK+W)5M$zkkaxuz1%(N&th+*#VDQarP-f zV$J);fbN6Ff1{}d3~r_$K`rswW&!{;Z}w931#=<+tUAQai8z}5PS-c~oO(AWA|nQ1 zu;3G&JwpyB2(h_&NC~u^{>tD($=@qTKYm)^;O&jdnH){FG=D*KfOMZ=45!ON{!nY# z!j5e98~^72^@r~ucbsY1UAV4m!nO=M(+l;jVW-$Iwu}{Apa;%@V@~i$wL!!l;09EL zK13BhkngO%d-74V1dqAH4b5 zPk;K0pL^1>4O+;FV3SJ+02n^owm<7Md$ITX@wED`#n!FG)gjnh0hqneGuX*wBRoGY z`AYVSPgTED7~sVw>QB#poWhWM|K}CY=XBirgD^R`Z@Kc)@uetUO5?-$ChhYbjTU#D z<=d-0=A?|ZPBeMQpJDF97Yi7nC>HNviLZb-y%1K0v*0`7zg*%sXyPBz>3kI&zGdi?Bc zH=4V21DYD9T58#;mMke{fmt-{1W?^oT~*06WjCiRX|-CVlxkH|?{hLWMC6@e4kBiN ziOr(ty#ruhyw4UKCBWU(OtrefA#4cndtwl!l!cu*OB!q0U5ppo&A8K2t6Md42N$hc zeXOO=UD4X-Ub6JmIk$fVV(tuaGfIp=Vip1So<(!w+uO+yd&Y7u4y5`md>L|-B7-dYp@IvH7vwjqTrrUZpoBI8#0YXTz_hBlyVBqB8= zrer7#SwjqLCI+bxMN+sSM;Wo9n!8%W?8ThTBI8uO0vs9z$RJGdgN_s?01*QTplCM> z7$%e-K@G(wEbl!X1Q~CsFA8z>l|=ZQx-R`D5Sv+USaTTSpqa0 z&Vk=!?Br0Qo8u88;;w+Wn>#xcJ}1Vxw;eND@G_BwwIPy4L?nw0rKqY3vzb+ORn1NafDe_b=BhJ z>c*zbEauFdkPy8xT8CwSP9E}J98Djbuo-p{yf39}hqB#nhh1&fmPKN6AiaZN`CSyeSjXc0|wM0t|4yVt6<*6lb9!%*uO9F>_7 zh~bL~47v>4f3t&yVRM32gS~Asyy*-UX*FP{q)ZAf!i8lgycHRQb_t`%kWg4EqcTQ_ zgV|a}yt|77u;5mLD_N{!d#>uRwDS<5Xg9#a+_p(M;cHvQ&%QeLW2H2QOoHYt)Z26^ zrwpKVT15f1x{b*pn)XKsBEsDKX9h}Bz_l&QmgPawKPEDnLeO|*2S=tJ1q2^v-Bk9U zLqcB4yjTX3LyAS#m@obsR9n(LncEa{as$$&c+Jm?#T^`gVmD10uwYJZ3u%&``;jci z8M8zHjHfs>8E7}9T!cpLaB(QSbJv(vCoGz7?(a#BwJpTmJ`r~Afe{<%bj_4J6?fQw zo-&0a#>O<~WlzuI?jUU&7QpED(|KtzE%kkIpP!wsU84ZNWsw2Bu)ZnBZ^iLCKTL%P zZJbTNZ+Yc~+GJjte_1^BlCSp13H&?mqx;XxsQmIRFYmCJPewR?*g@>tpWNCrAGR>} zRsLxssmu9vaIpa_AdoNxyp|~u%*eyhN&s~tk~ovF+Te4`wwPfe5VTI-4`NWINiNMj z3>NcwOIO;)KYOEn8m9u7tHLH53INC7V}TSHAl7$L~K< zXv$f~!67V6np6!YG(oSZk1?|4ssV0V?~xca*RRm*XBq*pB=bsK36U2>q3kET0w2XUA4!FsIh-~y{q6L6B;r<4+jeD2Lp zzV*hN$#DGc!|%NFgY)APFJtn-UAe8824|fhP6mZT8Qcki*)4zt$>RMJOt7!%Y_A0f z&Nna!4FkH({J7sYqlwU-pS?vTramt2dxai=q=f@+!9R9MKJWRnt@q}X7tkc%X3fE8 z>AldGmM9Kn0IasZ5)n`rIl_}XB$`*jl5MZ-Uo#Z>tbxpow!gedl1t;ivc4{9Vm$2Y zYukrBX`3+~XC^f`C08DHRYVdWmhqgK++3{^)Yyp`REV?D=qReA1Ibmrf*m5GrOLuN zQ_f6luUU{N+h(^pymyaNzq{bo9b`foK<1ohsX`M*oDxw&7lRdwW3=vKa`c4k;omoP zBvA%Rm5zuA7w7u$?Z@Yj&QnRBy!$%NpV_lBJbA*WPttJS+fKYV8RN)Zh(w8Zs5|C- z*dN}zzr7fSXUE-zzUHglS>;uC@Ycur`wyOd^XvCYNg`CrsArZ;P~d=D1&FvXk%<|& zNci7k>aXnY#B+B&Yw&3>B5Lw>lIK42)udw(5j?Wd8>g`YV8YB-OTDf}6o^0|Gcchu zLp85%kV@i^QCTFjn-z72!=)+dL{41P$%!cwsF+INMWYfyB&~XQGNP>ml3dK(*v%v- z>NCvHIrna^rsNe2mUsx_3aKFKk9roXU=t}YLt6DJxl%DCb_k<0Qcg|uPOHoGo|zMvKieS z)wI?yzub)(h7shzP|a9U?xf3ysUw0E9ZNMRM57H=*lrQ(i=z@!_-CCIR!$}& zxl1{7&YXpqmB`28bhq2>cD2^Zo`@(RD{)9J_C#)?A;SrPC*BUVcA%U+RavF(D7ov| z>ludjS_2{!JR!y}Z4I@G;r8QPVc*y=F@d zXGS;x3s3UaL(^-v;nnM#=1imj+!*tEhY(;2W;Rq)BQg;oM%6JYZ77PPNF6O=P62Y? z^f6}ebTV53S6j)IVm$-7OsP=0KYJxh6>fgvnxv0k&R++5#5vfF~7UcDS(vgia#fV9CvdS4`OrW=tf;QO^N!k1QmLpd;7ZcVpQy zudi!Cy*#7Pp@7u;6e)GGh$B+N)|NA$8^hbYm z{P^kd!$%j79tun_D%$|SYm~3mQqlKF32sOotybyp{py#0{|~A@L3Mmfz~ z=+dH}qLDG?Md1ldxw~I4ED0%{eP)GVXyT~6+Gnb@HF#VQ@}zGXLJhwjT1dFSpKAzi*I}kZb@p(~FO_P5><9*FEy(tipbJyGgdlOzk zZml$4n6F$XzR$ddj_-sk=cO zsRE->F+6-$o}Hb&|McYK;$l0ZY8n-T>L|wU9lKj03_aI%)-K7a>+T-iIXt>sYkmCm z^8Qk}%Rj#B2;f%VClM*tX{m;_94Hlt$X<|dZdsG+m4wQb!YNl2J%U29eK zTI*118L_r5?#J9!Z_ppjyUEsfVwe6KXQbsA2#Y z2RyL#8dkLtxU_+DvxbP6m>i{=gP1!a5{S9Mm|Uz@BFZ9(Ic4rN6&=lNbFp(ZhY^9O zy7_J#bXz-FOXe>1xlc^JySu^Q+{x7Q2_0@9rC=7xWgmK+(GbKjff->Gr6m(sf}iKesQ6ywVJ6yS(q6~h=F0A93zeC zK+~uhU^tWKscIHZ8z2g6V~eHmP({XOaglBiu9PcN z#o7U?nHd>_GRQg9v3)xv7sSTo9DDlYUse#{DFDz_P2~0ZeDIsVQImiXkW09NJ*WJzBr=~F2d$;!4#n zHCx9Q$17)OpPBNvqYn7x#hFO<$=We^;L^Ym@k|zBW-?ZasJErF{OC02$+kGm zB*sc9tCUHklu~shWXgmrYUAPE)h9povETg7Fa7p!|Jvuj@acmiueIck0p(?Y(?Jz) ze025izy2Ga`P^H-@UQ;#PyU}j`~Eu*H=C`&B^%s!uG%ZFDWQY|ixX&e8hljzs#SGvOL7JsOvDnWpF|_VLNZA8!*a ze~Umneq!qBOVF!Ha-U@KRC&XIE>h^G%bGRm&FwYis|ZL*4HDeTBE$(K4Oko^BHLlN z-CcY{)`vMdb79?aE4?E2sb@`?vN>||K|~OM9CL7nngs?U^6CXJpi8_PaQ5Wl^vT)o zbWEC8nxxd-@rj+B(dI0TyR3!X*x}BDn&iHiUD!}NS>3&x?i?C?bFs5wurL-AN{|Ftu=h6oZ&U&>9pO zhpA}f$ObjI!3YNjI6tLQh9rLHXm#hX=h4niPYzRec!0yZxUct59+mUQ?>~Kba{T@? zszaibDSNeH+^Cj*)g2rhy!PPrVHhqhhRtT9Zg6Jd#N;;8?dz8UAek7Edg4)_ZhZB6 zS5=U)CkRK7&J9LZ%`Fh1lcbbV-}imbIc>KWja$srom=j`Fj3d{Q7IrCzY7N0IJi4| z@LO@9GZ4YmOo+)5h~Dn*%3w;=+K)Nhs<#OZfX2P$=2O+3yH__dS2vI|6H(L{I3-G* z^j%JwnVC%8F$_Z~MT@!_kuyc7;1*N{z`jpuaYCszAM`5qq7IsTy7tY7_ zYADLGCmYKRK%GkJmN$8vb&i_}W6~O&$aS z+A}F5^&(Wt`O~L*afV@olunv`fS{zt zxvp>p4WJ8PaGVp~hdoh!c(EOyoP6~wUwihgZ~gE8@_+fk_rCpXbAEhsI-GA{+({x; zBd9lzoTa|Yhc3|V03*El(a-RkTmSIxN8aRv`^V?Iv+aNaQBN*!{>pFs z(m(zu4^PhO+uyXaC!iFGdQ2=KfSJKm!!ui3xW4`8Qa#8ND#gBH%p9f_K;$R58>*IK zjad#3{`r6YpZ(!~@}H)+exV5N9~_=NJ@5Pb6_IKgAQMV(=13Ea1RMq&Zv1N9^?qV> zeLc>R$k|iZE{g=hEBe5!4~H|?Bd25W*Po(&`qR*3r}@0vRmZR|`JK+pUC*wR2w(j! z7P|$%yra^lug~?_`y&>|#rY3HuQGlodL^%p(Oy#f;&XgthhE-L##+Szro@rC-~lvZ z+ih|^0FJWUP3bW6p`+EAKsecD@_WHrufRlprZHxj3;J;8xi*vmf@|y@S=!Du3j)*AEU?2kX1)^v2!0 z4oiGaLIW1!IkzF=h)zaR>s(*vqyYe`DgbjKPUJ@Hl)x|@swi`9HamF~+EDMPts1-C zCoH(AJ5+`-Gyr3Pxn$hX+K6ImXA=1$8E!^M@Ms3ljuahbj2s|i5R)0azyPYS!Zfmv z!qGUGBuQjSszZ$`#ElUVG=Pa6b3bDvn*yw4Qxg+}mC7Dl3ANI5BWH4t+VMz6XJT_t zl+^2k`}fCjHw;4=OGRO3W{#p{t+uUoH&BwU>$;qC%1P@m_a!EBnhZc+B!yp=7O~uP zvFdfXM_fTgJ~}$8wU#2$n^sk$-9xm|EIz{A5~Y-c6A4R-w2?5lcw*)T0CQw(LRh>a!2H5*``Ll>KbjR-Lw>kjjqYXT@qyNi{?I|6}Y=wjUpTXUQz0> z8^_UfGv-YhhBB(El8TwTx>}#JRdsW6@3I`MS4Ri;R;%vbkw~JHSR^1V9I&YEaSu!s zxG51a3m6hLoMviPwbWW`9b;0>;1*fb5_YLi>dj?=yB7tQcmHYmwJgYhXriegCzPm` z78zh?N-*v!ql%4!A=w~22oFMIN|jlWqJ4Vgy0U?YWwCwDkRg}6XTGn4pW2;A{SnWP z64pekNJ29M9Ttqs4h<;!Mf?S`Q}M?Y9QYeRuO0yQId6B`PM$w~t;7~DzOoVT)5pS3 zN4SA$_Y}+f~RK5OQs zTnty|;RAP}UOxOwXsGR7&oeOZF|^5GkZ3MFF<<$vNH%wex?`@F z1rRtn!YKm45tlKuDQRPQn@j5@a_~?*JywJ3_p9W#jlmf3+70O9OSlvPBx=!-pXFvOykG%Q%7ryXC z8_RdU`E76dqmW~Ju^qO9qjPtW#Bg#jD16JXskR(QIajzDbW|57VP;|HPki#D7Z(?& z$4{O8=)s*&y!qxEZ@h7IuzvLZdz)v^p1t>Eb9_uY&F%#Ax+Pdx5p(F*Cj_DW49xPA zrun&{xAbkq0NfOy=!EnFcSq~kr_+SPFRjX(?|&12-bRbv*AH+1+MMJ!_gHNo$bELMo4ba6MU;(;TXb(?xQj74v#Wp-=ajlI z!j&9?RZi!-i(z{Xdm}TVZn@8x-=DSnPnG&DI?;@$rmQ$Jpi%7RB(c!k0V*R-AD=&Y z__&^xUb{YL8LM7w&mTX=#g;Z(uIlb?WW;80urUvA+iI!rkB*LnyNk2);p9Tcva17; zymt5C{%a3Lx04^fPdlxu4mC4sp6wPFxn(|m;{QqBKL35)CeLsE*36&O{4bXxJ

> z-9x;0zZ?!R0Hh{BG@1=e76ha$B}7@1Ih3M>8qJX+0+CF%v`-~Rv&6VMjA`sn-16x` zN~{d?7Dt46arb)BB~1si9Gom=bBf|JMEuLZJ~>JR@Jomq5w7#S9ZXI$*vxXh zI~j8T*;oLSIJv^rjfJ|LbKm8hQ%cP2s!8ZU9WqA{eHt8rg|7_b$XGK!EW=P;_=(6XLe^mK;i;Zc3yQWtM>5SAKLi_ z+Yu|lXu2JIv*T^GQOCiCY!{=R7dz>+b7BaSC(lMv)`uQmfdmDhkOA0%Ht-E_0)IA^ zvr$iukN@~z{;&VjH@;)39Coo1gux9UN_qFRE;xZMH?L_ktYNMP;3T@1Ori_djy)fBPT*huyzDL0;$7 zZBCxC*XAWK6+@rgwHA+boT-<=(j08f$sP0FM_@u(+eeH|X|FcFzyj z^rcIj_A*-22l6jn|L&#p*MEWmCJ2QK))~Y%Yr1>=VLo%|KQB$oXR+&Fr)#~sX)XkZ z>|gz>&gX5{KYyG{d-DY}%ahsD^?b7ZW=D$=0FWh!&nk~ zsrZ7Yj&>UXZcl;qL(y=jjVjRoWp??H851)xz+~bk>d94VJrus*$^AavNqHr{0j4mOiloOdqVx~Y8L<9RGx4D9lTLoe0vy+8O#O8L@UDNjWST8J;By~xw?*OoG zRCO#vDMhuIS*=x7RktFN^N@4SY1Q|=nMvv_8+BP$;yo8Zm`==01vE)oQCKv`0YWL7 z>OOtu8;fo%WJF*m5e8h{i>kw2t?2^T-M6BCgch-0IM zb3{AYntDSNR-+rk8K#qF)dDeOn7bOqCI%7_ArkN^9mtfQ8t}*wIt|PocOoLohE~Su z<}Le^7O!Al(KK(3%k|qWdIgjHgqm1KNwKeinRjorQB_&HK<lc^EA^ToIVM#PDha zZ{89(JaB2K$q*Pt3v8ZaQpz+)9)*={6bxd8c@P_fl~EW5R%$7UmzMVpwBWRbfTEV` zID6q7aALoG%OWCaIH^(A>_4xO+S4lsfG>Lkm#)%w`r7g5bUXQr+-E)-$V-#a_soSvN>KfSP84d&*|A`@UN-JZ*Ii68a| z7Wgox;lrfMe0vKI{{-p78qe+b`SHGhD^8H-oP0@|9jOs8yS%LSHbYp3lt@I(%1}nh zyjrh+`*(ilGoSm+IY$#n~w*`RJRkz5e>^_g=dr#Al}`@4WNQ+u!|;ml30NOzZVZ+{$)$zS$nE zWs3_s{QUgR;ZfH^7P%~N2ksiYqgX2x8}w|MpslYb(Le?7p{ z^5^GJEFt2bHdZ1bHbl5l*g!&z=n*X3cO5}Gu&X;cgqQb(U*-R0uHHWN&BK!!PBuh# zSNLiP4vo|}i+CLsqvA9g4^;||?)cGxKYLFfo}Hh(cY6Hr$?2oBvKjllzJK>#*>2o* z*bde8-ktU9Z@zxGT8%o6+udff8Fw3Z%_2?=)$kx(G1IPic6b(Q&3|%({^o?7a(J2} z2I~!@*Uhy{@D#r<4xY2kt)XbTqfBW8JycGK^-H z0U|eoYV`md%_1V;|DU~geUc?R?!$hWc}`V#&+9&R?=BYD#R3Gd07(!8NsAANpedTR zsR)Mk(I2c24*QGku>LEDK3EJg!VKA#6=BkpY=$J$Hbs*Z34j8Decn5dJ3ZZ9Rp(@; zKb)%S>gk!e_b%3Wh?}u7JGZC09;eR9laJpolO?i<0H&%Xvl2om4`ODP9a$}FUqXKS zG{6XI6A>0Ib{cyKL4<<4JBtWAa?Wr~DRo_=DVHJY%MnjrbQp`#5emG+iIm_Xo#vKv zUDt<4hx4ksSYKT{K9w$2@W{d_O$C%otwp=Oz&@N_-2p1?PRI{+p6fsR*)lou!=3*_ zNU`|GrR{yNuTKC!)1Du8^FCBMm2E&A7{A*;snPVD*M9llsh|1k7k=u?uYLBjvxoPdcJ_F=OrVu@iYnCeDlW2mlQOcm zUGw@UKKa#O`wy1u%YWLg{I9;TNeYRkMkM5LB!?qw1PQ#EZo|G4@dx@Kc0ZnF3+^;P zvU^G?AeItKmc0VreC@T@Uw&l)EPzJ`^>SHhCGTG~jG#{H-Z=^;*TK&0P6b0zUK+a% zo5GK_^gFNb{PPFtvkfv;-M87X-!EnMv3vwV&IRO%A=A{C@}U6^Pzp*EyQPFzqqr-1 zCNnVvv)a5?J(io76>P`1oD11hCFcIiRlJ??>o9c<19xQIHbx+AAByK35t zr^~a8%cslr#no!HZZ|1|gE?FRfYK7h3~t6*Yr>+Ilf%WMlcR_Cj~^b*>Pi9&H0NYa zs6h`8=5u-FPjezGFeHeGGSop^%W!l^PyGFcze6QV7pUqKPU46yyNAKgPfgmF&~Eg&xT!* zsOS4qVXAQHvM`-v+kdf_GU@Q4!+r78ln^5k2u9?HfERC$prr*I^%o@~aR_-d3Z|kS zRFO@z)NN-{GBPHCyE~b90XG<-RE>A{k*BzCD2y)25Yij0dS+r`D!p%cKA+cht*Twu zHBFOJD#tK~p(C|6O@p?b&8yK`8m%lExvhJ)*1lbIcRr{jZbhW7YY~bus#RvT*=)>A zv*(;u+nlooBVjdAkRVmD*h|`VcQRb}`z9CM+I9Q)Q!FLs((izYs6=kdW|7(+5pHHq zYGz&%k=BxM=!HjTN<`qCvugIHY1f->)3$Bu%qkXU1ZOS0)gU1-S<3Y+9?nk=j}}Ms zlliO)QWKF|G9MHC!>c4JY5S@5SVq!vr|K!SB>|jsF0hR9tx4za{$<%+u(LAL21HR` zP{)i)S0-|D>p$fTFI~?aFi^2{5@Zu%6IfY0K@#f(ogg!3qD)W}xb-$N_Tf^oy~W`J zM*H?neBWCy@`H+Dy{MOWo8R$KMd3a~31|Wa3>}SejT^^b;Pq}M;W8!y>+tD5GhCJ4cTe0SV6AD*9~yWgRC zhqrg44Vw>{BK=O?;-em)PMY;QcD@vVK{*bCnO^CMobcc2`4c;AY9E!?=iDgyzf z;4}C5s=mpLs*Zt3A{tiBbLbN%GnZ0q??w_ZZd~toieDd3mD2OIG)Iv<*_Ss^U+*G5e)o z`lS!vKmBL_`@bTA=VG5ZbKufST%?%2z5d+tfUn7vd9cqf+@GL*`OIhMKKIxA-CB2V zJcs$Y&#>IT^yJP9BW=qAzESqH>oaiK<*y%R{=bMmxl?Y?pLZTV>d*0VrA!-d*s#{{zLlU z?f3uuU;mrUYJGWr6{S+knv|n3kr9=Kf$nBGbEw$adeEL}DcK~nX_~64Vm%K;$Qi0k zK}f2AM~_~9_0>mJRXx2p|L%9c^W=kfHdm{YgM;FOi>jNMgW2nunCEfL-ehdib~MW1 z@9gZ;S$gOEyy5t}_uuDX4BS0GZ+XABGLZIUGSBzJXM^bV`SuLiTkkJ=|2r|;Df46h z28!2Gx?_58h>`(jq)udg_bdX$y&!%~C;~zh2`2&jQznR7V3= z&Fb`Q{r+ipzPyx(Hvj-207*naR1BT6Y3OTOh7#vV0CBZ8wOM`m^27Oj)?KYPPcGBd zM%%7~;beaB>Pz8pv0kmy`Eu4;sMwtfmYKYC?JfKAz9!$DpEPLQ$s5`|zG&my^!dKr zI6sHz%)Y}jw4}vg8;r4l$wIafBVRa|;vz0a1v*_qEo5*r6_Lm>NF6BDT&ucThV;CF zp5#OVlqQH<71~cR7*WYtnUfRwV6lM7gp|n$Nl2NPDGNFWokVn5q@|PU=#vjV_42`@ zeX8I2>xF$zos$VrE^7q~`8wRSZW5hY#=FU(9E1YBsCJvuesPCvx}f zW)3IHMvyZ5d;;6u(RGuR-fM3vb94;lJHyPfm((vy3?W8|A=VX`MMT{-=Qed+>T=GD z#R9@2kxHCt5KX44xy|00t9oC&1VrL2PVDf$3OPI2CDtU|hgw`!-3_KreN9_4Gbnpj zaxFFSfT0@jWdAaAX0UJ+4uR^rmKfZ~GDw3e zN5YF8KRsq@;rOUjZLq<(S9^q^ViRKsW|azzyV_!?mQ!wsFz9mv$jm2MB_HqMw!lZf z;q6_xCUvlj&Y|+wr&g@7S}-M$fnZyf186P%TWQ zu7Hb{ktEJ2=~*(OFoeFPgi``l?j&G?KoKawd2_i&E(rqSPGz02Nz`=KbnC0NQx(I8 zV{n$t)DSn)&-qrdV07R}5TVjZ{fk>KTRTfu%D>HU!hwD?-YE zCNHbh!6E(YXY^qOE;N_E z$Yx=;kXFKlE)^t1aLOGlFY5R&|KJb)`0HOgdFerC{)yw0gEt=i*>_J5G_-If?wkPb zi26D?rCO*fGr4Kc9qYRU+#$R6=lHu%{rx&R(cV0uKZR zwCCq+6Y00Cf*b7H59=TG5&t{vz)~fvEQdZ`H&G*ZkLTW<-+KJMOyiT~_~-C9r<~@U z3O6^Ne+a+dz^KOc!S8EW+$lTl`HI{*KV5bMaWuLAoAlvM@0HO%8n}ZrdFmU)2na^r z8|JRPUX<;dAQZF(d7lULkPRKFan6;~0(3yU2>j}-o|7+t+B71GXVT=>MG+sYh~XL8 z0kx6^a+iuExMS0%tM&RS>BXvfa(;Gpez9D&NzEKaL31h7Y8ZTh5WsV;wL&P*Ia2vt>8bv5f|v!-d< zc9T--x();E8!&S3=4xOiC^TH37a!OE!zVw#yH*X&uL zY6=7=qoGDFIegSG)=x%rDYQQW4UvRNvDw`@R_>%MJO_BFU}PX;7?9zKP!lm2>g;g# zU@iuCZ)2~6nNXO)Y^WU}=a@8R4XUy9i-riZDT9FC|0-S~IWUku)ra6Gm!(+h32~|J zXQ0wP+)Aq0cdd((I3z-hv5Zft(9^cw%-s3~5 zP~F2EoZMaZ_0LpxJkY+Gu_MFE8ASrk5URi%WK}h#oU<8{dUgkOWz&l>)^$z9CGQId z3+HTY>zj31s;XKuBD;_|k*kuMGIJfIs-nznHmgn!kB^TIX7xh2_(7JF5m6|EUkHL` z4tI4Tl43L{nOWA>%-Tj(HRmqptd@MBQ4K3dnYr(C@9ge`Ff#smtT{wR$iu|pu}=e& z8%k&1-gI{=j*B^h5o@8Q_rOHo1Y3oA9fESsf=;xQgI40q(A}0BCHBtGFgNz15VVEO z^=5ou_j#hUo%*1PdtbP#w~KiA&u_3UXg?DE@4kF!2Jj9NWX~(x#*Dv*d;3^!l;=qk zek?z#QW7-#n5Gv+pzkscxAIY~$eVCg*Dr9Ze%O8v>oNXJL@XE+z`z!*<7Q)Q_jzPG zRyY1WMFf8@VgwYpUupQ~V8G2m)-;I%aU~ugF?{0nPyE6!|NL+K#@9}c5PF}*U8-imRVxYPP&YSon3|Qe0h|kHQ3)o! z|E7enm>JM&Dz$VDX7l62lf}X8wbvds?dJUP`=?KyTs(Q4)=eb8AFGg+&DGpAXH|C< zi9yIRaFceu@qPL2`g3=EUH>laD9F3s_z*Ox~}i|VMS_7WA($ao+V zJD{WhPs+3sIhTl2U@!rS&6=KGT%Mkut}dE|oXlxf!EL=>JvnPWcw(1Vb!e*hoGo_W?K{F;SO{?R93%Yq^za1{c8Os)ilmo{Kv>as=mTAzeBgeagEQs_9>{{s~5}1-3RY{`~37YH=VYv zcV2;`ROY6gHtP+kRaH1TJU%);c<|u(_~>vxuaD{Q1O1?i!pv;hJevZbAYwG;e0S}! zsfL;66eq8KlKrKWv!e8I=MY0RpVhN@r~*kyn!C2^awkRZHPsT}5azMyoWY&IB9MWf5Cbt63bl`w&4ytwpbgLLW;7O186Is4^Hx<62_hmA zDz59Ana!-pEdW@yK4t)sK%oTA24A-hMcHbW4)HmhE}V5wW8{16E@3P7n;ODHN+Ir1#m=mG=kPKBZ@-^X#;OT zm%t@(4qO0_i4sM-_fi|@ShvU?tK;JZy?1f0nJ^0o1XS{=H{N*b3!nbdmp=P5Uw-3@ zKM|`}TlMd(Q)k($Iv&hfM9tniyEI~!NvsL8 zfAVL)`&+;D;K75he*Nn;I_u!b$HcR+ACo&--urv@ec7cP4#mt2uK7>+#^rhb% zM>@_A)L)y*jkYVUX^-#sO?@oilZ^aGLto3YIAtaC+#~he#2^M|@47}PMMF(EB03J? zM5-gg347&Qy9HHt6=a5jfuXUH^<~xIU?V09>XyOGfx@io(q*$bUv0ke?)$5x>(yq{ zbt$`%^hH%zz;2#gRdW(XsKQ+0tM`tNXNw2-jvgEzE$R?po|-PDc`YHbNN}K2Q|rjd zp(l%~$r9NkdrQc<;Nv`5NjQ2+sle7mL^v7%rofTeMOX?)i`mowVzMVoDtR5go zzVovbzXgmzU{K+c5~ZwQV&=N8V->2Z>bffDe0h0U*cz(pUYME$qE54?&QixxfFexp zX0`)l^X<#cy{$1xN%~0U?Fk{-RJBjXtCdPjg*pL+Lrvi>g+7ZN+zb(^m1a!zUn zb}*IOBjOk%oXrf5wr$s|cD-IVsi5j4NKjQ)2N|0(aSXDks=AI3?jMOz9cO`wO#x?T zCeT2FBBD|Vx?IcMOJ`bjhB*IJ=U_+Tzi8N=vf-IJkkT<`K$dT(!mo)d%? z8Tk-0q2XwTgLCO=L@*KqmFm#zK&x1-1F1j>S)c@EHbN%10dzcqkJ)i2Bl!j?bGx@V zeEZ?uUzwUDgTwxVkvqZ&FZB6G6&3st4B#GNF}?xfy<6Eq@%yzdT-On@L<3h~oPr}F z48!NwF0s$Dx|`8*4QcyKc~P@)Pvt#>@i4_^mgA>bxf_r78=j)ycJ{8~dm}S!6O-eo z7n{2D6FhRi{aic$fb4#*PM?$O_VPRl>=DQ6yYr#Ugfd&UajM<>e;!2qUCN9*JxDvCn+^YhVA`*S`LXk6y*<0unH*3Z(|Cr7<*$FqlB> zvgJhx+(3?|(fNT8VYRjg5BbM`@=HJSb6-6>|Gm_iYa$}R+!b!_Vdzmh>dyfke78!w z!4dXh^$o0!!Y6(%-T2%H;$Eh6a*`^zO^Z(Z6>aq!O?be!AHUz7_XaIJ)wIu?|KkpI zZN209*ZZ^NL+H;jP+mgkeH?IH9dr!~xjpmVv-iJn-v)+Cr*?B!hXVaVbN4cmg*#}L zMFfDERaG^gFGQqSZ~o;U{;TDB`QF=aFV8P6Yvf?b+$hds&g#a(!NFyX#u!oucGkYL zxPeH;j4+$eyROTf2Z_hC#l7Q`2ufKh%Eo{OfD`-Jx5UPwu(Y0O;?B0dUX#GcBL@%F!G{ zb1#6M)g7*I1p+8LGa0iR+}NFrB8N`R+GK4GZh=V{Mnn?5v>hW`H|^uoQ?=v6MW`Z| zZ~+|TC8l6X?39KQ4O_dJ7&*aOqz=uhySiLnU9C5pOj(YrLutKRT{dTDnn01!eQ>!HJDUgQTje7WL7|F^pEr~C$M9tNeuGe$5K%x#S zeESh=Uyvd`8UMa=$u(_86CUv76~Ow)+;o2S?|rJzC-z(47jR;K?pU7t^MQ6Pz-=hx z7QblZ;*@7CnRr+TR0WQag2Ys=D;Z;*&PkrA&;dzcrI;L3Pkx$S#fjXDJM9K0m@*MS zLL;|9nKXc%ti+*wjiVZ~ql1g{_Vl}t&ri=*m#3`G_#OpNRHg9Wwq=KCL%69+6dXq9ZtqU zI7+A@b8sdnwnAe86}D(%r>Yw9=2Nhp>-tKUPxJA=a@(c-+x-UDtJ% z${|$dY^e)QpsZF#%-#FCz{NyG2H?a_Ft*a#N*SHDT+6}HVHIMtY%bqFYoA`#PGsup zW@cGQOD(lx-1eJh*-wec3wzb$O%wQ z)q{n$U4kR5emMWO_RNl@HGFqsk8Rgx->R(qH^lKu^s3-N6#x(VhX}nr(>vUT{sS+J zklq{Q8TO3-@t@Q$gi^|H2yu-AGw^`7W7U6Y8WOw3zrF!LcFn)OwhK>vkgcZeHy4P} z)=2M7^Rj+mR#>LU)CY`ZuvALCzc5tLrNmN+h-Ooumf37}fT9rBoh{eA++eZBa+B*7 z%^H*Wa@KIYpwMa+QyV(~jy2&>aLAYgQ4u7N+XkA5m!K!WC2(pub95%n(Y;r{@|Aa& zoAf9D*Ye5f^0Eb!&xtsM&wc*Kzx;DQ{?(uV{7?Su{ny{vRD9lc*#sfT;;3fYBz>B) zt5H>P#dTf9NXSryW@yGbp{;FxazeR%@ABfI)L;JE*H2FF&km3O{Ez-9fA_mso+6o5 z(zP%^_W6pFu)hHrD0rVz%&Q`ue=W0i}&t~e>s$#VB}U>dQ(pWW0blfB#z+5ngvNX9dKNT+>>}B@tDE_ zUTY4nfwFieHgY3Yz}#f4N^C^tr8%k?f)TPIb+%buT`pHo&MwYZ>$jg=w16oLVO)5o zHmgMXs%e?XW>q*jtd1A+*I#~VQN_c>tQI0`%`>@1ad@`OBI*Q&Db&nONvfloOlq#B zN|mIPvbw6Lz)4k=RMpILGSkqJc78=1qG*U*iquAtV%-4lRxFn?Ry1aO_ueB4_l|e< zhJ)M+=oA1-LQ#Z9utZp;zDlOx~`SAkaA7J0Ys`M5bwM145#lKYBT4k5U^h~%6_NJO%x@&<|e z%&VIzGc#)l7GsaRq!Dc)M1<0*2oufoj0#U>&Ir&aT+1XXyyFlmcNd8v3jE{(*3ZV)Tg{1KYo^v*H z^}d6zlxjL`W=+?mE^k_GlWPh^ENr8eiB-9rB?4jSS`=vy`X=ce>Ly?v;zromjG!dOFjDV3hir8?_pAK*vcEeK)Uj3& zdVIH)f7%d=+zm&Rx=Z*49o*)Wb21P?MjOotMppc>)oR6p#p3wo`}ZE5yi^OXuiA?zkN^6e zzjW=8mDQlGW~4cq&SEU6XSH11mBIM_fsWUYntW8i!ylkb8qeF%n%Bsj)m@DuIWY}} z7CQ)3NsC>{eCtoI6mARi!zfo~}$850CGkh>=JE;y~d*X`s`$(Gdbz zC(c-h%?6j}%ZsyRvs?i@pD&J24*e{*%k|aS>E`^@ua?|(oDoU5znIPPa=kvg=vJFfa|b&-xPScey~Xk2)#b9gyySKRXH|s=Sz#oOvD&+q#1F0Y zIfcXDCQj%|yE0-8LQ!N^$$U;#sFcjilUm@MyfclEK0!p}w~WcaDcmWjTrg_l0EitR zVi2i|A%MgY&^HQW@WBGw;_16r@4feSv$^Uvjis)ts&2iRRgo#OyQ`5n0q$PMxY?|( zRsdc(IG7XT^z?(rj~~DP{`>3o+6)H=2SF-#&lzTRE&6dIjHAy(6(|{cPWTF~q;M_(&~fougm zCshblRiUt9(u4>KjHrLleW0o^YkLsk(4t^JC||l1hpGZ#X1Pn7X5BPRO$YtVcNm$w zt6DjxWC%u!v2<1QA$M77;bun3?KinQI5;>wJY-iB3qh3`d-ww$CX>(_=~%3)61X}`md7>`## zz$|82-6hQHx(48yk%^jyH)~mMe6#k|l`bzcMZ`IU+BjqmnL^UQ6`Fvngu{TjAqs*y z5ohww=@K|6I(M8J&J>-qA0CA_f9&9c^Yi!L#cB;Fkm2OyrJwkzzy0ff_ve1`S7>(c zs^ce}Xqc@fQngrZHpp7fXHU29aPzKf_1rr2yvzCL&wlU4Etf3S09P&u#0|l4 zSTGKTU=XAOwwiDd_#{?G9FD*X&$S^~7FRCozGOC`?#8L&bg~3)G?xts@~?*wVE`yjRe)yX$yGHJqwVeS*=)N2svh{ zVyuF=2$5GY00o57>%TsSdy8e;b1S`X1X~h>1`076xFi?HfEP0#9UW~`Q>he#VF!6O zrR>x>Gek)QW5OO|McLtZy6#{2KwvB>%xs1DTR>?=aW4b|ck~c?A5v%l#1IuQ7b8)vl!I!WIcA+f#4Un} zO^gB0?gA|(i%b7t1{Cb7#wge>3_yM79Yd!#dv;$Pl|X7KK;$KL+B1Wv9iYodib#wx zMlrLjscqY~ZF9~c)MeOn&H!@Gs+x12&*$ZRpnquGVrV}@2J6eVFJSUSJO~jLW;+nf z%(TQf%RKK(9G5qaJ*>}*O1Ux-G0OV2anO1?Za;dKQp%gQr=jPZb1rZqGh1J6vYKXc zcOfzm%pG1c1&{=q&8ovieR#N79Mn}5_e4yA`uKKvI#UQ+>5DT`n0Oc*S1YOUwrz9Q zGyh|VWmHRs-uwKu7xsk@G7ix->tmXNwQ1m)dIyjl1Xf~zoLDI&=8h?mbj(T63H9Zj z2`%$RI7!KD!zoyC@qixM;XIZ@dm-ZQwfBVqfbvW${o1U!1_1q7!stOwhh~Ut0Q*R~ zTTXPt@x>YU8zF4h9kafI0ZpbJNMear6Y z7BYwc=$lzN--fuH$Q0>$!#tXNrSyMdA{cZy@lM&go6cWsib<)8K|zcf@TTK$9?$KB z+&))XCe!zOL%?)*{=6>z%4aWLXWi}Jl}w(OC!Yg1 z2Y|{s+`S+}SvYFi}5Pk;3bKlRgJ`R#x7KYZe)*EW|; z+qO&+WAOf2Zn*ht5AG!`F}@u*1}4fd&!^V07*naRPB9i!{$?cRjLNvtUqs9FTEnM$#c28Pt8i~t;c6F6tC?IgW8)u-EH66 znQ6}Bp&lUj4IXj`MDgf*C+SdR%A|Lv9wm99L`J%4r>RC|BC!G0?q@nqKBw7Fc{?{1r) zHyPFizB3j{B}~kQn>MnY{b=vH`%=bjYA+3bz#vXrzz{HW1_IDC$os1poS8vFp4~DD z#Sn!>-BmS&z!t4*-93Z=*OZeHBuY-HT`qZf8DflLty*>wsYs-72n_k@WqWz`?xUCQ zAJp+^Ud?M_VRpcnjjF&Mm_gY+b>3`fz1*ZGtuLCcNvTbN!twkbQ%GHRb#c|bcjcE? z&GOtftEhQ~LNw5v5)l~$Eb6QbNR>leJbGXfHp{E^`=`qfPMh_{<{=&&Jox0RhewCH z={D~@_NP}z604bPmMfx&o_BZcjcf!xP*FW{`aN$#X9$Pc)27B^O#?Ot0 zkULTEq@C2WuIuW$cK52PTuqouK`|kZQ9=+!N@{8z=L-(ZRj3XZm{+sIqX#d)bbNI5 z!3Q6_|J`?6%eB-puRVE6EsGQJ*ki0bh=`OLU=qnq3OK$1($zXM4T7rjruBByRa76& z=8>4xSSct=_Ie={dHJ;Yi$DEtzUr=)%gt)-+6i$)uuZNwdgp3N4gy(LcO~+a+Nug7 z^3FT&oSi)ZS<|eVrs=vagaB|#DRq7P!pWSZf3<~8Ijk?{?K(2G-V1{la#ZP=>^wLg zOdKTEH6mrxq-|gu%(FU#KttQM7~{dg!F)asA*7VrwriS3JJnJUPlDw{Zcxiv9i{Xf zNLWNH=WIF}imEA_iX8YDf7Ik^uG!slmx(BdNC;5NIWxJ7?9`$0=~QuMu0k-gb!LZ;`T}mL3w<_1kS<9Q~IYkKfs~or#dVBO@z!XniY0 zD#g-OnF4W8)l!Xcv)K@4MAVm;D9tAw?!I2P_wJosU0ua061c7_Qyd;2hoghMd;(Z7 zYo9z8iJ_`Pb-a;NH%U@u4p}Lyt0T|qT+a_H9013_f*}TG0!)Ql&=vWm(^JQ3hqH`K zSc48f``K5rSHSzN;ru;Ne)*?=?(hFM|KQ}+*S$KqYDo_c64$GSQV?=O6+zxwMrY0l z%y0x@a%ZwQuf!NIGDPB^;e(#fi@kjr{zxl6m z?-9=4*HX!%q<4u_p+roTnUM!)LWpohsmHW9z-&f8_V8za_1AvoSN_fyzwjm9=xg77 zJO0_9r$7DU_@Dn5|K+34yxDoKAI|3-^t~q)p$n`@+iZ}) z+&4T0GOX`RKU7$>YktRcjtzENv6t-nUvGRJpc9geoMUWru%Wwtw5rwBE?p{fJq$~Y98!QgUKir53OhPUJH|s zztF^DpD>wEElIUuk3-*pW8F5}xmO~DxP zT{v)vK*dl(Dys)h1}7t-QLmDZF%Sn3CHllsCOF)R7s>#G7!&{j#4VVI20_7|gL+g% zN2Q3)(S|w+M9y$`a5VSanShG>(DO;inb2h=;TS6sQq{IgCN!%8OZ2QpnIh0F<87#pjAKR#jD1m57wv zvLS)W+?OuzTe|GnnFhf7&kdyknLAM^ZEMU-vjK4CdcLS;b9ZmvdB-f}oXUFCl+7$@ z-fR*P5h@`Efr*$T5KG=1%<7|~qr=04x{e{T2(d#Ia5x)^l?!E*=*8fV40mg4X4bT= zrd-e!IcElhC`8d>fA)`MlW^atSEtH$BoG#+ETgYd053(<$$VH9g_0~*^fEhGDJ0^S zxMfZ;wh}r)E1cOfv$ACh*-BWsgrN!O?O1q^*kPxF`WOm?jWCR7N^kkQI$&C$7w+uf zU1wxE@rp-KT*YyZjxpY}%Nlxr#LcW!4H(Vxei{$w-tLok1ubs6#tm^-U@uTMKFiq7 zdAg6^>6N^ge6I}PkL6?e0m?_X5SpM{18c*=LHY2Eon%os!H9voXp)=APiwJg9Jtj zOR2GJG7Gc$?4&+;>#es^*Q}mCeed+_>FH&+UImwfx>`4vNw08UG7E5+6PcT_I@o9&B^CfBLsdwB1duzroYt#& zxr}u^J2+&CS>Y6fgrFsiqvXVR@1651@}i1$l*kbB2zI88H_2g{psop;OgC<=3dP`Y z5f?#(9qqblFR$`)jk6VPTG})rX*4BQ(`=d;FeazaIT9Q(%nlFdCr3D3JiWNM`rwIQ zT#|ZSSA23P0)z)3kuFg^BbH$HR!$@?vcI0mkwWhzyB)l{5#c*aRKi$Ww5WQCfl z3oFb_RcBS5+Rgdd)yciX`GVr%+*Z^)Z4T?X#dHws?w668ZyWYuVa7hD~60C0bv`&DUqYT z`21J}n;Q<|eNfPvv6xM4DV%0)~xh7%tPQz8^Bgk4& z3j%{UJDCZ!pbf$m;WFVO`T1I#u4|drME8%5?|=4l7jM1Yev_$L+R^={K8SI_VYbR- zR4H@k)Mu>wj&ddcG?Y>8>3!T+^Yp%SY%mak4eW)h7eSWAmY2&HFIVcfen`}FId{lZ%h-uTq#zV@Y; z-uU#aKKj`M>)1pZ(i!`)Ubhk2Ci4`0?X^{JX#V(!Kk?{-6B4qtCuB zBDh~idG$LN&0n29b_*{(e014$O3_N00f40BFRrh9dJa;{UGwB)YRkv+BJzXs3qIU+ zoxDjc05D0RYPyjstFc>9<7{lGU5=`FRLzg7`kr)i*P5gzRH{KUXJboUR**ZHk!Ob) zWpaQb1#|c8F6`je(KdOLyYIaF!P(Q*`NeYCG;NpL?CzNiY79b;a41XK%-v=o2>C%( zKRh{naB_GuuVzt*IjcEK(+EW^2A<}=NDNINnB}52&Cs};8H0)4iI_PI z25v5;xz&-0GMEquEXW`bln6ROV)fuDaLEc9nBaf_>L8F1mnuG-!PzByR8$I4M8zy4 zW=Nrpn*~rX3r=wD`?{735F0@Z;tX?hxdF_J_XTB8pQP^U8e3+H!7vv6CtjEDk(bi)kr_>W4Ci4q)F6mFb^)siv z^lp_GQ>-t(#9s9L05Eiklk2bJ*51Zt^!Db`wlez|SG@K9w|n*uz==+rQ()=HCb?NY zWD)2IdvYq1?Qj<>T}F6+e(sDXIb2aoU}IGi5)NX4L7t<1{-?h9i+|^rKmX-7=ZCbp zL}ZN?yo^Y1d=z`1d)Sxvmhbq4L@3yQW>)LF901^e&%gEgN3Xo}{&yamSsi9xmtTJLaJ_uGe0p*E_-uK8 zme!ffoh4_8C5O>a+}GU6Nd5Xalzx(vSIfh`kKM5EzW#jC{ryAFpXYmX&zhg3L)HKC zJUx1EIt>6|Z-2jKKN{+YZ25e*j^~Todz1&gv3HB^pq;G*09+WN&JYHeNQkmCSt&Wz zSGjPwx+W_vpGW{RQgzc(#ee`ft6JCU#pOCyhe764FAnD`XY(LV?qYEDS-6+#M+3PuoBE% zvnj{m%pIUi2r(Yc7xxb1y`!hOZLXd+=V!cZDxf}I96fq)^x8v^EzeFj?>|`>&na|m zy9s)5aDZ&QUFzHSqWwFeaWIG9N2F^1#-0_+o9dJ2knJA*;v4+kIV#Oh$3sFRZTk7{j>Vr@v zJsB8@+|VRke-tc0~??>rg~s@ba#U;X3&tUy!0{ZAbq%&f(q|KD%F z{rJ0$u3bI1Pp!$?HUNvnK*}URhN{zBI%S`XWPux!CT&xfouzLAR~P_8Z95PNd<5GM zBRO;d2B79d1A%A)D=y8y`XnsHVgWjVC8$GPlc|%zdShTdpDkvygM)*rs(@@}?x}0K z^=j$vC3r`D?L2d5>nk>+??nff5}tDxA}1PqdJ#Yl)wX2TbIz{n?ilK`m4FC;heu;H;qR8~|8f?F50w0wp_L8wCV7+gNYs`S=_J4H{{y+BKt=EzyI}iKTS`nH1a&C3)n(678Aw`pvY)Y^|Q-(p< z6kx!h0Shwa7e44g`Zs>?A249}!LQqTzu~*fYch5d* zck{PUkKY`h>%rswo4%)fd(ZuSFqa0szwW=mAR|fx70@&|u1R3L3m=TVcLEC)%LY|4 zBgqCKO;>luC{{m2TM_>D3}6#H$k9224r> z6L*$GNW@#mrQ));ZQpNFU$S?bA|Ahf^0mXKAN4O^dvRMmOpAj)ES#DxgILVTxGG@< zDC9gU2F3%Usix%|^9K^(OrT(cQbG=RsD;)6=jGz_zHgnM{X4(*J5L{7y?Xw8|HFU# zga6}ygIc3zU`=C{--9C@o={eQ`uN$mf9V^4;}^d1?QcK(@aqqsJdF>IpQqE!;^f@; z;_C9Cly7|Nmw)RY{qE}E`1gPBpW&0gz|}>GLA%Yr{=+|H=HC5x{^>tnK6=~$@kpW^ z2>AI$*Qd?eLv|~0B{l?i2bGzf%S3}Myl?;BtAFn6e%Cdh`4!%yg&Pa^-YXD5`bAo( zja(V}lJ*fz_R-Ypk-J#VRjGLwf5=amKL6hO(oLOw{QVv#2DB#?%pGGrPV6MiUA3b9 z4u9S4wTGwQ-?9r_w@2P{Jk5-_rY3QQ!<6ekniq}*(TeFP@X>-FtlFc%i&9$CsK)9+ zl}u|QAa@Xpi#WkpGr3a3AQiZpxtMb?db{afzd3tzv3dUD)%oS-YLlD@%ucM9Q3^x2 zqW9U{8+TVY!Aubxi&cDZcyzp8iG#CJaQBQFXl9TFX95WrrcM-m$O4rs4yGm|uFyZL z`ZjrhtE&Ww6aX$3bRj9FoJ-bnwM8CN#hMm1ubKU7Fs~0`qD#hz$ix&JR(aZE{MU$R zc;WjxKf!&9A3OSilF$082Nkn2K5(bmGWj9q_hRS#o zGt=UwSYNcp_5h4!qMe9*DAGITBbibdR>~odfJrxYDsWQ;KsAv84_=Ki-aea!6T6Qv zPo3I-2hnetc?+DAU^}-4!6pT9G2WnIhkiTFe11M?Y}#ko}Y%d*2Ff( z7((d#e$u_&J*6o)OEDJn20#d*vQ|fpeeT7*B`OTuqUl{f0lSGuL_#eB+GwhpQtJD@ z?{g_dQHTiaPUdP>27+%86%mP*#XIDym~aVmGNq5!97g_Vo%EF+z$EUjAU7|ibX|9~ z+4O0v34qi+T60ni98=V=vk5cD7?#U$xLPcl_R+ct!hwYZLrr6Mz=h(-!3Bm2wIBkq zvXhyqS}j$RQddeTDGdYbHC-bOK2+HCT*^~m>PEBaWA7l3gk3fg0~9cVGRUDK3>1>Y zoVe|Udx>4(96~SL3zDF4QHC6ShYg{+_YTkfHE%y>0RO!GRJNPe_^4L?*t&FUyUjQHN-p}x_RZhZ}*pKdy2*E`&~D>jRA1;fDfmVdCBc!!4A~|5_K=Gwg}I@`N6;c zAN|JP`n$hsjMs1QV2J|>noXF;4a~@ABT;iO6EGsACSX^M4pY^>2Tu?_`1-TQPai%1 z{--1X%rK~GjPm{l?ax-b4O?*gh<)W#@#hTy@ADp<7=Qt#WCA!?(Al+ z)gA#1=8#(Yl#P&KK5iQX=TgeH%cp0(G)rC!g|=Cg77T$=At#VJ1A4eP0*qi#gBDj) zb2kJIYyc=oh!k3GqDL_x74*5^yiMmFn)aV>V2EL6B84;YRyO)Lg2;ngO7gk8^7@FW+AUnFRuE_E~nGe)9?K0 zpIuyBz}$`W;7F@afGGq?U9J}#y-R~OA;`+6G5o zJ9zzxe)8QERMmY;PBUf@_@3&AdWp zyq-q@SjcM;OMq*$S#iJXSWT2IbRBw;n}bCMX2 zj*bow4-Z=W#SdP-_`!2Aw9TSFzslz8c2P>N75?U<|MJ>IrQPkmM7w2w`Rk>(%*74> z8gUpjvR-Zx`?DjrrdGQLvvQYy_+zv;y*g-j2{4DHy6>aE<-L=SB{KmEl1!DL3<%|- z%KY@Bj~;yO+3O#E&vOrVAf>l&l^klcSb_yjFu+queeP1$e%-lKYEo_&i#9|sa}7Eh zt1@SJa_SY^l>4qLxkpOSKJ|Iqr9L}&fp$&J3Spf>W6qgOrn+1LXm#ux9H`~uXgmT; zXqM5H=|T<{cmdUd=WI?+SS*|V%C`NMLpVHnv}ok;>4#Vy(%DzBU$ zYk&Kjzw)=f{!71t)he!zdC?Y7ujO^I&FST4!Q0notMv)3PCh&DuJW5l51#$K|Lh-F zvOoU6{(1ig|Ei?T!SRF5+3Vl`!#_%n#e?;4{Kvofi@*Hu9l?D~u~{{3{QjGBqGoG# z0}+rJu@Cu3h-SO$m$rg$Mt|?$lyCiORRrGm)<2du4$<7(eO+Ujw_EJ`uXO3&J=$N* zc-}rG?q>c?bLr+m-^s4OI{oc#z486Vhna=6R_qnGKq}_J4LKdg@UUH;EZTz@S3;3X zTeL}Cuu@ACxP#rOf@fTunb-|5_u@t@PLxTEyr^}3KD*k!c>VVIXP>`0Jx}g^D%nh8 z%`|Jwfk9CS?ndSgL#dcUaz^Pv7Ne|I%VpD|Y?Jm8%t4ri$r(ISAjl0M8N5COID?G9 zRYPLbGVneq=~M}>wWb0`z(m^66pdzBEkjltLuGx+SyfF9ATz6lLu+_Agdig8Wh8Qj zkbuAjV>MEOBhtX(<_1%RIrt#b`8no~s`sXKwGxVo7z zxloWOfe-=$lduzEgJQ{u1B+FpvT8HA3o!;Rt*+@^@uQ)j+l@BKkUOHS48RRlpI^eXia6o7rB`lj#a(r6v}tEymb1rAB0Z zOjJG@1?>AbF+wn+@*71{4lTrVJY^6e_VI6sE*&V(O*og_2Mf zPK;9N`!%l#unRDg4RUOzRqR2K=*yD1e%`*i_Wl9ji3LkEe%_1e^Kh?k7+3%RAOJ~3 zK~x=d@C9hW31v2Ec=t||TUdSfUw;lKsBMOn838fa@qzZY9AN)AP>Fj34;a9lB|N|W z9gQYl-FOSko*P8|?GFTg^swzw*lU@AHuyM&%3oKOa(e zzis^QdtNsgVR|5tuvB;At+xPBanL?2qN>-(eFpIRuJ>C~r}6G7_OM0sxq8?9oby}( z7!)#kXNagTIft-1Jp4QV;eYV$U;UNEk#EkmD6Cw(MVJL2@+O`pv#%;FNKl>uxYj7joC3A*SRkJ~;@@jT+ zl~?mMzK6@MSH31ceRj}6JfO60WxafX{Cv;zZ&{D`57Cc)y#sg3&l!epJbst_q}^Zl zctSVtem@4^XRpgJVfHKLv~uhwrkyi9j8N}s7yCl_IdIAyGJRJYijBBiDq3LR5Mos3 z#}A%7dGz4$V2#rM@VnoA`NKW&eH0`7`Ze@2D^BZn?YIb+|q5%qnqLqxoKg>)&tgM>pl? z{ri!>r@lvuJz@b(N~}*oxzRQz00?g65Ku610N1)fDAjay)MS!wa5c?py|5EGu^Owp zDw%nyC90x}=i-+em9vZ%sqn*xQku}T2*QLSPV69w1Ch}nKCqeqxUmPgGZ0J!5|VSy zRLr`rJ3qgA^Ja5#Ze8akw6oSmIr zeEL}c)DpL}es=umo6o2TZ$AC>^3zvMuPsNYChJL<-BU_|WOxswE7k89|FM`|tu?ia zf7}eX-FRR1%e&bNc+dG?D}@coDryfI4(3{z*1RV6hBQqR7wZo`_&SSx`pN6>eCIoT z+B8j*Qn$UjTE<93(#R?V1`m7z1F-^5Bt%N&M1%jdW(Z@ZLHi%#u?DrW?fa{;IB5=+ zK<0Fb)6e^tAHUq5ZO>27bIu$Ps8u)P+}Rt3wryO*NJb@PEli~BG?B1}a(7GsimQ{e z5D77n(ZCvYXG6_a#|(C2s&%ieCR46}aoa_InW_a&L_WrV0W8{3to-@+FHc{6-d$cTDYPV=8q_!hMG=lYF~Re$wdU1{1Wx8wjZ4 zAQ0Ffgg8coBRuewh{fx_I*2SUCaz?}FwzV?e)8y>zw(Q(|KtyFc7*^GOXn|9`ehq& zxr7MX7EZo0%}H~j)b+aY)uLZ4V%tg#2$6)186i5jfQ-1P_BrS67P$u;zF64CF1m8w z!y`2Zk)y=uBxB-H zz_jrKgC<C2|5PS3Ux;^qf`w=;UIH^IE zO#^gESdcE@tL5S(#*<}x+%_!{X`$S6QSn6XZeGZQ1mw(th)Pj6FGdPdC!z?j6Q`ov zWS5uQSEp}3e|`4q^z`lJw(B#8=p>5CpI>GHe8^jC@9M;%Tg$KvW#&Rsb-B1x<(mmcBBx ztW8SIwr{(xOQ~cnU7y`Oo0n2@(LQAnVUX%dgc@l=8zK`}9H>R-Yf65DSL;Z?Mz%Nq z{T9iy7sdlIH#*e$H8(efx*FgLV?{PCg+&l$VCGsbswJb8QjCa*DYCFu4qwG@QN;y0 zh;*bxGQpsz)d9>)WlW2+)U;2eL?-Ug;->0k4rdY)7BHz94^>u1@-S+S90L%X#1V`d zMJUu{m(D`5&|A&_91LXO;!HstPU=nu5Q}pa>=o&57})o4Ab=~*J_rN0q$f3^&vnTV+^60^7q^f`i_F=i{@}%=(hMzPq~GZZ?}fm6~RW zh>Ds+*xYPfeN=>Gxs1!j;&8QEuh)yXY(fxrW_8;V$g0&mU|hk>TIx&=!#f)NXC-eY z^oAETGdGYs?;^xBa^BtG#Cbk)cYL28E(Gx4MX$XAz>c6`1r(u>DOd@G(F+QbQc&VT zF)syn>Y028mF8!u{hR^(^Y&BO=KI`!%<{+7p*z|wvCN-H(#*~A9BlL3&c)sRpLSW^ zwdyc6+%_7wBay$l!SN|K3g$7YJ3-byJ7@nByYHiwP3~mQ>Q*?#R?AN}pW z_v_8k>b#&`go9{`e0)A*v~QpfxEPIS~~@$#BB@@Q|4WVx>Cg zf4;YUal4D*QQIx6;IE=nKQqmTawAhSLIo$s%6gLGV#^w5;SvHIH!Gj0KtF}FT z_44EI{Mp+VFPB13j*rT=Bal0CDW$l=IXVRqx2Y@&QOy?#%nj6CteWrz!Pxg`cgd4m zk+^t&5qH=5cU54$>1y%aQ~wCt%~kWINiAQl-8xVNSd9lW0hRyfGv1>+Y9&!GDT5>s zAORNCwYnY5otPp4PNgq?wn^np?(#tsU0b%oO)F6%vqFrhzw9Lj36P-@SA@Bchgu*( zfl@s6{Wj~iw=Si#^Rm56mlvM4!CbtM78H$ut2v50imI|Wu}ZMO+^oW4-5wuPyV#WU z`uy$b%NL=`LS&5P@$vCDo~<68oW6Sb{CgiS3JyZcuzs^u?WAp3*pt#|0bKJE&Wu{Lg=IynfJ71YC1UIhoku z(b98XFWZO54-VExdFyZ9oNmrLb8sb1kbA9oNi~ri=TaCIQbz`_w3Z!`oCHJkmmKT> z6Av_o8tcUn{dFE|E(jA(rHyH^UJWFSqNNzr%;4_Qh`5J_*Q@pNu#HV4ftXoyDW&wO zODSpY+&!?6P{|npYHeS00PJk=5QDpuO+`mJ|I5{~v zY$RZNVIRM|_`!Gog0r?9v`fWky;vfZezQeWlm890lCQkow(fos?Tf!myW48;NeYb^ zQ=k780AQ8rQP2F+!s^FjZ%zWac75jK={_?N= zoj?8;|7U-G1~?OJn^4ZMIo9|FL==L%qiF6^Nm+B>`JwiyEK6KuZ(0h)CAb6@H{#KB z(UKCn9%V~;>wTuHjh$cF9*LMyyX6Mq9PdE-(4B7xMDO!_}&f z?4dD^=3KIAZ?@?d3lFjcn$4AFi>u|DS|B$M)(3z0H~&6$+kg4LqWiP|&q{%?n*aHq zef+=t-alI}4}SZ<{D)7z{tJ%YlmN58)y6Ma|Ec|+D1RXbzA`N$pJ;vksrPO zcBeh^p0{Oln2Bm|TYwHCjzY60JUv{kU`wKyQ*dQdauWhERpDQEVFMWy&L-?u<7g6? z*pQPa^A~4lXPf@j>$4ZHUcGsH+2ukK!eX`Q5;FgH}F!C;%dJKyF8rDZkZS~Qs9H9u_~0Cx(N$yZTgRWblXA{g{ErXdyxQ02ISjGUZ| zoJd&6!4w=0UZ5$9W?f33Rw<=a^z`h!sIyurrRbph5V@USO5nCFt+m>O;6a24TujNy zU__+k@Zs})r-`~7P~42%%#5IuxKmS@=b}Nl1PK9AGP0^_AyswA zgJVpQO=I;|Rbw9XTCj5+K!!R+AAU<90u^%x*j)*rA*Xaz6n!>b#UX{Hc++cBJS25AIBW2nZdM{&W$mK z1|l+O{ybHF0e~T2dkqbbDS}eboO3GLb=_vubzNsp^@*6{c9YzlYH=%AV2Z*q@Y5%c zmTg=wj#i6CD8SrIO>+~N7zTGI8%mK?RfUFV@L-IfrrN%|xEPBKD?5m&va9d19mYWD zySDi_kG>-@u!9|J#7d+jg;@!`;Ifro;D{p+I4FVrL+YdjZ^n(VMqQ(cN{pzL`K;NAKD9?v`c>aJSXH^%eJ&Cf4WOZ(cb-T^r~==k$-yR-i{U7WzJ zonLN3(jgAI<(F>g4YxwDicqL~D6eVfh zs@dh};e%iLcmL+2uYEuZbP2IRj1YCw5@IM05V*Q_1>_KjbM<7o%nJ66PitjJT?iJ2 zc~RMPxs7qXUOU0mV2B)r*{#+-9ksezVYjwBLtXdCCEIdKm|54A+IVSE#Pj0q7*6-|&d*$G0*Q-1GfB)#+ za^sm8xr@UzKfM^HB(z3-3eAE79)0lalTUv5{Ns1{(}xd& zrhIkTUu_~mL>h9DN+8MFXQ>rjysD>M&1e8aA}Oz_Z|XU-A-QWDuF21xnv30&(*5({ zj`QzaNi#iUZ#?hVFYcDlx4`Xp=gfb5@B6y5-M1f2Zq1ns@{axJz4blY=~~muBC4gX zu6dWdraP(?pT-Lk31KK%Bp~8ile7kTT{W{c6qy7tn32NVO(5)WxOjGt)b(mtmhbK)Ti+mqv?4?p0O<)`PL zU%q_7U0QS7xS6^UGz2h5XQn`IynA!k$N#qX$TRwHWt85p72IVn+#%0>Hvj(;^K+;J zT0K850Ozb_+kg7zy9L5-2g}vEjhlSss*PFBnTVVSea|5hj7f-{;4FZ7&DlAEwcQEi zsMJy29bEMDw>WYTd*HA=sF+ zq0$A+31Bk7$iYO+2qH0v2!yHP^BrpDZthGhECirBhC<+`X=7;Jky3&)nOiBEvgHDE z0*D;$WR=rqZk0bxLNFo@Y;Y^;<~83T3lS02YZ}0sSFMU=2EhgqPQ;Z(QRiMQWLHuD zHHD)O0SvBHdv|lD(g`W4`=V>JaeeW>+LH87)%}|E}MhZdU+7l@%DB9 z@`sJ{v)!y^`p&Bvv z_andaR|6w|euC8*dH40N*@-)SY`EmyDjAY?*DUR2CZNJ__gPTKiEXHmH@J^?8KLWb zI)8{^cFhmn;z_t}Z{Cz|U%-35xxdfn!M&{(51f*(pb~&ainiZA$khRtO^v~kRTEP{ zK$p7`+F$&ezw+!`-}w0X$4Hl?g~(j{bbhJ;fm{S?=!!2>-)GJ_OEO(*=~7uEE2LfezZJdz z=h~%z^XGs#z}xcw{y%?I%72$i|2x0?PfnhE@TA2#@Zp11+#*vdy_unKR5ybNn8+pz zd}biuWxwxD+1c@NVqYf#-#DLUtL&CGKmIN|uYsoZKFZ+x+D-q`m(oA?d2*-yJ98Dz^rcD@y9RlokvuksnBV9pZsP&pyzP8H!tDI1 z|GqB|_muN@u&-}v43KGbY9uZhN0E=CoQNDUjsrKAqZTS#F3O~l3BrY-3~R8B8qS#lRAb3Coh1@ zm@CU`U=ygB@@4R-xe-L*3~@Gs)Dp9msou_@|ZE;TW9Uu!H`Q6np^ z)}>rx3^B&oNG$+DH5>{M2IC53vNQ9q?a`BNwu>fKenbH|k&+E5@JWe?)yYva%WyGQ zD_lIVhT;VG3j1Rs@~RsWyH6{;T60cBYF6tw)exTnFRCFMXAQ}lLQO$a&^T3oun%dPMacme98e+xF%cou z%nr<;zz87(sbNJ2lM@O`F;C`2H9I>|AvGCft1--LxQ5K&#oUWgA)>(141Pmvy1rg_ zek}sP9DKAdMh$Hzx_#8a$2d409IQ$yDV4qtITuxRBO{oZxtYSesA^5r%*<`O1a`RF zsqHcTXL5M1+fRJ}AT)$XtE;fiZ6ay{2bL(I2{FZ#QmR2y^_n!u-KT(VVdfZHW|kN* zf(6aYT^nl5hoWI-$XPd=ZP#_%)R$6HRvS`2)okSkggP%oxNT^)Y!8>QZNlS+M?rWY zEL_OcU;zR#l1xP6>>#6R7)2tgQ-<8#sHoq*SxVqiP-@V*PPG0H9uD_xlXXE%vHq>W5)5B|NVL+fQLlE!3fngt^@~zT>)w0 z`sC=*qeqMNs+7|A{qO(Ff5DFExoKPEtL`VfQGS~?<^20);brJ2! z*BVJ10f~bhxwC$z@2KB>c6USimw0YMPyvb(!HcVl!waE!BUlOAqjs@9e%7qY)#l?r{Wq^(z395G zA>l;nDt*5F^vTK7qr=tas_Xj8+!YD*`0)oHJv&~svR)sWqS#rNw!Nk{EX{O?IS+^y zI1xK2gj!Ne-D?`;N(kJg{G4EXWFWGk^m)y`WneOL2V12C3s-=7jFEyc^XBr*%%C7Q zMiT;u&@eO9oNE>mK#@w{r>&Wt96YKe=|sf9s+u&r8Z$cv4sv}5APF2uDrLoZR89;C zL{@#XweB%7$ZG|+l($3`ea}pRWefnv*fdRb@u(^nHZ!;aVcLE6d|LAfQ@tla8WAr; zMwW3F!Rr(Xq(1oOsuzq|T>NWadx{oFc>C)7^Uq#fynb!HHbBcUU0y={plO0jzq#__ zv1tmlVkS__`uQ05op)<|#h{;3Ez3p=!uCY-p2a=6Z$_shRcwy!TSfyOW%%xJCU!VG zI~y4W6=l#ve5%ksObn(<^a85>t6EdI`<@pPDEhtt+`aZ!CjERA#nT(6j}fR`IJYB?k;c69*~CqfjMqbO3A zq_FIAg}(Ln$kN8*A!38DK!`32XHg&!$kcOh-4=PkrHi-sWj3=5R;3UZMWN$%RyWtdzW(L=H!v|TU=eG+{%m1+Z60; z-~9Hk{^oCe|J7&zf0yy*H7?(3z(vCE|G^(G5B|r;Pe1xkfBQdQA3qQPEd)qOaxMk{ zxrUz{Qll(z2aG4s&-fm9-v@nl9x#(@>gW#mGQnEjd!kN&lzA6^-hLw694!amd3AOR zXZoyKE&&CEAqDhT-E0g}0vHS9jXfPS%u#P-13<PO*n4DNgIwuRt&$oh$z7ed(GwRaFBWNY%arny@E%`!KH92Fe7tQ^|Q0hCof*U zIDPx+*_+F(DU|{ViT**fVotO?aa*V#$XBn)P`Ce1egKIoJ_OP za-eAv2XRrjs~MbGu3wt~Kr!I$YTT9_3I`xO7L{`clm?^G#S1_z(IYZB%r$4S!V;Ou zjhvh-KDb6q9RY}jXo$s|>>(LvYc({r^sk{EBF0pPf<`lBUPYw2p&DC6fe|IdD2)UP zluVVpz_V$FWrx+XU6dGs2<%4g3K4M%A%G=AODX2&?#v~GuxMIvMGCl+4kRkaUA~x_ z71;)uCNL@(IcEUOwV1w}(5c*n)-DUs)AOJ~3K~%mkrEI%`VSD#V z3-(f~W>|T^GO}W78fOH67;Xwz)0E4m?>5^_D%st~Ux}G%DyF&NHB6ap5yQd3^7!cB z_-MUaG%*mnxp^sC^F;-b5ZW$hX9!5)fVfwO8L26e0BVYqQ`dFfHs#XCP%}`~GKl2v zT8gTQM2rDoj8phzyPS=BXgO)lizsndpwxy<7P-hAE#|{KJ#xrFY1ON1ObHDYn5)Q zjHjU@wN6la^H>QS7zM?cI&WZ9FcAw84>}V|?e@$QG*;xA^=I}jEbipUG={!2BzEI4 z{He@FW@n@NQx?&6fJR8qh{Ry9AkDRC9@_5em^}AQTZRn3UB8Rl?m#fv=+-XEA z<yGD`uRimPC{!qH4IN|a zxMW=9AcYo(Pl%RG8p$jbCMUOPZa93}x-iPyK}OIdZ*3gUYC49UN$D+ID)|UzAREiU z)a*oqeqS+tMEeng+5BWF0}cRFj!^;NHkbc4t(sa3XFQXqtNE}lW_R3^x7XWjz59Ir zINvT0CvoMqC(|G7_UqrhA5AyK-uj(a?4GSqnhBawzti2BL)(qRG>3;V^}*>!JBJSq z$kXAH!+tbL&N{X_ts@7h3@jP~YcqS2S`8KMpg=@q46r+yktyZk38IxGS<_O{n6i(| ziKr%Fs{K_rIJI=>Mj57Fdd`KR(Jg4o`sB%zXU{%dEtdUddj9-*chPy@FE*E?#jSWz zxKed&2^TdGu>`;kV?`xEYOz&!{N1jSn-S?(Yu3?GA_jp7J=?TXtv6KCi*?cjwa``#X=;amWU}Wo9>e*y#@#QomNoS$FLl{omNC-yk~$?o840dJ#n==Ct`+yoLF7W`Xr&GtA5jMQwXtHh9(ACP!N;IV-gGiaCa?PZF7Fg z<}f!iRw656&Sq?d90ge%!VwLdXO>yT|@(1Z2S;WB>f*)QZxe*5P9^Ea_#NDcBm6^2(^e>DMcL;V~9bBrHPAn-82m$mQvC-_oXAEKp`{?I5`oV zJh{Tvg^66c&DIqhsHJ5gef#FkWE-lx8Hieml5-zIU=epOn#_ubM?pgi8B$WS83S;W z;#9QM;>92+o7KX^M8tVj60obuDumdWlk^x00}#X)wprc z^xIMN4Qt2Uh1#9HIost&`?P9w>f?8(QNE2kPW?ag*?XMnhs@1*LY)Sa8az1{Cabmv zbQ>ok1ac5d<-*rjMnr14SfF6psnd=d(k>6>8i~f|a)L(!%%Btzy)Xa??Rno5({KHw z-~Imget7ZXlvXWkrtWG*?dACed2twJ^;F_Q`C^;ihFDJ0vf*#-Px+ zwa7H`)h9|Yt^6tnN&sMDPR6d}9JJKQXHMR_qMTn{L|71VHi&IX=Zh5<+^6!OS+;RS zg*gW{5;7(uFANZwL}7#KEK*N`PR4o{_p;i+#G)AfBv7a zO&KV@A*X-!fBzBVzh8#MZ~qtn@T8HJ(Y82zEUUNepM3hMhGwxoINjt#;t=v$buo~` zikVq8PmPKV@^E0)R0xif0c^a(i`0o^0M+EN(4m0xs2E>wd-nC*Swds@a8wbiPA2Xs z<{3=HWI3}Vu+~Dk;-Yt4LyKKB*ufn4Y7y-Y`l!Xz`tUR40r+;21YHC1oe7*C=} z@Q$bMpu3E|nn8uDRS(C+E>(gBRIetC5P>O4p6)t2RE4bF+v)S5 zd5y{4D7nr1GwcXXrU*`Tqa&X2u6*+QRhlL{oC6_b3M9r-+%t+X90Z0H6EXosE20$4 z8kUvevFDQzj+gOZv1o~cmRJg-v?8vms%9Y88ZT5hydi}^FchO8f+$fjHs)>d7pHH3 z@Zz)QFJ7LWUv()1=yP!+Y648Nc0|-R()Xtai}>Vd_3Yu%vy%rW>!#(vRI-~IEtwu1 z9qUPRe$~Htefs)sIxpMOUuBbaxm>nOBYS(%x$5QRVzpcz9PnzjTC`~)K_bN{-PNXv zLJrMIjhiM!Zi*MsRS+hJx>*4ciG&~_Yle{*n1Q$uQK-`&#v*|tkr>3R#)X|Fv}9`u z$8D1i!gdok+skb)uP+hu8C^NYDEvH ziRJ0)2&O#{JQ74aNU72ChnYl|Fb1PPni-Cg# zY7m7<4dyU4H?J@-2S61wIgmk}h#ZzpiH$`hcQZh*ThP6-drj{V-jxRM!iwhYhP zv)IUDv53+L8^~0Xnh`Ir* z`@Y|9w|!3PiJ2)7K-=!j-J51{v_6Q<(%r2Ta!LW!rq@AE}N5+ljGy#^}(`j+eQL2Yt~(6EVw(i*^snpkIX!qIl#;!82C`6rF6B{ zZ!W2n;sz#%hRQv+K??=E5gzqJne36(RUa@SV;G>UP9R1F19^?k*7&G%C=6$1 z&&*l=EqibFYfX~ehy5ZVv#QRy+qZW2^mMa1Ba$W|(lX7(CQKQSWyudTEJ6NL4A}pR zAM95@2!bsUkSW7{uxSB?ZJ37S1tN_hXX}~%mb;#%Dl;PdkXd!=-0i!!dwSLme7N7a zb?a1RWkp8D_KQfpgso67l49tE1`304rl`bDoQae7&=H@F0nWex?BX>A?r!WOux&ZM z+R5rEdUEw@I)UfNVBPKSRQnW}7sZ^WIIB!n5cvQyvH${=rD_~JM?k3cGrFPt~>ebe?bty`@yr%fdhU=S*Ne)E4qbtRqp|e?w-A$xc>Re z9?`fKe6;jvZielLG0esqEMu+Sg0KS#mjWpu0#n6FOfiR_eY#tGU#C0_FiWZ~+_U54 z==n!qlde%p0EvU0LFzK$7{@7@o%xLOU_ z79=7>nqdl&k?D-x0iODy-a-2UZGszAx}F8{75%J}`}KD`r{YjWbp(yhX(uJ1)*dXm zHr1^NrlOxn&DAU6KracHD2mdEMK6WVueL)BEp^c$*)H=k|J zw(E=YVV$`jV&1a3SuQOh%R^W}woqw>1R5b$jM3ZWH7%?1zgL4}z7}fDq}lPkpP2nD zE9$;=^c8)%G}VwWJW2=i>J~H?27y@6NNAdFvsp1nNZ8##%mUA3%B*I|au4AUnkJg7 zI>cDXRh(*$lqo^kDJFI`q6{MAAv2c{i^YZt?vVsAcQVT`Zww4aZQts!3;?DKD?!f^ zaxICy&eZokf`qoqB5Sunyg5EPc=@b7Iehcx?dt3TLk^(Jv-7rFe)P#NHSd35O>=R6 ze)-vHI=kX*#RFgjsnt_a+V(ivWX2TNEJobHPjDlr{Z_>9I=gmuE}j6ekBfINZ05AP zCKa1_=dwgOvt2aIG?sn2cGy$FbWlfmxAVksU@#A`(Mrq&qlt0zr~y&sKb=?#@iH35^7pYtEhxKnOu= zyvoTv=gh`hdb-V011Hb8nQ;sxLLy%J>=H_eX)}WvY@T!MK6`5l7@Vm1Y)QDO{kK5o zYFRb)mX#W&@jYqEu12nYxB5~CIWwfouLp+*dC*P2&6%W))C3SI>~h#_bD}^`pFex~ z-jk;F^Yio<-+GlUx0|a~e{q5BK&s@#x%TQN2bn1xrlktD*PQvC$lATRn@s+B%2WMR zkpm8wF@SOn{=2^`QibtupO`y_{&tVLzK`+3sB|{az4AtP36BWl`ssCZ5 z(@UQ_O(wpjQrq&!h3I`0Id&O-K#jKhO;iuV#q0htl@`a$iRJT{7pm)xI3uK{k>^i; z{SW@&fBn|C{5#*<0+D2Wd4Wc-HUfEe4B6Ykn?vrJ{Axvu*1L`u$J8#pJw(?bbO

D;K!47(!s=rE_5wO!yY_w?o*y4Se_Bw>MX^+32bDzRS;EPqikg}h8Le{4TVxkZB%wj>`vBa zUmhH6dwDhVPoF&hy}$JztgePn|NB3|+4qpLInLMV&;G@~{BQo@KYDTU^56OQ|J^oY zVL*d#Je58_`_`McmltmuSsHov^3L3q+(1U`>}6-0mDQbt=P^@dtM_1(eN-I2RNSEa zuqse zG0@Cv*mJ^|`w+F}Ui@?DLvEmo8051V}5k~3L%OhSb zYtGqnCd3c|aZE~s`X=ew`tsAa7e9FW_Or{2^YwP6uAl&NipEY(ZmO=4Ntl<1&5PsZ zM=zd!?dj1;yJ#o}>)pJIF)^95LzOZ$u;Z=`e$eos*|U;s9x|9%f=Jw$_nYly%I)R4 zZTMi(F1ogjp_S0Ip>0}Pv_*nz%9iZlsAcBJ!Z8RWo8@5`a(;SpR4~B`FIoq=s(Vgu zl%1R?Gqq8e0O3F$zl4cs7%~GCtc&8lJZxgWl+EBAQ=e_S-K3PHKy+1SXMHoB|3l51^=0%f8nPo5Gvhv@93 zYl)dsNj7^8{zKd>wNR4qv%s$4nztx%qBu&A!kXVIg6Dl$*N}7L~*t4dX@TZY$(PU zg2WiqYIi^Yr9DR()x6j5LnO~GT0GCfA!}o-QZGo(L(*JIL$_@UAfmNw%u&j+s%5t-t^l+vzig{2&n^;vx7mw>6bqKuxrD?!NFp&h%t^C-aC_-h(JOW z3Wb!_-KVb4#jJF<)oN7=#ix|ACZAAikFf&wE#+H4t<|CBT#>SF@ZiLmk(qi4TM6qB zH$hTp`oM{rL69jp!AkM@k|?lK1jcye+(TZ1z_kL+q_NxvvK^J!TaMrS>DPZ&t!LDM ztvV&GM7Zk%&IUOfUH!oON3Ic<(0z>-S5+z(^I#YK-Cga+QLgn%rXOJdc&DmjDjj*B z0(lFf?p~VZvngZ zPqV-7ec|0>*uTN+^>)9Vf0u&dF=T!{=A9an_uU1N{!jf>>-#R zFrHnL7@)v>>m1ImcJHP;^VVU^-r}m)5z$!B=HBto=ivcUa3?>^V>o5xQ%L(!bmx3d zPr4TduJNM%_v>)aU{0#C2!raAXD>hbArf&7PUK#|!Xc4i^Up z4awEz`Pr+})%lsOGjgU($YyRnnk`;^cl9xdChyj0aNehM+_B#8qq2ab2h9PGK3#g=@D?11*L;@__qb4_TLg`6qAP}hp zB2ocCoW=mKJ8?5|vH<~B%FkFSTV-Zki}Zns3@jmJ#)>ov<)(=T2ggsJJUx2auX_FN z+4{3r3?hRsJ9_WM(KkMk7%tB*PG7xVpI`W(Y$$0!1z9nB7d|3yt`|ogV|ir`b@rCw zbt4<6d@oJvN1kymE0DG-H_7Y zs!4nH*e#Dwo;`i>yd&aFmT9=!UcNoMJUu&md)}X2#!NIAfGELWIV*#jAml=1MV6KL zLrS_@ZNBy0Z&S{L<~|MEluIB?h^V-hsxcaYv9cD?wcWe?CZ%doIWnfkgUF~>17#9v znx<<*w+Ky)u^luIgXNq(7ncx=2#a^IX+l(0Q!Pa~3Tu>Dl$lu`0F(f5Y@-9_K0aD~ z1&uV!%v5GOcxk5QY?h1T$9C`_nzEtYl!OB@L^u!;2}DFf6b6}b%9h<#H7CH-IlH?h z^)U=s3NBoWkkMGSgt%ldjsOJWRqBn{7maM>q9^&uL%Wp+DS7jIliLC~xV$Z#j=qy7Jk9 zsWec{>?);(xMEg#bc&6Ycx?3d`CguT^$_uH@3(1>_Hjku@D)-)Ayj-`n0ZBwsKg7) z<(!zVMXw)5cgVv#FLUkuNnM}0v`XxxVhyQI9`*&Y%V^4#ng@QjwqwS2m91-+zwx`j z|ARmO|GxA6|JsMNIDE3Yd=nCqtLqv`F{FIZ=j95iqr9YcA&ZRG(Isyb-Qb~@rZbLp zn^i;3nmpuHs8Z1OUnp2grEBJN za-hz+jcE&`I~}-Yxli}r%g(u`>rLw4_+c&yAFt2v276QU{Cr--yY$=p&!6u4E-UeV zf5={^_W5NWOk*u|cc+TLyWdW{-M*HwBm~qs@&b&95+e^ugt-==D-kvamqICI;vx;CNlNGa)%n%t z&H2@5XXl@OcJ}7-Vr!;^Y@{{$goxNxvnD3*+HkyRK78-R^P_{WJv)A~>>3c|9>{^f zBJ41SlCvvCipK{}4i^{8F6Z2*Aq`vA%rItlk|C3V)Zj|wQ7n*Bc3VDOdTc1hz!oJm zO%o+B{Gdb5NpmLVHnyRO3{o!{Q6RXvyJdANrIOW2Rdd#yb52z718^+50Dx+|N^+DY zQqysFxV+r-7Z>MOS68K}M|tT?1ot7Ol(UG%7=sZjI68@yxL4hB-Q1m+r>(dye-G~9 zAmr?>?(R@`Q70=A&645BrFPf|?#xW=Aa`?P5L@Xx!aa#IOXG7JkI zlmvj9I>C*cVD8Q(Jmj8XOfCWzCvZdn5ds(i6f9)(oZ%$^tY`%x6Il?4xQT&X2xPf8 zkP$MOh`GCqp_V8ZlZ?cfi8(TJchs68t7kVgQ@FDX%q#b;Q?E7vxp)do8$A=IlE9|q zM36|-kOzv)0XchZXHYrTtn3)d%)-_*jeCKH?DU`g1nl`fB6u zYN^x(GJ7sgk7^Q9OekETp50Zk}!l?k)hZS~k2agL!Nkp>QZpg}?sQ4X2e zh?LEVCp&`f+eL2MPs;}6`#Zbu{r6BB_oLliPz^c2cKd7{;=O+9UA)6bzlYt|eRvwU z-?T0sIwxS@e)>ou5UT&s=!A#$O+O{`|j( z*-p1!_pbMQBl^4lM1Jku5F?m+SBe2SA3uBc{Jodkp$~1@c}N}33@59V9N}=t&Q>e# ziqX9bjLF?)?_&=cNF)YiM;ed@b+v8EXK&v^&B>jiW>&Ot|2*&a%cDp0!~FOIRENi2 z|E`4ipKm!vKdevWUZ0MuKhKZD6o>fcO!AtL6+9{>;ctd$ccX!@b z9e-T3FHdG+>7VKS;wMM*Jmm-R?H$C-NtMTIT2?b-W;dWB&4iF0aFWv8!qhG0VHijl zK{QM6S)!1exG@4b0#PYA7FDCOdo}_=z(geG4l^$UW(AqLGnB!e#yo|cH3CEF_X>w= zDb5Tgh7-l^;A*=%?}yOFqvy|#o;(!_tG5@gzVm&(T+yoE4#VQv@q3?qbok=wS}dQQ zUcG*^KEGo1CN{_k$%|#VH@&nM2c35Cd8XI&d0J@mSMyUsyI}Rq!Ew(B$@jdcHkO&% zY&K2Pgvb&?DR^aO4!^Jrac-N%!SeV7JtjN=03ZNKL_t(w(H$+GzI=B4beY$*+H5XQ z&(7YSt}iaru%*N;Hx5mn2_SN2LQVSiDFK`vUfQLpZMWOk{g!q<4(8&cD@7-ZJB`Rj zP?r^~#O%dQkrscl$6RH&*EsGxqCOLe=kIdKh(GF7Cuo0%G!7p%Z;S3(W=Imn4bSYqTr%$$=G zoYjfI>P#NN#NuXZZd|Tr6TjOfWDB#^5)s9wDu3Y^ zW81bd#yZJH)1Tldebv46<}vcINm6hah-0_itd>FA#nEcB5yywW@~eOQ@Bf28x%ljd zfBygacfaG7Wg&0QFaFzq_9trTKl#u8)35#VH)Gc{j^{+*eD9g({5IQ4w~2@ljgdWg zDV4);B_mWsBB@kuVM5rD)QzCFkSXOH$Q^~@tuCfJC+JJ2DGrUwr9j0c-+lf*-PAq4 zh#vSA-A|(pb#tB{G1cs)s&x5E$ueY&(s;~eZXGi}mJwGYsYk5fC?5P3|apYi^lc50>qFCr8ho9e(q}54tFe$d)ymk$aGag^^QL z_RK*lBuxm15)Q%v31`z`7=}J)9dgd=j3ykE?%z^cpTmcBZ>c{$yXqpfF|ra)43Nuwf2%*OCX~S&;_s`@Sz>xrCyBn!!xnj98

-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 D&xbmH|MlR_-&Nmc>AP;@(hOs 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%0A^dj(qw6J4yMk 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�`}pTLu8W6T+=M$6Kw$ZVQ`-HOkDbp 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 (0 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ΝV|xd0R~<%lvF7!Vy4AA1ky`A7=qpq64s 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 z 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%0AFex}N$RRMxN@irt#vsp`Nmv4N08>sn4Blt` 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

6sy$OqUA`IaoQLQ5do|MO97QM;VP|r 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

HaLlS&#S)@? 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

B~)5HC}N7LyMQzA-T zY&~I6Y`paHvp1g}J8yUI+}+u|2ej-+W6TA%V~n%u$!s>ecjxvme(}Ner=NNG_1E8g z`>p@xU;Xn3_uu&W|M%m2w{IUG9nEI5 zAN=V0v#;0Jo`2)F-rbhbEXeNkaPM#t$&a?TpW1q1VbsLbwAwaF&9jKOoNO9Oh(gPg z$iRxe&J)b_`^Jcj)i`^7`l4~PazdPgy?b3xGfjx0Ywik=lCjea^U1odk$qb0zgc75 z&Wj{UOhlfLt2KieAsAqsV^aI_(aNOb!l1#BEE;JtGeTrTA)>LBM5VALonsPxk`iM% z6rT;r0vvhu^)6(wc?2PfD+!L8l- z&+ja59qlKmvuoxha=+h6fh8-9mlcDv=Z0vRv51z=a=L;&mH>emG{K^g!8@viQiE`W z#UbKeph>Xkj2saPM{VdRO-bgZ4`Q=!vEQA1)ZP2P(A}fOiFGGr3qwNy!!ZeZrmh+i z*m9RnrR-|9meL6q3?l||diwLH<+A~t;2+>8hB-GFn1|V6$1aUWqj6Pl4{Ity*Dji7 z9=jH)^MnF^b1)j0^|j&Vb}<@c#7r?)>;#!Hnxx0`xI1YMr(xD|Ob#a6nk^KKS_1^O zWD?n0rcfZNs4)bV6q+o75(LiMU{qgw>gM&Q%i%~J(e4iB2WfBjcybVRN(d#|(xQhN zMe1K!vi~s|1X?3!vdBliDeJ=Pw4g~Tho##sY?spm(tXxxVaYaJf*35@hG{9<}&3d&{S1w`eSFPqwL&?~2KDLyhumTie zjtJSuCx9X`r3eU8RaN7`XmebioX}*3VkKoYayLTtOrRan8BYS7kjOZ4T=4sT;noWIQZ~gQ_m8VO@->vaICk zr#8vp2t*K1UBizK=7-0}x9{y79-r**9ZVNm@3EZGDT2hm$bWi^ZIwc{myTH?;B6u9BE7;bp+!6b|} z?BjIx=F~MIgr;eTXgnU*b)C{OKj(#PQW<$yJ1sA7y*p4sr;B-P=BbM?IOCPhbXKEU z#~+MgFiK`-YmW0|+H~E#ZRTymZ%m!BU!x^ZPyvV&c$TY$?WKO zKAkl%XOuJS_GBULBQN_75vWfW)n~X_Zx^tFbC?VPM$1DyU$0AdvYzrgNiUfBStpN| z<0_XRKNqjRyjRNrmmG~0iB=xpEU)@6EQ7!)(}emh!o=cS;l;bHYuj)_;kj!eY{{Ey^-kYRwQMG!hZB zD6!@OI9Wo`sRTBD{5Ufa44E#E6=7mc1{#R7%*v2pKIIq&lPr$=<+W1P0EPlBkWPVm zF~F3ds(k?mCKy3j1jJkpD__;4(P%In7DWLujVWp*kTDs|Rs}!EU`wh=FB#kw@*%I` zHF_1ORfBP)B--NbwX!W1hIC^I;db0bRac-UC zI<0elamD`r65B;^{PZ;a$JDMKhc9@ab06%Iln$TaL%p=w#XJ03w$m6*?TP0ALI^QN zGsnzJ4B~HLrIDKDLXOE`fP%%qAc_zrM{ba)KAE=4lf5o9Y0>JuMIA=vppv>237Ux5oN4Kb zQbq$$*M=L5wmm#*_K&AK`}2c?Xd05XW@SnpAO>&dQ=%9d!2zS%IiW@3NS4H6qLeHq zghXu@a@Is;C77}p89(6y6tLFuYSX(Y^*TO5yES=$IPtjS`l&1 z0Z1vdZJS-c8Go#*YA_g#Mpac+BHql3q6i_(=9Bq+zF4$v+s3G>3S(M%k*Uw0yarI7 zJLQc|p|Ep9bmlj!&oPFK9`#&{9AC(!W)Na0t|&&M(dPEnwQJk;2E;`G^J8v9Oi42^ zmiwP`zgtvhmrW#96)p{FZHmv#*Xr}>FRu_DSIzt1s>sy-2`r}(z!`VeXcoylJ1$B$ zxKVAq5a(oW9~da+z4yji3p+UZXeM>Naa|bZZiG}r4dzrVSDIXVnh_wDl$T&!$i}ZD zu4Cw8puy(z(=cfsOb#ZWess%Te|hlTcb@*ntNxGw&A)!>)o;K4=DR=nfByUzKmPH9 zTX$5GbESm^F%f7snG-wbdR``nAq-JBfFKK^*`&h3xq^Lf(tV1GAu?Vv6-B~^8<*xK5OYO=DGvB{||Nh9go2%3R5HJGCCBy580gE9bY zBxI?lN+AEGw=hpLLg%nKG6gA{sYNqo2(dXZu`#m{7A=`G0DS=RG6=<#&YI8Jaxh_X zAkKwGmD#`yQB-8efy!h=nyUa4+9FLE9n^9%1F{55WNJ+yOB?0r+Qt|O6SUFAqIAP* zLXLWghNau8%WFeyRoEV2dx&xED@9?o^HzAUL#LR`aM;-|?hdwx zFYC{4--askC#6al%F%3kJ_Aoy_**#IO<=|QI zV+R*ZpaHH(eIBsYO5k41n5Lehz)%3^Kp4LwB?IRQ>zpXH0U##FV%Da13OP(Jwa;vC zRW4CIN};pRvZl&O<^0GG3UY%wRJ2NGYuH=o4(bo28W3$}aR%6?FNIUoT<~s;8gjt8K0M*d4 zcln3Rrs(+%xm>ZDL5!5l3@Hj)hlQtk;U+a74g66p`=Sq1xS!fx;KUi6ZAq^zLD>?x zGl;T6$q{QyW<-HpAlHeyRS0B{QDV)vXQ#*anoYL?oBJXPd8;ZBgA7DW2__`4Ts0eH zoJEB7l(ED{gn-mUh10eu>v82OskcWw8}MKt8+F*I>H3DdvFWR#f{qUl>f>3vx4(FF z)ErIc^U!wTq={9OfoEqhvzVnu1Y6`N>{1RVO)0_5M1+N#5F}DEiAiIUWXa%?hGlBi zj4LTw-l-Zu9SAC_FmXl>oFfW7i!c1BEUQ5|-q_gK+_*6sR?poioFvEO#OgveN9DEc zt<6!^))6|GVXm~ddwlEGtvjDST7=Yv&~-{&IVp*KQi>_A5iGJ_%W#?jB83ZD+ID;o;%o;o+j004U3{s;b3ev3}E)2K6M*J>v!7Q=DP_ z;vAl9X3jb4ORXj|Yr5I<&)oRlcfRq>Z@js+F=!W!X(~OL#T8_G=Kjk7Vw~D&3?QWx zW9+()h^nf}wSHBJu=XNnEw!wm(Xs)opstOJrd>2$7n3Owvw>5zbKhOR$x3a`v5#tM zl*=URyy+H;Mb~v|M$ATVj?2;yNA;lc;&Sfal=XizVq!qLt~oxLO{Ps3VMOOfvv-kR z7@Egh1efX0g!A|Q;%)i#wV$^3sL$WByjp*$b6UNsf=HZ8u%revW>*fX(P&f*>Y^%* ziP&W&C&4r&g|V<@(Z)-9>$#}AzaicBigwlPsM>1%32~;Rnp%pn4WXU4i^Z&6bgC*4 zC#)7>eR{B*3cgp&`c-i{zm(_qOEMU)>OX@RB;1o8Ru`>?adnLm?8_U{i`dKGfqnD^ z+9j*#3)%0#ZtW}{xc>9YX=lvdwSD?|pCQtxuTQ4QG+EB<5EeaSqxY^3wtBIrzQ1yqWeFR!BQUw++U6*2c7#gZ$vCC-k08UQH-uX&CWUJ*s*bf z!N{1QWPmQC_E(*}GUxUs=gVW=FPEQ3pTC`RV0?i)e7XJks{LlQFKhjL)pGj+4q%4q zlIhSVW(1bX`dQloz?tZQ{`cA2eEsG7$wi*r0RoZ$fWc-krs zc*TWThx^z2w#J?8dv!5l;PElF7ugo;I&=>@(=rbDlJPt<=nAYwq>;h|w7h`AL9}h*k^E3F4_&J5dYafu8;g<`oA7wc_}O8@#A^%9J|P?&6lh(MAp~X8OG)6 zR(9ojKC>Qj&)0XyRZ(A8wF~R>%;&XOYC8SvN`W|K#jg5u`ot@uia(pHh{wI}`TJkk zFXzW|c~4qr{an01Ew8k-IAHX!%VlkOHuTP?lv2|)A#^~|*IVkZ;hwqQcZimJs5O+W zx7pK${-2M)V-uVveuFK6as{h$GzV9j45lr8x-&Y6N3*mYh-r zj4Ik5EVhQ_XfWFt#N)P|&YNi`n4c(0a1B(6WZo6rZE!UlIA{lOB1^2wk{l&<$z+1Y zhz%)fOo(KnB#DK!P|~E9l#`;3>Rs?0Rjm;54&J#O6HM$h1&gK{W9n4ZEE178X6{pe z!E{YNab#+@~>-T#hn;h8zoJ*SII6Wh>CUoS)rO4)TR@a;?iCA+Ns6VwPWMX)A!A-d#7tY8*UU^Dmu0yM`~`4wa?-Z#Y_^!s=WP>Jl}LJ4 z|MF$~Q2pNISkn#8oVM8j%fQeoj=``DUZ&oH%osPEfE|knh*T{tP1rZBMrl=n&(`uc zEE80m#sOcJPyQU{b>_q8mY<*Rd@j^-0Pk#6xkN#Wdv!yuY7VHQ*Bmv^oxxlcOExx~_c) zp-Z`jwTwr@uImFsdboeEfAq{V&w1|$gQ53s_u;Mge)iWdzVO`3ufF~I*IzoB z93SjGoK6mNLh>9f8KW|}n>U|+^UXKMn+0)G*7fFgb^XQ=1tA1Az!DfD4#t`^#RPzy zw1;~i9qxVj-cMe7>E+-0t?$46_BUUC+8Izl9gX+HV*$9wlb{?YYkUV7&FS8qP|^0Uv}LP^^r(tms;Z(Wi5)q|&a?Nfs%)d8YGC6UrJyEw zf>SuQlBn|F7D9khYPFk$rnL|~sl0pxvxrZ2Htv7;XgY7C+!Thk0HF_rW{?`OL2Vf= z3H12v8rIzF1H9Vhd8i#o6EvYBcm^qAL-QG?`>o9sjhPu-K_E7x)EFjpF{}9)?fu36 zFXs>6!`>&D-7~jKcAN#d7z+~_5-jzeP+tC20A}#!1UWhfoE^HS8e>n2XF?yYXem%M zAXi6F2*V{~^x33?Sz>|;Q-nI;Q4|c{X*4Z*FIS>v4L;2Q9HRDsx33YXoypvECY>uVuFJA4TsbO$+E9|sK?ckSu|*Tnb?Abgkh?R( zL5JB%3UilQL2zizIVz!c!`PSfnp;yfGmkQQbSsBnmL-5G8-006(0?Y zY3)u*J|x`_JPkIFv0-x7wF*y6AXc(qnv{Xyz?PI_;;1e~Db<6C#1xi23;hX_vNfuG za3uHI!3rv*xV9=YvBv?ba7z+{5EOmLm;h;M>?r!fj+qUXnAEe8cGe~KzIHq+7Fe5M#gr)3~ zwK2ieOobS*6oHVGlVc;cXfbMvs!7pV5@KT3eoZT&OU^$xCK_TguoHIPdne8pzN)Hf zI2@0L^?0x`8V|O{!$Iu}X$H059FIrCYEadcm&$<+UF;9q{ljqk?x*+eKRP-&?jlc` zxrjJF29qgbG*fSInlpiu5mBG#fU*!}&5#II#o;2bs{0F^ng_}N`kHVT@C|}Ec3>h> zMT}kBhPI0jclO&ZcA-(As)qoQhS_4?1J-Bi6lRrWJ*td96M@e$*~AR9K6uFpprWX{ zu1hH(Q%Xz$BeLh7d*(aee&_rD^n1@e`;^5+=oY1?!WUf^*6!-^TeAUhrUqjoV#bPz zo2@f58xDtq!2m!Af%&ZMjJ1W@TjG@OLzI`2P3Ngupo5RYuLy7D|Azni`n`&T_U6 zQ3I=-v!{%EvJ(**l+PiPmvs69zH|u$`q(X#O)<%$HEBwkf~mH%*t znozmOMqAjM8*ut`4{p=(!R<749nby3=j-t zv|LeH&0O!#6;{j&uUmN>*VfO9N=xT^`^0!%KRy?)x67~p?Df3#9?=)VKd-8}h~-FT zU32A!TgRIEJJ@OG?ZT*DvOd2Uo@}SRwI{hA{q=M%BjZ)}Y@SxhcpVWf-(_{>svB31 zrxK!Sri$j|&qic$fD17eb)hVu?(BT<{;zJ|zO(aa?|3>}bRxbI5e*uf)>14BSC@4Y zW{yE10Wmvrg#jrAHX+kf$l?^>y{ct=Ro8sLr|(Xj;l3qGKtN{F+WMfM+GCg9zO}5g zXMZ`9_V7Itk%)+h_r4m`gR1sbSqv*<0aQujlE$=j!JJJ#*JJOw3u}+JHErRH|K%!t ze*N=0a+|+(0S|dRKL6SHFr9hImGZ$Z{P7BZ%~~FjOYXlaB6jLU{$luiKF;$*T>R_B z@m#&p*$f0<8a}@^zh`u+$Brj(;agW+e`e(@dqM!>g{A&^$MeEkJ@c%K^LxQRc;+^r zSAId9OC$gQAOJ~3K~(;xw>AIB8Bf#NIIo>JzjhJ8zu`oyFRiV!jaG5MI5%!jK+szf zGf#hWmJ3Fwzro`ooW88K45d2XpD&lc`Rm`-0%FpBy$#qadgO$vIcoG8)LR z7GGLj5;53JNr^~V)OmA$aAWJ{%dcF2;YF+5A^;2)BxsU8%PX_77%K_|B@8P|LW|C~ z#4*OCFip{H8d@(_kSoOr!-=pOv=>&I6bxq&LLpLd}<4{h6qF3v=n zB-_rjD;+axmBJS>0%|E0bx{mP8;hrJ&JSnPgQMxrNi#W~98HTx%g~Ns1M9}Z6pM;n z8_gx9lo(`WCIWGZn5fPk?lu`xNE(nhf{_70W+NmLs3B@1i^px@Wl;I5@Xk3F@ns41 zF$9af>8pA%rTO`G6*=^32Jz+UQ4YUY?zPn}HdW-BxG5!OF|#EkY?2R%EW*{uK&I9w z@6AU*UuO=0_ukC9u3Ib?ZQBx2UDtJ8XQyvj6=hj6Yf5Q8pLbn%czCR;F=~u)^+qY? zJ3csQ7V`m@&K1I*43@N6bSKBtf2lO<^NlUL1Zk~Xx&%xOOv$*75>gR)lgcs5r>)pPSAvL43$kFX>MojMdiZ`R zTi!oUv}Gh9XWRk-#66}%iY$@y?^!}|NZ~=!$14?pM3bf{AH4VTjo~%n>cv;y{@%C0#M!`R%vgzJK@Lt&iTnd;8AG(SC~EVu3E?1sZ!u z*Ak^Uj4YnCJCE+~espyA{i7FNdFHuShMP~l^V&D2p`FYZvxQB=VF-hcPgusnrMlWs z844m#!p0JKX%F_c7_CVQ1}ngn=^x8USj%K)+=~t)%H=8(z@(~11dYZ79rRxyG9}AN zViTDOh@e7A7(zsxL1l_@R*EZ%qVUdpUlm*yt`smy;izy@7F-qL3lf5(ICNW;LseDv zfXYfm$iWy^S4N7Vlez>&ip_=?{(tt~v`LcWxDtG-YUW2oW>(hOHyT$TXaFQZVuZut z2zNj12g=CGeps15us?D|7BbxBu}g9Qk|01dKy(8j&}SW4l~-KuZl3dJ>7JYUWXGTdf2lgOTNx1+-bu&VSDKS8Uw+*>_R?6LK zxi~#r4vT?TKG%3B5}KL=n}{f&$zeboad#L@yvT7-3Lcjv-*&DpxslS9qXPN@RG|O@ zl{~9BEMc=)_a_6LDf${2;5s6Z1D0W36I0MdUVpH8^mcde2YC1nx+BmM+F`qgWgiuQ zg23Y}%$KR`uXvMVWlalY(lJs++T$@kR0+D$xYgrv7r2!zz2@pqsIX36# z5AVfWue8++Tx-r|YC#IbtsHz zZX7vyc2;9GRjrgng@b4&CgXAW13|_TrNyfG(&~9>De}>orHlt=IDBi{%?4pIbM`{r z02rAVV-;&Mz#3tZ0KhE6GJ~U2Nd114TTOfGTD-L%4%=LXK9a!}driDOYhJx`c(%HB z|9JJ$gY)|<`r*gjz4LC__0GZ^vk9?qtg;W9MJ)-0$O6MvEoTl+Buv50G`oRHwOyvM z`0rRDj}$PckX#41Y#<6zs@Uw+ZCh2%!NI}2t@r19`+M!YX=iQRYn!@~y+-!h>e~MP zwY^vu2Y7;Ic*29z?%w@JAKia+|G}fP<>1V*YKb#gj6}1h!Oe_`LkN!p6J$hwNwDYq z6teH-W>XyY_=cOT*&| z1@M>yg-D-zmaWW1 zY+x(K`Oj=y1+Y%p%6>>)*Y$m$G&@TSp;%q)9n@`G#VCNAXR^#pEUZIjirMmVlNO6r zpE5i!$06rkLh$yvOpL-Op2#P}lb3(~>b9;|DFQ$1Ii9+m-UiRxeF5{xx>n*?S9^PV z&3snZEsH=TmBcNRP01!EE;T5qEO-vS&;VbY)GuQZUhGnT6*2c!L&zNhB6D*$&3Q;e z>MW(@Vv+mKl16X{fq<0qFbq{yId-Rsr{H+B^L&3*+l6Pm0zMi@pj4~ciXeBtFir~Y zzp4>;m2~o78{Yf0@%%Va_v_d$UH{Ho|Eog7uH65Awl;0gFSjfn)XH=;Y_` zz5nBPe*RBCd+*_+6IVuvbvw)I{g6pbM3{)O4!R;T1QHNA35QTOZOus8hK_c0u|!04 z$x7|<`@#+mf5lDh-fy1%>|%a(0Hvx_36~4seI!-rScjOcIQsEO-2@;p#Hy<6x~}Wl ztZCa;>S~>O66O$C0B474cJnME+ik>U-0A5ZJ$~oORp!~>$CE!lTYJiRpFqMt!*Twb zuje=I*Q-5k`~biH^Ygz{`xPdDcX$Dx=2?uO_LDraD{5|Ghgc*gZiXQZc%hu!adax&&pdy@P1sm2?o=zaT_&-{M*8^Yr} z&9UvWR|HS(hpXBpE{r|#nwOS{{yI{q`if9X`8f>}BC{8k5id3^31 z&PNpVqE~ayo6V*q(spw>1aX`4z#{-W(T_jP^*{b(<m zQ)GanH^M`#azfIaJ$Gh3p~IRQ78aSM3d^Lr-_G{;`ysDxSh#U6x0ZRizWeS!EslJWvQIdHKg0t-S2s$^#7YGym@k?-h$FUIFK`A549-%s7#2%ssk<7G=xHtaU-*hi8F zNpZd_DZgS&N+5D2kYR9g9!aldwikCd)s#|7?(S_fYno=(wpA6?ysE0UZ9@pd&@C3L z^TqLcy-tH}+4szBRw%kw97%WC41?swto!w9k@_KbiJh4Pz@{)`aW+HO4QFSI zlv308F~+)S>Ka5&Tr$49SN=rx-zOaup2kuA)VtqLKYu(({P{swEIVIa#i2lAD_QO}|=q{qgb7-u+4QyKmh2_g{~{{ReMdzkTbg zUwh*(|I4@D{_eMb^3xxwrApcmLQYAzuIqSua_(lt+_v-8YE?qAgSkDp_rZ6*{Z}dD zcYe2f<@0ZR?JHlq{oL~}z4XGp`*-i({djqPx?ZmKX8T|I;v28N`h|mQ?c4AC;Cp}n z-FqLufBV*ruYT>#n}_Z7AJ32O9i5y!S}r#LVp9{5W{{?aQ%=aK3_f2T9sl{C{>68` z{oS|Tdg}{c_`+A;di_8C!8d>Z8?XP<&)$9aM?d)B?t}ZM-SNrkaDL*HS%^8AI?O8e zAWEpa)UQw1|8(-+gP;Cjet7HAgLm4)n>TKK{`Rex64l3x{PFR_ljYIDomV|WJ-ap* zYl;|C@&Bg28L-#g~29RnRg;0*GZN=#_|O5Q7>%Bj-iA(P8dqfvhug(PN_y#eEd&o`$QhDhmtVOE+&G4Yllb z`03I6>l08Vv07)%)|0aXBnTV?9>~cZ40cM^PldQui#Z948JQCi3|w9^l**y73^I-q zxQg>;-t6sPpU>xYUEjEVecsf2^JYE^^SW*uYU`$r^8B3{lM6Akxw9%ZYu&87v&H89 z5AMD9!Ts}PuTq2O$!X}^sd4v|+zjRnVrNkhP|8LaMmNVPML$l>R$hhO&GXKR{lp&d zQXBs@rL<1#VHh^+Znau1m+MV8#Cnezntd3CoQpLyHBB>mckP58<(;ReD6XE>R25Uo z$Hr0^1Yoo7%}fHBnY+$rvzK0c<;!1w>FZzr+Kn4CB2T#oOoRZ_)Jqg6pXOEDZjp$1 z%6^d>nb|PpVHmRJrfJ%?E#B9U6*PIWvB0dDG?=^PoV&hTcX>#r+0EcaAToD?2+Oo; zKDFxSMRRv|b@*z%9@1cwe-9B!3_*N8Z=0G!5GKHAYl<5=sB_o#r>EzON3?-=(C$;8iw3=aAhJcwyx$34eVSDy+#C2X_Dw+1Q~bw z{7JW@u{}Hf-@%=pqK+4T*X)@n zyR(bLss_l+x<%@T&_n^5E4hluY_{j2uFdj#Z90?!1iQ1n*%d2=U!+kluTT@C{bK$h zBUeHptGJi-aKtTHwsZ#{!FhKlw!(HIAtF!&QK_I_*KMe)*=*J{RaI3X1Q$^vr{2j3 z>Rt|E7|Z``lfRenhbaMo5m~`B(l0`n?GxN`xu5lXFaGM1gX2!0{BrpGC43b-v)MD( zug{Qmy5jh|HGrR@l>PK=H{Y@IE??Cy`g6)}>GIw{$Lqy%Sf6iJT~9f$*MypA9^*mXL}95SBmzN0h=RQ) zwAT;gV2ej5`TT4(iA!W* zh^l6To5fgh5GSm=VKekq-#5){wy)Q~%#cvrmLBiAEq7!rrm%BIPkn0J_A8%fKA}0& zSR}cONEK-ab<%d#$3+)cYE3(%`96q&;FOg-duC+7OxHO5n6BM}KICu|_F#kaoot^f1K|Mxl)9w%dCw=qH-~PhqU;4_MU;6mt4?pojx#kz=sYN}E}X zDkVnOcU}MY-~HQne)NMMeD}_qZ@l)^H^20S&%gZomtNis{@34o=iQ(E;^#ko=j`-> zt6H&ia0ekLF!~5MGQra3=;7w*{@ounhc|A&_~qwb`qHfzUcY(smFHi30rC1z-apz{ zz3h2|dXU>gR*o|BP`h|DNxgc2!Wv5DqprbIMme>HcB zAD)MkGd(+gv|gRThfqll>=I*5=L(J@|=3!fipv>G}xN}5sFX?G2Bqhp#cMt;ym|~rK z)1+xwWgC1ww_)J@y)bKnNJX(S;Ou<8(Y);KyvwV>vJ#Y#Wo}K#Aq_Tc%sPS+EP4g% zLF6!UO&A7B%Q3mKPf~?z^SxWQZXRA^5%e3JJjDC&ber>}D~h`B9Sv(m_KLu{7^#35 zEaD9F!G?hXyE`nC6}MR;=gQ6+y|))mXCcq)OI@f+`85t%(?Q7^&7V( zQM$etlW7{3DXkrK&CT_uYMOfS;{4vddv|S}$~~y}sn3R-Gjk9TINTFi4p7<}6c8Nj z1QRl_X~^n?m@&&}GUgfc3{o_PJqq)xs@mD!{y}@~;O5?b)l~KMYx7wh_UFxBD{WoR zn=otIrV4wlPW^+VIA8Sl?;Rf>pMG@r!D^Me-Z;*j!jPcm9K_Ad6krjlVggfPNqX5xj=)r^=CKzKW7JnX_>E9(8=OF3pX$0YQ9tx&Cue7i^L{gAQy7WJFbu?@ zsw#I^9aNP@dy;A8cOP8?N^~~`CcZZIi(b1 zB%+kkRr~mHO&~EMGa9n5dtG%&Efj6IgG@^znMHVVz$&*0MltZd5a$|PogBq&Sk~RS znU(6OW=3wp)>L6ua~-H+Vsaw_3Bc;aq0wxcZnaph`@Scs;FkL#gc=jCX1ere0_&fp z?Z(P@;`8>y$V~cW&$8W9f0__>N{KVZ9gPCy*I2k*fF>N^h8PN}R5IF(nW}5TR4c)q5 zt^0mciXy>H&7ev|A%wcFyG;T|Kb-P-oJk$QdhCg*|KKg2+a%z`LJ1cnj@hJG&|T& zIsoKmZbn3*jdj}+5oWcezVC;w+oY7ta#@?*C;Y)}i$zQVQYp z;0_bBFv7}4jxrGe>Ef@(`HP;wZQCpWFYptzjwc#<08nh6rpK9~Vv+K9xh* z$`qytv-|xEUqu_AZ&~0gcfag1KaHOYp4aZkzevpZ#n_|bT{QLEbiLCV$Lh-$>|g@v zmaXL$FOEE3TY0~Bds4>Zkon~4w>2BN=%I@%+}3AeH{Xd6cJ*pIToC6AVKyaqN7)#R zIzl6&DbrL!y~1DPv9GpgFW}T}wdt|nbm#7Nuk)gB-M0KMf(uQ($EHT$F{Q*d?R5iN zHe>RtnrYgoYTbn8+3ESo<_n)Y?D}<#P2aDH1K6uN4#P0@Bu(#o1Tdwh3I=;I{&xl{ zidQ562Seg848d(yA%ZLqFoMKomt=mu&(%*qIRDWv9^79eH8(+Zc86yxP;$N)Mb3pY z$i{$*7cR9Su(6Sv8_25=;%qj*ws)|<=#OGZdlADEqSA9xyh^4FLF46 zw!+OIbGB$qfvM%T@z_?f9^yLf;r#Uc?jhxarq0Wi&gRv@bL$Y6X`vHBhN}PoAOJ~3 zK~#W+s1)2JyHFA^nI#S;0YoG;STL%T2)Ayua51xC7}nk3DGL!-A)C6nx&z$1ih-j= z!U|LcG*w+yb^&Jlz8X6vns1+03V{5mBjP2oRBt zL4r{+n&dGHWWFq#HRd41H1-vV#BMXFS{0iZYd3;Z6gE3C1_x>8^BZ?=-+BIa+($Ne zzvY2v6T)(n`<#x?9-i%=v~9h= ze{FAXPht(CveBv=*}|-588Biaa<~(FsoJ&GVY|D?cDS=x-u3&G>JaK|m2-(bIFpV%(NY1;3`CG=iS`1u3V`h* zPl=2H)I>M?v^hHO&Nlsz-h2PgzJK(!uYT?uZ{fFIdFem?@BjJpzx&O<`m_J%+kgIN z@BQ>2`_r>LY$}OrDMO5qa{@;Y4@0j77jr#5d-S(|`={@J^wU51!$10i|L{kj``qW= z`pOqR_sZ?}e*TMo)7`mstEuXvqYu9Ko$vgAfA!}-e*1?253Aw7{9k|m!krghdF7S; z{r#6;eB*`ZzWm_9gAYG^|KY=j=Zn)}7zRWpVrF%7Uza^JhswIevcvn`@xuqd_?y4} z%bT~Zf9)PweBF7ue&B!Xk61yP0BX$yJW+G*x zN@3&*RZ8HZNNn8*3ALggpbK=zIh||Cvm-SKEt3V+*7~`un*5QZ_uqT>Pln~YIR82M znR|*++-9n7$UyOsU^tm>d(q&;!dr)b9jkkW(G=IVAzFDj<9`x?NQlT34&*Zbj4>D! z9L^=`bU=&l!4>F08}h+HxE~jxx$)}Z!QKlGJI;B5MoGEy$` zSVzd&I2u(76=ZT7r?(lE30MOVls#uBa8(h9!J(RnLBvfJBM99}`ffke zFW-Fb<=gwu&9#j=hLw1B?SvDH2+NSwor$>SATH~E-K|c~`;+d$rrMmZXJD{6OhUldrY~K16GA9rIdyYAcQ7} z5Ln%+D)c#7hJz}Z86o$%OT*E<`&}A_Zq*G5mLM!-P9((cTEw|b&QhX??RJ^r4wsTd zc0kF!STB^+FubV!ifyu4a(6-=BMOq7IhiI+W(I+Xz>`{{D%Z1yu`%tRzjgbY-+1l! zzwy@RU%VNpCujkS*`vc86*-8iX-A17cVstr7xrvQ?97~V>iVu9dWSuC`vm|)pNWVN zwA4*TDEo2V-D?AICSxmPJ{5y>DXa!Q@7+Ba7{V|jBJ&c3U@VagcXv=$b9V)Kl#o(N zS%{;AJ$LDcwCRSF5Bt71-&CQFRS%?Dg~Nl{JcNqfQ_8A92vRx1kR8mA&dwejKV0@3 zM>gF!xUSjrx+KhYhyp}}lIt8Rv+v+k7p9>Xc#8n=iv%_%waU0QFtWRnCD>rjW|^!= z>;VtN4iB`|K#!r=goYqtIAV{~LhG%ABh31AZgcw{Zuh;I-C<@a1_A)AAoeJdOD z!vAC%v;SbIss>>)AJV1@Q34IC&0d`MXG>%iM(*;kUQ}&eSBKUwIJ6$n}CmvOVHQv3GEJE+~XJulM8f&$Sr%(h754r;e^ZI^JlqM@3Me7Cnt z5Q3B)F(D9@$2j6kQ?{;*igFs82A*TAJyPber^CvAfra`g>>1CTAG_1birdHWbD|ym zydcS!@kw`pvbzIXSfwCGDG`H6L|j7W={0hI+%8ZE;zDnl5b049-?XvsdpC+PxT5bn zp{kk97wZMQVqpg@H=AF4aR2Qe{`eQ~eRTK112>V_x?>m&4)MqtGwlHk0*$6M95%RR z%Yb(ob<;jttip_`u~ZLKR~|Tc8?>!+J9KHiUJjdK$bFE?VX$IT6hHV5uTbrspJ0ie+hll7-%%9`THbSNVd>nh_dG#0LVVtRUj&G&kc9r@U{cvf#?c{FU zcgE*V-_ox3bw@Sh@^mMF?SOwQZ}KS#6Bqd@-;MWnkMr~gKjlGy$5QZDj1zx~28b?S z!1%55pZ`h}z_^hA{+rVQPl;;Bq|^EofAiTGg(ETZ%2D%c*{)h({_RNne~C5@u$_75 z*RPeOfBcD^pN>M+14c2hdvRBmvSHX(`?#?1z0v^ZQ#C88EeWLA4eDyDN=1%UbxIEx z`tiy7cw>oM@F;5NjH4YKx)p2#q-~ z#d_YZ+vePLXzRnzz4XGHUpjdCxv&pcq%pe$B2VslNQYG&9g$Fn7)Ugu*OK+148*cH z8i+v-a2*WEc9_P zpjSItuX(k(UWL7OFEX>!EK(K2a?_vQzqdMiPz{-fq}kf4-9Nleb=_$iV8-so#_kZf z6FE6@&H*5pyQ_69s9R~8I1hlk8AU*xH=rSFN|_~;9DJ!bXATTGksFCBvZczX3M@n- zQACIcnl)!-cvkZ<5o&HmU<$xi`T%TmC}Wsn4j!r8|7@+CQAA3PR#j8dg20z8eN|O$ zJ8#=oB)WU?OJA-RDW$$I^jMun3;88m6`%g^6KvCIj0r(yuMGRF3Sx&kEmxai=!U_%uA9&2ZQE8=6Js2Pjs?uLohpflnI<5wY~$%dBK$AW zjBMJ;@VIB8Eo{navQb&5m}O>7<&|L8NIlokz`LD=ScH7J})`DwUs0S?*r3R{6OnruQI&G$UT#Zfx@{@ME<>wB;IH{LjS z{f)2x=g(=4n;laVd;o*&{s&3xA{piur$@$5H2gj!U#mI*cyX9eje}A!9Y}U)o zdI^N1qoW7+AASGrw}0>Ve)sy#TVHtP<*$F`&BbE%v!DI!$3J@K!w)~afB(Lj1#xB` z(x%HDxiP%&mH~haX?b+KI5|K1V0HiJzxap0`q?XAe*T3oJ^#7af9vJjH?Q4#=kD3h zAANlPO*^7K_78>z+2>Z3{*Y$oSZH0#M!p%EvpejHDf+Gs* z3Ne5MH6R3L#E>f{76=mtFo8WglMo89YE=AT!DD8UMg<#zZKtl(?uKgQgYEn*A8i+e zx`5$myTL2*FOBLsHIe`@xL_s>W+KEPC628GHsE-bA0036KU|!i4_#`9KJW3osoJ!$ zO{db-^=yBc=)v*k(b<5oU)Pcb_Y6p}o89q0<1t-UU>%-lgHBWm5*7_iF{3OBAOPg3 z0ZJIoF`OcuWpsd7;0P0BSl?S-&a2^iSS;`U!5z~l|6i8w$#SNM;KzI0L_`g%^Z2Q_y+?3sAsmKK#PD|vEv2Jwv zQC>ar>Sd9b1)u~U$|xYO+%EcIn%ztI#YRkqsFYG3rzHSGU=QrVN}YDp(XerD4Yg;< z32IQ1#xqkEN`W=d9v&PV?%#arh8p@6 zPEK%oALkFzox(csz%Y0&zVN?WAfqiQmvUllYIFq#K{!Q1a=}}hJl9xQgW-jCFD=vP5sK_a~9-2_uabd);aZVDrM>Pi)$KB zT|$ZJzCOb#w)h5JLN@rZe;pSZpujo~zf>v?n4&K!rnKs$_VC_^tCN$V>ni3*)KsCV zZ_Q)8dF_xit(PmcRMm(fnB~6T2sh@M@<3o_7KtI&B9i(GQ2~$X%!|u-veB3VocITm zRrs^tj!*12y1L5gZ`waoyV%Y@9$V6``iz{pg!){Hx@_rFPDDeWb1F6s99UwkE&FCY z5Mr#`A?bS`e)PS!-~PuR|McOb^FC?Lg(L?8Na3)uR`V7%BXcSh=gpmiGdsXRV9ZQH zE(!tHQH)`ZAmD%?RWn%DuIoLkWi@xWi!%ri)}&@8L`D=!k#aXL)GPp#LuZ+{81SqH zFaGIFOaPe^!N!;z%uG|EIskpY;TY;V#=5H8x@wwsR>!Jx*yIu7aI+~<_lbDr6Enuh zFxb-BFFmyaT7)yM;>* z-B*X96Qpq2OZ|$Gxa(a`yI*`pm|MP2&n%JhNzHd>(@)dsJ3K7fjmUwq)Ys?+Rbm?2 z4U%?b*(29@Bq@K2xAQ{j>k}LC*;hODBt2Fe~y z!yNfEhq<&*{_QWIo{!lBCST*v)`gH_cu zL7OJGHP>PUCsr2fgUMbtRYobcZ z77>(<&B=@;8qkYNVPg}B5g1KE1DM6W3Mu9;r_MZ^uDxgH%0um;21Rg66_Nv*Y*G1QzE&EM3oUfL{W}wJY#oITpOBK!^9{=LqpDvG2V?o3% zU%PSZ#*IT3>-$cjrD#z}XB98v;`{CHB_nTcQL0(p9_$}f5)>}Z93+T|^s7w|&5+D*QrJjJQYMQ2*&*ve8Dz+k`s$I8PtyX>CuQ$D_ zYEg<@)Wp4V@+syKKBZ86bO?2JqX{YGakeOUcpxV;gO8+1W+EoIN+4ke56RR6Rc%wZ zGCO?!=IvXzZqMr$ea3Q)#mY9D&BNm}OF1RagL>BBM9u+DuG3BLBDoWVVeC(J*OKd3 z)lE))udCH!Hrw0Z-{0TgZCQeJ zKK@|+;a9)-^*8X=zx$n6zx>rNzx9>3zxx+|{b%30`{B=5t8;8Ph8lpo4C@V-Op6$Z zP1qd|?|uC6-u(ynKK{~cZ+zo-zWMs=Z_Z|WAAR)EU;X8O{rkWB_QOZ-A@{@~#;6L- zx>}w6{O4zP@7_H;JiK$~&W#&4_V?R6cWzy~w!iMzpMO~0QsGdM5K z&dVJ)O%tRUhT-Vw=;+bIci#EY3opO))*ElV_S$PNyzt^zzxKv&|JK(4{NM*ac>C?Q zfB1ucIA1P=y$TVQixo?d=)!48Aj@4o)4X_e^!`8nY&O4HAKdQc;MCe&U&H=Q9NzH{ z|E{`qyUN5%eD0+iUwPvTUwrk(otu37hS!8vs20p4>WGRF2q|fZ6d*Kh-U3iLG9eUx zfR7QiJCkEx0}z-PgOJS$t^^1dGm{HZ$rOhBg$4SU_P=6a?vDRme(vS?d<)@?vNq4; zLPBJvj6h)?FmuI3NwHX@`^OI-JUm{kmcsy0WjU3S#fh}fIqE()H|`zV2ltLo&XUab zr3w8S(8RN7W+U#%rD`&i0GJRvnU*{+U~U9*a&6pB{>!6X{kk=N+Y(4Ax~2WXLe z0OlB$WUIZfVH}@4`pJWjzLW2M4|0$6WYX??k>}!~Y~k)~z}t7e^b9kVEFckuI2-?^ z(2d*+U%U7gsP5=UE-e<*?*SS?q^AZP4(c$RcW3v{&h9s}^J+FvA$m$)3ryTACk6}3 z0z2{oe9HRRn0lcSVmaVo26E1s)G22-sFDuOoqJFdc;V+&1a(j3W~NTrFfbC(1MHU;#F7c_mfa1WMg)AS@-R-{ z1Y#kuxG@EA;Gn^>yAN4ab;zD`9&4bwGBE{mb2ZO7vxQ_*bigr^1QOy>y29aRFtbo~ zsnz&)>Mc-vrN= za^&a+GX*T5B64_wDH$t#==;TLeRg`jSgq5b9k&z@|9|%0t;v$)I1~HaBO)`;rK-C6 zKG*KS3@`u)fFQU4$R)W;%E*;WYilMwX`iJ3rzh=$OfuPuqEWWck{obBkQib(Gnnq_ zp1xIA*X7(YGs4~V5Siy>-MV`QphyVtX{$MPDld_d5gs0&f9_5>=|>LtfkLIPM&1?j zCGysX3OMeHM+jJ`YI(BaBxH`t)~Y4SIVMe*(&$RqzEq5Ns$wfl##@u|xbkJeqbh8T zigD$3cdkyVax$X8a2^gwYHe+gp0$sj?tk{#XZueN>Sk$5ssNm-0&JSPnwNdt)yB0( zr`TORevQtX*!{`6au`64hUwrD)s$&=W|oqvD#1DDL>f4xq;*}-X7i(?qvf)0+csn2 zM3!lkM5LPXS@|yg{%fr~&sV!<0)u4-a3AABxxOd$DaFl_B#CWOYZHu_2&$%*%q%## zK!xYnwmaL?ufO}1-~HZqzx?*wqtdr^eeO-W7Or<;YgaRMTQF5^nx<(QRUMDV+uPeQ z#`RejE+K30a;{zKJUdQpTGp$@V%fCGK%GYIOyxYhI;(SNEw4YP)W9)26VoJh(@N7y z+qNn(1m_(al5>7Mo=hi`vh;|eJ$g>W1ef=Z$H%k9Vv+fjMg(yFKX2B%-g36h`1w3C zL^k;JpSmH(9rI-bMYPSM=*~xE@rT34&&n zhd)zQg`z4)ldbV|Qk4@pHYG)$MBPrzrtZ#tt4`n&Uld-XCa0Bn9WO~*$Ev!{E_ zY!09dVN`i9k*&SFHQL!4Z%xO+dr9p|)H&zExNwDP4*27~P`9Kc+6{zAaN3cdxQ}Bw zN3z|HH9e#sON29)VejB4>cbAt;#7ow5Uuyc&&7MsyZ&?gGaqsmU3|Wr#3X4@jeBhx zT_{7`Z;(&;!c$J+Z0i$-Bj+NFbRg%{8pr8xP8^>H=sHx1loL9SBWuTd>!=$_>T-f- z>RynU8D|JCm7}q9F2>k4mP{Q;Ne%wfdyhW&@WY?}!-sc1y?;Dgih*2E%^C7k&Dac@ zs{^SrDOon_x|E}UQ#f+o%)o(AP$&=z^I}ZQIjbf)cFq+=k#_`(*<9M#wlTGxU)sz_ zp($HWCgZ9q zToFR>?7(WNh`Kl{VZ#ph4qAs5I+`1yq= z=I^;*dFjO3agJPsS6^`b3-`01vscgJ-Y+^~(5ll6yc3P>`FXakJ%7@F)E!S}tH_@# z7wON7yBfG@1MW03ZNKL_t*XelnU~ zzkTb?+qW-W-WI|VXb3eSLDj?=Z8>&Dan;e-TVOJSswM4$4kWe4P-SK|Qf3Bo$*5K+ z01fa&b>TEPg)@^@S~3$&NkpN>zC>^Y^WFXsVv=eVB_e0!;Jn(z+^DE5U{y`#As*HB zaJG z1FQ2+C8cC3l1NU}nK3Wz#~U;2NvnqXm;dq%yMf2?b4Ui_i9kf&d*|GEJe^Lb}aC8)(9Uaz-I>y+nS|~`#C3x#d?!%o@ z=cDbNzIn@Kov8Jn%c78k6fLDDw$?Ujxv0x3?C$P{;E0@aJv^#rNy@S?6En&eA)*{K z@_EZsU0@Z!%o3eMi40#j=E}K1 zJbHZ8JpC{8AOHQ|ynSo?``>x?1z8(SKGUntI@Qs>!Z@87-ugCG3hl~-Q<@|VB-8(;gz>#x85-S2+)Ti^QDF$R%L-d>y`0#z4?)Rp3|p7C1A*8(11Khyq|6{rqHohSSF)1$qEx=zMW5~CIdLjnYri7I9W0~?qC zRU%|nrVue^Ru+XZJ7Y5?Hm7hfb}d{&JVrW3dkidvgv|)X5cLqY<+NCi-NEefkB&b0 zb2|JRDxX=q4{lrzvdW!kxF`pN!OWD93zIt^vg*z;pgDN1a{vR#NiUnG$<~glnmSdr z3l@uuzVF708f1z2-s-BYD}h|2+ULmbGEBl{s4v6*)+eRiI9)7fb;v~4)I%_%ytR(bRmdhzkIbGJzmnaS~(8{30SVCevKXNJ#-EQp!+>WADA0H#1I>QUWUxrR4f$ zNz1~kDhb5MjFO7Bn$vqmvEZ3KXL1J_6B(!hREe2#NO9IH#Owh$6UhmJb38jph}m&) z%noQ1X%ol_> z%xf|At}1<5Q-)ZLbh8+n8FTN0VN!*Gl^x~0z2x9Z4uyu@#!VH8MI?E+sZ~2v?v&LQ zPcHlEwi{JtF$$F%SD`9H6?|3t>A0#&cjJ0x0=6z9bWvmf>Cw~uqq`5D9?loX$HzJL zG|wZ)NU4L`^Pajlu51Wky?8Tz%HKBlkYj(f6CxreX6Itmx>+vftNDDsSS*{S5y|#y z&lw=f#-m75)!>T@XX|-#t`la>LsXThViH?PNun9Gk}PG42|4E=DOY4Jybr`*x_#?+ zzxUnW`1-rSSzFiMk=wAkUM$&b+O}=hPB|pHEX$1hpLt?lT zn%Ih%5;Jco@&Am?1c?EUuTOD=?RG!A9yT*$QCq~iPw@P||1Uu0HaI3EWt6#mvzF1pW~2giwTfUb;as#i#f%$Q-4R>$?jw0byTvK92jLEuM z-~_;!)&cit_fscEem6Zg5JA5Xe321#k)89ajQRgOa`Jr*>L*KI#RT@Lyl%gqLDW*3@mj5+{) z%Bg-ez2Ig5dTw$y&of=_qO4MzWxMa0jOku*_%Or!iOGLa6z|LQ=a~Wd0(M5u!awYR zL5}_x!~qXtFY;Qsi32`Yc<}QJTpuSHH)o&g)c8Dkm$O3p;w~LldKjL1q4)Qk@ww@f z6TGdn?bp6l>pu=zPG^oEwyhgK&*wu8u5*UB*j3Z%?aTZ*C0#D+l%%i0!2|~rHF0iz zO*-*TU$9`DnD1mDjV`Cq1k^dABJrrD>Tsc-K0f+v|5)6#EVpK>R@EkxNm~zYGMF`M zp4Q;%Y6M|5Vt~|9GKz+RgRjPu?d>v|V*v{}_TWE2UBoe@@TBQOOkkpe`H9kJ0Ea0)1x;E1aN zjNnl;;zdMbib-ItLX^!pr{tL7J((k*G>v2mfuxp|nBlz-fp#5g3&*2S?NpCvhx7TI zMC0+|;K|edpWU-XjYT81RItlC+gsaXk+h6UV--z=Tn>tQyn_H^${tu0WwA9KO(v7l z2NfnH%aLWw>+yW87SE}biB*4XTs9v&RekB=9NMQWo{c;}q5GvzLcC)kpiB_^Xx zI_|n|2s9X?nE~!J(Z~m8=A6dLEI;g;21|p^ zIsM``J=QUB*ZLC|>dy-qnuA*m*9d9=2DP0-kVHw96P#0{MU!UBCR!onTT#%sn7)GX zH5}f7DnSTHAVF&=fFE?nuzkV8Ror8HwetsCumHP4lT83>h{ zi>ZkbaO7NJq0q#oyBX8suRnfv=gHsy_@hhz^0!|9>X#T6A zKm6z~{`0dZkK?jd2+Ua#*i7RJFo`M0OIBsES~czJ_~~j!D2)gftQ;jd@_n#CN|D(S zu|dmXBqB|-sGH-1gRr-^clq+=txG$Xcdu_>+PQh-#yjtP<=|lNlTSXm^Rtil_xG}P zRswB|4Kq_;I5D#*^V!jdv)Lz~{OrBI{Hv|4t#5z(+u!`=H^26^uf6;3yT9|h-~IH{ zPe1;L5AWW+_xQoyY_Uv;Kq?%=B$s&;i&4eQP>gI`VLJAKN#pmv_8S%9n3_vBr~m4! zZ~x{^T*^aA)uADXX(aS1g27`S0H2}iTw2y4WSlMu+1Ofz%EWm{t6u|KQ2~ z;XJ7tkBndf67i0N>O~#RkGHShY>VpAzWwymqgh+HvT9VN&aSzN5+DlBQQZarq5#7Y z<DAz;jTmWRV1*~-H`0ghbc84LVJ?;fI)NO? zEZqZjL@g&P7`d#SvwI&*0N4eyE-3^NcX~T9#nO2=LYqW%4qc!~T$1;GYqEX)>h)_^ zY2*IO zl4(pSrX(qfDc}@bmQ@>tNkb?+t2zc+PgEBE-M4T5!N2^SuYdL3tudOFc#^`0b8{!H zB^%6nqGc$9$=bGEtyZD;sxouaH2nz)r;$(wpva`ruAdd`OTVhy#iE`sR&Ap&&VaV6 zJfFebBPTr{k%S0_C~7gqm|9T~)O*Ji3Gl&vJ z7)6DcU9J@9vKL?0NYtqea~Iir&y}l}4Y-QSq=WFy*Sm^*u$ zu07d_0;M5`51XNvPtPMW4?69uyAreWAyj2GE<;gl?d*Wb$caHyQkcP*yQe00**wYU z*18=hafuh>OD8EBo9mo#g$|$BdV}_aEqn2cIE?{njMBDAk}^5(oT{2cpbv~Z(X|^q zgt8IS)jWO~JYtv3U^F zlSg}>-nsYITesf+@;leBUxT>1ZbFcpmOx=%EvG{w$A$z@AKwfRsmr^<^OMx}uS4?6 zzaFUF@#jR;<+I%2^o<7276Jxwz~@Qsy)%|)hgYBJe;R7|{7pXcB0TD%7(N9lEH^lT zr2m(7-SZ)Lzi!{j=3XS}%<<*sk0(&Iv+_JV?Y#RAS4;-=T5f=F=2fXDiDqRIvSAHS zE|aa<4sdR{N=?(iI8>w9wx8U&_umODdL1wHhbGpZ4JUlc`ARHYALvbF2I_nyIICP~#y zjo_Ta<_;L>$wA(@A+~&uE0F;ZT!;I2$J2B1I%zLAKF|6)HZ^ol;UQ<``S|(s z{X1)1mrl=*P1~M}S6|Sd=jiAD&lj}+xpI!S{Jj0SsW*JGOKjjj+TdV=R;~Rz&(&`) z%HTC<+Xb5BBLAA5x_-YdU(^A85|Zc2S?&7#w{W)N@5=zJzpOHJ{pJt9jsX5AmU9_i zL$h_jZyg>_!*kDE#4h*@Y)r8i%%qo;6U?#`EVExNIoqqfSO1G#=WI`Y-uFcpz6&~Y z%sIr~Uq+$6HX4u#^(G=mM@MbjhTxeuFX#*N;7$pfk_oetnu5T=xN1?%qr1O%w0Br9 z8mhL&@MW&BMVnfxcIIa%r{+6|*0GXGxz34GE+<=8TrH##zTx0PKq$z@#iFuyT3oq# z{f&3udF|G1nqr}dhL+J1giItkOHO&jyd8L?RGDQ;V{#~n)SM7hSg1n`Rdc#r3go4L zw1|WRAc7S>z(EV=6Zxc+1Q2aa%o2-5gHsm-!GYO1CTB{fNMdTx1cgZ;Mo?6QE89WJ zt6QUSJ74TSd$51^-r!hHNtAF=!}vRvk0Qh~U8vY7k3NCC5!Lb2%POwnvvP z?_9dFyR}^sYb|)Pr^mC!@$r1MTBJ5gN~A_07Go1OWi@Dqk+ZM6$kgD0Leq60T37$O zg9Qy-*G+bfI~NEZq^6Wq9zT9kRn>IbOeW2ET#ZJfqHv)oVpDen13LYVK9`&v6<=`0 zWP>sF?}zeEkBC4nv#MjVWh%aWqr#}HZL{&BpBZn3_1V_-+ z4HKBu6{A*&QkTHXIk&SlEkdY3VcT4P z?X}l#-MV%2=FNA$^w!?q-iIH4Fq_R5^SOu=p>WQnlwyiN0+aIrfGSdqdwYBP`}>a` zJ^Im)est@NH*ep*{nf91`S*VB_rCuxzWeauspfkiDo_N8Dbz)&Zv!wQ(=X%Qy3dX(m8Ai93*Qz z5&&|}nVC`q>XFnF+dp{r{=o--hJ*Jg9Kz47X~1B>1PVYMh%ylkyjlOVB4YB)Tva1x z_TD+?bI+)Xsv^5sIKY9qAsUuw3wRSAMmp8i(x_$I>YKwvv@pi4qXUj zj@1jZ!F43b9?H*wuH9FeW(o$BL1F}PZ~}4Y_V28TI)8#O0M{ulmwjx49Fy&oH2W$& zLla_LX*>kYFxKgGG~KFRdF7Q!Wre4DfsY>G(S0nREHPIs3Yc@GY6-EWn9Kx9L|t8Y zU{GA48`+5voz4qe2Fwau6*ik%Q@X|2EhlbS(IMN6?KmfNG<12%iOrChyHV7SX2J&8 zxlnWF*lzYY!?SbFwQUlSwynEizzk-BGd408#mppuDOvIqOf9e{C2kxGF_Cj*24c%a znha!cForo+4`nhXG=wNEOakf72v??)*RPIW*_phuTb0)O_J}MNl*lV7B-KS2t2vlJ zV-xFUwXB!3Hr9s+2Pw585}fBE0F+Xy)6)E<;e5}++_?%mokb*SLfO;n1STl!gjpOd zbjONGS&XaEC3X|8#;%%%$tX<6#dI_-ZCa*DuyIw4$D>hMl~t%ls0e0|gyR*SJvq96 z@4>@|50{ID5Jy#zBX~0tNoGn+Oe`mh>kgJ3Fm~-72d<5N0Oi%n%H)Dw-&ZRXv|Cn<%-WN_GZ3-wBP2?Y-ya zWB5EWbp5Ws$%yI3B|JFb{08T;l|AYIq&s%_LAxhrl4$Ih3m-x#t70@BSK~5NC3}}t z#Z<)z49D!4nW3A=@3YrG=lct~=WP3X4&2LzJ3n7~YvjcB^SsV^zln&6Hu=Ub3aaiY zu&18u7lpT+c+BDZ#ikQ_`$1D`NfMi~Dv3YKX~JfH*Vg% zxxF);PNq5J(9A^COqpE>PE)3NNuKg%nRd$;O@vd=yE*J7-tUR=aDm-;;=VMTU%%XP z(Kvab!g=oT|ELIU-i>F{7kav5w|bgUR^}q=!f52H!=w3~kM7?2^#0wucb`1jdv?5F z7o1}SwXse~bKZ!|Jtc5^j zHl4Hq&YYXM0~gg8zGx5+8CwH(#)*iTtTP7)*2YFUmqPaZNW?QTKOzXME{qj1LAyeiIcjFwN;4sp(f3w|NK9`~MGS?q2Lc{C7 zj0}%_F6FqB0hdS1!Obta@35h|`LgTIGsh3}^`MT!j*Zx1qeKKF zRU985H%(I%Aww$Neu?PBeY={S=P$|U$c781fg+iRsu+U{CAW%vuu7jicy`>7@wiFs z0CpvlS?upJ97WkyJkg))XH-Y3YJ_0q8LEaTsZp!OV^D=ya6!e`LTS#aR4iLz{Oa`^ zZ{NQ3+6_OFMlGrrj~dpRMrj#RIGVsunI?wPz@j9M8D&7WvXdIBD#98Q)f7!l#278v zoWdgX(O?P(cn~`hBZVcdVhG7egf?nsCdpW(i6}gm4uP2f2S!&I1`tgW0hmHOsk%vl z5X+~Fy`%dN4(~l$Jvk_w$W1#A#f_`iwzs$IdXdONSu9s8=Ug9=*%bn25+br>-ubF5 z$D^_gmFFN5*#H$LV@IM!Dw-5smfsdk6berieX3)dqDEt+lt5-|*-d7|#6%WF#kzEG zA>=qM4s1m=GIcIMG^UhNN|rjO<7T)GG>kpJ26l%DX6nG1TC?ZKdSrJ0GBjb9!+%x8 zntHKZtlG9+pW{5|B+q8Lo~>q3G3HFGz3|3FPzcy{JE$&RJcoj2iXru`0s<*BfuoTq z)SP-xt|&qorn_6y?X9g#Th+MmrPY>}$L(ys+S_aEx^3IYW}KZjrk>eSqXz1;sT#m6 zL=0k(hXJJPShO=Jtr-+ZmTP?uidnARx-rJpYL%icm&?&;G?`4M(`i*z-enuBuhZF0 z-ZgP2uU5M0u^g_^Ee;nkaL-+jUdYfycSlo@WaZaaLW01^aYAZMl)b{60)E?1UUQSz zQ+XL}m6c^K)l5+H5o)LpFn=to19%~L8}e<>u6-wZRbZNfyBMTqfG`o1m2wVNQUkGL z9>ZDo1i)+Cplyh#a^bZ_Y(D&KdGF!;{%7~@-hcJ`-*UHZT>m%!-M|0s-}(Lb{_~&y z@UQ-#_x}3FPai)@&z>q;WB8n(7bpNlW>L2QgN&4n%`wWdyu5qm#*G`xWqo{nyjU#T zwr!dk`RU0svuJGNs-3m7!v%%#>7AXMH}BoL{o3u@x4-$#Z*6aHKYH}=&Ye4d_qTuZ z(MKOGmrF$Cnc@pdW)l0^#N?gx-mU8IwmaYe03ZNKL_t*fz592bJbv(_zxmWv5bvc09Ceib?53ES1!L& zh8>H%zdG3V{;OYo_cy=&%H_)l1Xr2|K}pR)p)es5BLNX~%a342?2OQX_2vL16oWUF zU!y9F`WM{g+3E2RrU5_q#7Mo!o*CNPr&s6o$-rjUuz~P$?&S{BNl-EW zeLOQl2mrkIbv^HUc)hY*xI-a86B*UOG3q@m?pyt~8}Af67UP_pxp&H}CF?rs179-E zW@eVFrFCW_JI`(f#!F!7+}MY-$)IDU?JF>S1Ik$qWQjB7`396Eh-JA{drV7aog%XMvuT zcvkRHX~z}C!d68}3^9!ei6sDF7Fd(_Vo=IHC?Z;?f7NwXk6eO*gg}mn921cf$*Fjhh;kL}UPldM&NiE)6X;3KAK$J2dEFmW0`6!903afD z)8tU;`FzPI074_zoumyZeS&@_gv_=Jl%d%Q_Sg#8At{Z zNn%MQnW}33&@m$=sMmAFUP^{-!)n4<`S4m%|w)qybq!S9YVu~ zc6bO;U->vkKd&>}(Yifn@sJ_PI>gh4<44y}lVLOdyWJe~`bMhIWRBG{j0`D>3RHni zh%rwNj*pKQv%mlNv-?lpxc%0x*I!e)G8%{RXzH9(Kunwn;1mLYvj>iIvK9ge=FSDC z*3=dN)UTC9r0JrFx*|K8f_7L5iLivDfd*I!wtn$De4(P=?pX z>3a>O%Yl&q?e~T+0lDXj@0%;UNN6yFbht;$S37&cu(fCKwBEaSqCKZu(rY$a|K7WM zyCbv96+PQB8(zqSZ38V$;vTR!PMi1RLpK*nsj_gL8pc?6#vODMz_LL}svQg$JC>pP&GBm57*)nZ5JQ z8__7GHnvqtNmDB#5?fP+ev5%pr%~?Mmo_xyAd8s(pvst6Q z2p)3ksfUN3i=ojV4tOXpiB}KhW%To4zWiM4`{(S>3o@SOGS%JE-({xZj;7PKyobA= ztKXE)YKaTllNr6;s2ysOQ_|bCr}guxj45ZI_vQU@XV%K+%L&bPKEd(-2SO*fQ(d?G zIs*8YTLzBCU(2uMbIa!?68`g-%u1s^8hEu@Wq$pT4!quc{@kKWMy4s>%v?0TYIVM} zCr@V)V^r4bZdHL5`iQz2M%cKw3L{nsSLpvQ|GscN`;3J)KrXuS7HxgDAB~D0kL>%GmG00 zC9xgDXAfH-@~{Hr6FC?s091NNaE-Z@N|RC)bIysFqzGXIBJV&Q;FZl?ILgjPVus_` zQdybCG=H*x@Y$pI?9eT1)Tt!enoO@>yEYn)j%Ek02t`pG9nZZly4|iBAv+&EI{*}d zAC1bYDx7nUjGc29B(0pwAt``%i9da&%wFqVk4#m7-^!MBAA(pNQsRo ziYAL~A|G9-Y-A+@6)uo-O`*tdg4dEdumma%;%6P)LpJlmmU zMgaS=Bo$Sth*_deFsddZ(zdCt>&1MvT-5cd9goM?uI&II;vRF9A)oG_a4j};HD6(@ zIftqv&E8$_z-H#iPpwoduc6q58*73BaCt~7SYZ*;pk7F`qRH9xI4=+yG;lKMI zzw>+l&DZ|)Pk;EAKltHa{HMdchn{LmOQgmTh`@lUwHmF%`UR$Kz1-gy?}}GmdF9HL zYjs`k?>{>@IB45;KA-1sC|;YvssNaIu~_`{r$7Da2Y+|-=FM+?qC&vI%N;$%*ZQB@Q;lpaRdhp=ENB{8C+qd3% zy(tc5LZsd#txu~ju+QyEKSC99P_nys&OCc{xt%|`yD62^sv~Jp@ z-iPUql+*n=K7MRJdvGMhjYbeDk|XkD8G>`5XkB@&9P(=nFbTTIf!t5V2AB~XQOXf? zWK2-d$}lG!3)Dja1uU8@or~<6G0#eU_}Qm_fyaM~@(@MDYDS8(LcIc+0~{legR(%| ze6yUxg4z2nH(cp`h%uU(3d}m|CHvA$krz+^HmJ1*pwGjJUKD3Pc!kj$8fSfau~lo(9bdvP*C4poMck(%a8 zZdR+Uz^xUwwKchU z2C%RxOjK2=Wvc@g9>?Ae109s~B-qoEjtk6!woVhw#2gtDoH%wl$`)O=RqOc#M(~_< zNX`%f?R;<`^3?NztT$9_Q}eZRkrqYaJk)WnF1T+SBDOd@N9nAsRP z*9ahDqjGCH8SU=wTz~D>_N7aXOUDJmI8>wQbTZwlMq^)$5DE(pmqw#W8Fr@QvTy*z zuxzbu@bSk#d-z~)Z*O0P%5ofvXN@-#{WPasJlI4;yf2@3zcZq$WTag!VTfrINh!6GvV9CDA_5c0 z6y|`!v-4n>i5nH}l^a*zef#zw|IzQ0h_-Q5g^?dOt3{MF8cmvXe(m0qjqe7zs@8Q~ zRn>SrF3U2njLx~Ls)hu_=RFQ(jllE8s);EnH2Z*5?d1sNr_4VCM5JwF+hk`nh?GIj zg|hI|@n~x@^}*_TY0xSZU9cHoWTHq(+cvG5$n1yL&sOy3x6gmUVi$yDUF-^dk?_zD z2lQS>B{(8u8coK&Dz_%1VpKUtMi7X`n8z49XG~drWu`+o`O-FSW}Nx{=P)$B`18I< z`l{XvKukr10A_xfFa`Xh;Vm!oyk=%5v9600nUHH;fS3(Lgd8fU~b{Mou}wEFO*Y94k7Gc%l~J> zFBguJCGSS5kGYi``nAfhy-}Rlp!qMQ*BRr=(_*RHz@T zMi_5RMPiJlrW9inn>Mwa+SqE7%{x_N1NvOeIrU&(WtklZ?_6N#%2DOZq9{vO1ZFmZ zL8BxWO3nqQkaJ?GX4hSAUcW!PNKgJ#$**VMujSYBODAX7%?lmCr>L)kFSRFRbr}cG z9@dMXN`8@tOLk19p!Mex5yizzaKb{c|Mq3Qw@}x_F@Tk4Mfgls7de3@qz+ z|5!%=0eSi985S>N*>r5F-WED-;%r*jU0;bd{Fl6}4jF%EuAk#S&S#XIV|&qhlf3!r zx$Qs8gWJeOVy4ngI~@$7C48WoA1Xbur0GLGI)LcQzq=G z=N&xP%kx$?TsfTc^Q>gTIGyn-4cc>}RSban?Dz*Vq_n=*riKRyzT>zLQiu#6cGEvu zXh5dAAT7hNJtr$tZ;n52e4gO>o|T-E%Q=^~X#g?`KN^jirXebVFNrk9W-=Yc*qlDU zizRgHXFu`B3kGV8ZE)nA^Tp(FrL{zM+n+tWceGeZ7%MviCs9BOV(v;2Z!VhucfkW0 z!#JhVkVun8gEyF(PsWQ@E={)zYbY#HS#q&WaY=aXOJBPF)|Ym#?}AX*))Gahbt1T2 z=+IZ}roI?67cC)4a*5c8$VkoOE@eBLGbp2Cst~f!9LL9>+`032@9*Ee z=j!N%>AC zNz=5!A^K1it}4n&6kThwunM2 z@oHVXg{lW&Y|%LD0ahh5sFEcDU~0}HIgk&WiL?wOqPA^A2u%}bv&D3>ZKg5C(PZ4N zQm4t8k&CHH4qhWb$q_qm;APV;n|-#u<#J~{uC})>Po^X1yeeg+-us-hGwU=})oxlr zXd@ZEw+r;=Ml%mPd%e({u|U{zDNbTS$Ggw9))eM^(KNAb6yVsZlnk#)cqyaZ>+d{$ zas&GX`w`NrO>lukdYw-Sa?S;EA-hze2Edr|ZhjrwH5dxLwq!Fg+UWgtWp4BV5(LlS zHFuUQMF5m}tON_B2(u<2riiAA^}}Zme)1uI^_?r<`R4YQ-@N`m{7?V>PyXb;|4)DZ zAOF|?<$wP1d;fQA)O$#3*iZx@AT|K3tO`+Tn*>IR*xx^hQ7&J;vc0{1?b@}=moM+_ z?UiMDbaYhLHL(Q_sv;ufoHVO$O``PR{-;l$JbLfF_io<2@y^+$j7M={0^ zKKS6h_ul*HuqwJWc_a`pPv%W52|T~{94LWnP4zWJ3mzVw^b?yIA6*N16c@4frmSHAbX*WUUP zN+1OiR)K8oI8Y5hi4CN%L=KR|q)KZzq|3KPN=&c;x3w!!+R?BtP($aevwGS-%#7e{ z&!0Kk`26or2J)O3|E9z)*9#>zQOuX}=;{7v51+ED5?GWK@V+pxs;(M|7DG9zt@S*0 zThqHA>EC|xD28cEULAu;(U8E*)JR*PO9c!7M!Y5$vr%UODZxOXY>F8iyn{K^7UwM% zhNXjeG$4c1*1NWJHPK4s2+h3@-un;S+<`wrdqnXFM9h{NPg(#T@P?$4V9k04IqyRV z!I$0_L?ogqw$3>KM4MFegZ`sjYcp3pv=jR&HnVj~e*il>lNe*uw5g|a43V$1;vA`% zVo70TvwLy=c>Bgz8cQZZ<~rku0nKq32!T@s%;1>V8+uM^zgaPIFp!d}N=~wE2IJn) zRmqMMGh--nfz}9$U;{P&QsLOPwsu~-K7HjHDA~hL@%Ucae{_V_%c{Vlu+~EXVf?@B zz4@;s$B`!ZnVEY;Uhk+^cd9*@?}PPM0mKHn|)@V z8AW6R;DIRf`W88og9rg2TA0t6n?P+%i`t%Tg;|Um=)(>TCEgU~?jDL;SzykPp_-+{DN#zS zs>Ktyv5Am7o0+P*Ie7>nnA9ADiiJw5N@AciKdCEh55iVWTa`^}*&fEamTT8{tH{IP z1GZp`sLR@$3OT?$dvXU0C|W>P(#3KyUrwjT)8m6?IcIVrXDOO?muW&GQLGF|Nb_da z_(Z{mphoHp4&=c!hfqn3!h?k&DcCU>jK;$W4Td|{Zr-|mV|RCZG^n|%hV`Vb>rp+~ z-J0xfO{&V+=fZhsRPStW?QU_-#^B=QK0dK`-~Z&3k3W6#^uS#l0+PitDV&tRRg>D4 zs8KBzQxSNZj3r;a@0Zy{($B05u#n>B%w|S3P={M#4h6WEA{x!IIXO8wI5?QiW~vI5 zJdbAGI_wz31=!tOjH?nA05JtsEz){zC3NDp6PtbRmhR73)n=yIb56-T_p%_RT-CJ% zNt(@ESeRHVd7|LO|KSxYz>L&$sopNteod^SoU#m(`J8eDB;9ymWVSS2z<_bv+sk!>}H2?HLP$ z9Bd9S3$bvQx5`)btBHx${M7!kJFOUN{NXH~u*x{H##=7kzsmKWXDeR%002$&B@&)kZ`m-`k&>W*FvY_MhWHv0ggc1{Gt9D@y1TGM2}Uus z*$l)&B+F&{#Louk`ow5s7Qf@sm*$WGo*a>6~fSf>W zZio=;itD=e+EPxbG1d9W)YUX+&uV6{E<8m%HPlu!(axHuuxPH@iLGbIC&L zl*;=v{ha<)k#*gkvT@~C`(HZwx!Kw3^`iM)ET)V5KXd%X=bwYmpToDG-=9+MVFM5U zoHK2*@Xub=N3yuV*`Jy$)Wi{?-H{Nm%!h?mvRSM%-6`nqU7zf3c;63f16 z=3n8j`5goJckOrWckQ2TJ3c;MEEZc^lT8GzxQf4!=0xhH@MS?|sBQCfI#+cUfSE|V zbJEju=>Z#!9HIBiJ6MZV;9_9osGQ?qJQ_xdv)S?_RC4Fl+jqb6>SXVFh;VZgcJel3 z-ZmbD-~*B&hngr5qIigu&5WHLWL??Ua#KV?j*_*j0+_jqbp^}bDwu(6+7J}39Ww=i zNCaXO3871O1$J@)h00u`xVyKeW)>oWgH&wbq-`z(BTUIY`{3gbfBuW+>ESRVFOtp{ z;&}D$z0qKpG`FTDEIqfWP3jaWW2_nL-#)7(v!(lZZ4+evp+zMnV%;eps&0W%P z19cbM=aX`G=PoxWkE$2~C6Tt})aGoesmbj!#%RO^hzG&cljWQ}7)try$|@0I4uess z>w39dx>-)@T5u)nfZ#s7qMJ?|Cj1xDR{Q9QseppZ_$8z9JRHY;mQL?jRZ zXE7I#$;1YA*xS2t;}+?_n#fkW^p!c z$K%m(I2;VCx~>Odov|_4~!Gi+`qpghks0}BL?jJ87?(e_*D}Cj<{HyQnym7z&^Z)t3`_6a&^hba3 z@BY(|{{7oO{i`RBel;3MlNKp;y)PFFAXKq#wNXv8S!$YQHk(f-le(@&WP5viYisMq zjT;4~KRG!mR7=;6;Uuvp4!LRDwt4#W$#S{)^wUrO{_lSB)vtc_%{Sk?fB*iU|M{Og z@DFeQBci(@8pMCh*)2SsHv?ZmxF;O^W{+(S@>#x{XDIt0&(%D_0L>9Pp zPq5@@1x83Z9to?p%L9qWqd{|g^zqYQ{Wa#lLjDwf3|^FN#dGBzi3ae{cf4Lu91y4y z4r`Fq1+-#_ZU%R*K3QR`0+hU?Na-p@9WygqpXK|iXUOUd7}R|RKhXB6Hz!=}l5Z^Q z(u~O2$x3nx826~|YJ|J_LPqFm*F>RYk924T3mLN$kWz6Y8{nV>Rt@R;bY6R@l+y z0e{r7qdE_3L}X@>!URTf_ijGBvau2en56|;QW38zFZDPA>3AT6khWslt$BA6_9peU z$zV|PpvqCKVh^t3OF>(SM)K6A&V@;m9LuIXo;OXi$n$w>ra3J@86Y8YF6oKka4$JP z-HqVxN~DNJ=EATF6u}H-BF;IPHVw0dI2vtT8;x#n4=2N|-CK918V*O*a8L~f)o4%; z>){|)*S5CUa$X*dL%eZqw7VVa%7`og5~OYEv!^Fd9`8T=?AgKobiQcZ1uk$gf`Q;} zr5y7YB(Tn`8Y&TTOxn74!KdJ;001BWNkl_$V=ElFz^$2G6N2k1qzPs;U|ehNDqc51gbpWsLv=xpxtu zosXdC;a4*={s}c(33g@{kcg1#Md%_%=HVx`n>A?Egu>I8Upk`Q7v7Bx#w8lr{}CS%#VHokjr{K_5K zog~Imld6Z$lR-wOHaT@G+f|odOE`Ei=JECx)GT+|(g2hIickvx5@u$W5JG?iVos)= zznrNgb#XkG*JqVZc$K#3CEDj=N-qr%{jUA4t=g9i4*c_JUo6J^U(#N}0o;|+dR}er z1uDPx{Xak82)wXJeEx`rvuB~ciUWWi#_gCa{b%d5lyA@F6ThGq#fx6gi;C$N?Ei(6 z7`@bZcF`{9l1yG2E>q5Oj(u{f&zHNNRX@+UCRhDG=Rm#a{CwfWn;UKO-Zx?cFQ^sK zIovMp;qqFKpWj|)y}wXpG{OGKiD{ zkrM?bFa{)nLgSiLljat>Ffa!KRT3g&;9NPX3<3=tChiOm9*7GhV3u>%R&#<#Edi{= zOQHlz3cAtWs_7TR0J~1u838gvb#tn zQP|azduF!rB#tNbXk1l6a;us%fdh5bR*VXJvWqMx0zsWX2tABlLhLLC1h9oFM_vSL znxZ3z-E|rbkS0G~mR{S+iU=s$RHwF=zG!D`;Ga zNpt`t!2mY{lXdARO_;gMw^=w4WmE|$RiZ^RX$DacVN4wkyc8 zY1^E0v&{4PY&05gZ*T4F1mVb3>fRPl^(tz^yXu1=BKB1=whfrFAMMp3^QNDmV2xKb z58hjr?z$3Yg)|ldhrn!rd7;Fq6RO>?bH5$k#qpzz#;Ng41okY>Ltuhx*TV=VZY6@! z0KQW0uJ;#P?a^M0T=PchAYEC-c;5sYjTGX*e8CCX?;$?X9iJ{{H@SI$gFYgu#41hh|NSuCg*f#M6@# z5S<(!K6>=%-FM&p+Sk7J&2N75mHYR9_`^T@7k~7}4?g+zFMs*V_uhN&(@#I$e|lh+ zcXxN^^Lc7pUCjkTn=(P#v`iTQ+!sz2aE;=1RD0K7{rwyFzBSspvo+bthfns#@~40J z=J(&yt&nOc&@wcb3y7Q;@jwcA>;Eg~{&Tt8K(T{A&LG zr$=+&O-=~8Kt^zO2RW=bmrprWHt$pb@T#I*|Fv6yF=wI{-Z-_6?9fC|q((3uhvNYs z_{qcLhd;$9e}nX)`IExUW)9?J9vs4mfH)K|P`g6KV;nGQ4goAqfvBXWM_va{Z;rE* zmxy~?V{oqPsC=wk#oh^a7lJcESe^WHT~H+iidfy}$cN4JQ9FAa!cFE3RFHo3m`I%* zP=Py*Wnc1%I<8OGE2`}+gg6c7*k4SAflAo z`Fti4c6N5E2oWh-5J5s$mYz=&fw1uu0Kht;6KmG_G9ORp889a+s)%od_w{w-+)=6| z_6o4C&(c+$adRvd-n7WdQW7!|$PtKlCR?N7pmPA1cwQzqHc;RyrF?ucKRh~V+U#qG zCVGZwcars8oV~ZtYei1d=59&--QiRgw@xS7C?dQ1hNx(&MD8%+J|QpJ=gzhD4nnca zsxF3-0F;z2PBF&1t_F2o*Mq^JuIo_6R(sbkdb6p!mv!(cpR#4n+1;PhUT!=KUYF0! z*v_y)#}_~UE1W&PvyZxOnZb-MQinK%P#m0>TWclbg`d}u+9N%@3RrCVO0y%?TGRP>b2vL+%B!;vx^Aw&uxh>*fH zx2(xpM4Pdpi7!@5JeU=L*5V?`V zlNXsILQ$QQ+R{v`5Qa64N4sBnHQv}8-?}Zk+f57!S(O-_LfEh94g9m4lYD9fsY@_M zrPLG?vyc#(qpneC{o18T>nfU+yk9-ZA58F~0a6h@tN7bKz4KWM=@e7GZ`K!AdSQIE z1hp4s^CH!M6N}gYomTtN=Cq^@Bzd#UJU|92^}kPFcqfN9Z|J4*`R8jd>fia&@#@mf z?eCrbzp-XFM~=?TPppnVGoCLe-=2T}eZl@;cz(W|E3}+tQ#an6sOPk%3*@JtefyH0 z!541lcKqLD`@$H&mjl+n`J4P*`|W9`=E=tU%NE0_&rcn53L!i9{~OvZvmI zQT}?t>-lXQvC_UM;W(eqr_*VSu}#Y!kYO`@QN{PdW(1a40s(^)K?IZ*v%_akn|Tn~ z;-G;l1<2WGWdxqNwM*}`i@&Clma_Oz*r5PBiMuyVvk2|h2sf_pzIy-GSMJ_!h+4I* zIcII0noNy(&PJX?RSj8cA~Ma61__y3@QW@6?#DJ?6&Sj}jLQDb(p{}X*u+Xs3 zFtbKo8&`ABjA&L;|GCnjPtYI4W1zrrCnuyFRFfOBo2lijO0LXGShQ(AUp##0ox@Ka z6GAy7?Cvxvfz(Qs>fG^`?% zskP<`%IpCI0$E@Ba?=7YK-x+L5OQ@Aa#baEA&F6hLdB>=a?VZ8B_mp)5EM9;O2%(< zHDk-IqN-4<1*Y+MEFu!>7-On56*sabnDy+RQ(1}5I0*aqzNtNwMjOigX42gi2jUDX z;_8)E47}BtoWU8-9_-*gnPK7Lf&gbHD@p$VsGFHm;K6th2BRDIukBph-n+IPD_>0U z_$be3jV3&Oa*z{pyKI)4wS^HC^TW+8yNkP$N=Z-*6o3g3I7%|@l5x%f5IYJ+y)g*H zA?G}uP7e+aM50t9ksvX&%Z4_Lwf;7(7`Lb0zyJ{I3g)W1SS(Yrlv2~=!JyjR-4PK9 zLS%3*Ik!_vbr`H3Zr|Y=z&$U;_2t}r1WGDQhdm>jOjJ%A-U zEDYk-oiw?F>5kiyj0}lUDQfTz4e$Eo9#z+g>c9n0zu>$V&7zg}zh{1Q6R-H3q|^h3 z^$eOdPAFzhWXx`+#d+qbFj{MpA=gCCOAy-8U;g;#KmUh!|DPZ2z4hHU{^a{RZ+v_A zfB4$}`h$P-Z~x-o|DS*NNpxzjyD=-COr#jE?s9&Cz$>y!+j+<7NQEG%X^5A>v>#XaLUyVrN4TGbV=? zpu(MUpHi>5t5rhZ{uh0JzMxhhLiciq{G7*z0;+$?_SX0BxlM%3tt)< zAeCIw8b#-`XTx}WbGxC%XAeL5kNEYEVGjxWjwJx{K+bOB1qXC@w2tJ+fD?64a*zR2 zC~5guE8Y9TGpq4iy(cR)*$sK#rN+8=R7+1Q7Zff|_O)&X6a_$Sj`kR{&*mpj#@j8Q zNi}9pChT3dysm;WjB>vd89*KD*Zce^oeQ*33fUY0XOI~Kl%bhieGu#I?OV5Z?%uPT z*RY)9(@*fxdykfn=CrKHwtP`z!B`eh4sH;13<)cx=#dM34I1DeDCZ^FQQ(s*9Mth- z5D)5VF&d;vJQ@4bpodO5S9w6zP?gzJOP0kgCU=Ac0>i;4(= z*8H&Ybj)nC<_BFV+ly}^L@_`>&J;L^NF}Q9Nhu-q{}3 z+d-mK1_@Q1jN)h_TcbE0hCwa0$helB(QtPsZq;ChXUpxfP5$YV!zYLH&mMgCbpK$v zF!vgSHX{TvUl~Dbe@o|tT1~|DV0T}y|2zk~Z|Y;KPrM^)lf%?JR^ll&O|x7s7t7gf zHk;4qZQGV22MhSt4m@x^m zoE`4$Z2$51-ukm2{^{3VyCvkARH($x(5ATVvShB%!_zaFh*Fz!&P~%Y^Jp|0jYdp) zL+$KDT<;5C4fp!hREZ=oJ8{Z3TQ>9Ma?vCbb|>>wRYu+2HxfKvrs$T@D0w)VrcK)U zm(5IoI@a}|8jprCiUi8J6yE0E4I0dRwpbh;p3LV<0L(#Ed!87-c#PAR(pKKqGar_J zuCR8`iX$ooHoM9$B^rg8>bj0~Ro8Vjs6z-O;=&ouEbG1t?%L_w41j&LHT2T&+?D(` zz@X3HVkIGjw#0LAH$uM3dU1AH;4VCmu>MIH6(bJ4 zQwQ#y$I{(ZJ;rJf2Y{*i!-t<8?jH??)mOjz+Wq_Y-}u`7YuBy?8E9@ax0xIUqRw3> zf)D~Tm-W73(!M<1@KU?upDBOw^nLx~-Q&gMNp^-X4s+Z~PFdQEr zHOB`>zy9RWJMX;n?t33TeY)>XRXxnfnF9n2Xty1hY`DnSt@m@C%2{M!gO$S^5{IJ% zYE2twuZMAWdwlC=wYPKq^{@K4#$eP4Ewd_lEmakw=LUVUAMQe%VQW#@-DmeoR4U4? z9i3&tOQ%bVu}e4oN|;O1mZ&TB0l>|)z-U3JpZ9A$@S>GX-f6Qd)-N`gIxi|MH#foa zJ)GY+U#RonV7v5E|B1+f?)uN8@n7=gU$W_ZVa;A7qu7Pl^KwJb_jCUBxsRvKh=%96 z&X;Ldug8l{{DqwM()QvG;EoXjtm2zq_!L)q+9_`w@Epk0d6w;&$n^ZfI@`hNTQvzEwLFUZXlme`1j`n>)(KDz4o3+&0Oml$uvvv+ZG7kAJd z_}n+QpA8-`zuv9%af7{Pe2aGBsQ?yLXREk)VS6ng?Wh}>Y#C4mz$pybR1isS+pK@2QDnp;|^C0BQ3_tvu+vT|~+NyL#U zK}dpdA^L&Lq7fWH0nP3Vp_s{L)8pBrr=Ps@?(*?tpHB5~MoYc1z5VLldpB;}IGRlt zIVVR9!6`tE5n|+|0-|DLYDxgclfkWbn0#z7fMhUgV{}ETm9!=UW=PH00F*HE2|WZ z1+P4&W&iD6o>wL70|2lT--e5U;OyccD!y2E7}S~KXt1?4+1tB5+?nj&t*ABy&5r5m zlllJBgJzm6>te2C4p%5bsgeVQTjos2g%w&>s2Bhz7IFYp34eB$jug=&guZS75F~2$ zqob1t4<0QSHs0A8kGBTHp_TgAWsf%iTHH%9#&!9z{tZLS3ImzVv{|N<(tOrRpr&aC zgTZKA4+aB~KDRtS2k#>zap*hme)zMW{KM<7zy8J>Z@lsP?|t_>Z?$dv;~)R{!w)}v_nlupe*Abgo28tH zASCr5rdf7y(>TF_8ufL*@y45P{b1|X{d#xT+9_oEoo~MS!|&g{a}AOW$%9uCLLgCf zb>axpSVR^BT~2&*Vb2`w?9@^Ka#|}W-gQ76*)J}Gbis#(dw9%lci87IzdopV!ETSCe#b>j}KV3ffTTDMd zI3}5rmcrTDt?=0mSSscqEpkj)La0Nim;$4661cc=F`di0h_P~afKJOX3%pS#u+!x# zcQ-HV>%14MczTN0$^bQMF7*MEs7ru28u$X3VfNX4`ebZ#<^;+xhO7stNJ63_rXn)j z$<)b(!Pz%>Ki)ZmBg7djmXO>sS>p_pvJRp&9=vw%`u%%UN9^zO&)&oS!;>^`ms7`d zh^2T2l0yTu;K&9dC2}hRok0vUMphWBz)ycudNuE@LwjvT^WJU;qMT#%RESnL9)NP|E zdv*{?Y;56o7>ytiZol>G9)rAwO|(}7KXE_mr}9IllgqUJUKa;&*x22cVeOlFjHhO z1vOQ7H-QLIP_RL=QF3Tc6=^V>H{59DY@r&5dZ(&J+qG^D!u7q$a6GDZZiRX*QdP_Y zp<%45YIissZf(h6NOf!nHBH7etgF49ZI}lrR}`65_~C>3qsPxaesp+n+#DaCB(*9I zIMi@AZJlGcLZIF$Gi4PNZD+&c_Dk|e`357+H>`N)RheA}^_fjkQhhI*>0;SVr_<2C06Dkr)~4lj zIwi=~*4AXQ#Y_Y@Q|k>TBI=#<8}`(OFjh-JDv6S^&YQ(_K3lY{lewXIe^)V%)S0~j z*vzfcx%@XBz-5S1N=fswA)pdL$%Y_IgTZKbd#jSZl5GjFEpR@wc~~y>=y-lIU8*6* z8s=?IA%srH?yCi?o>%{7g(|)%9=;4%VA%JWr8J)-VC5&*$O?qpuU)lsSbd~%hsX|*3+ zeZMQWDT?5Q6TnrBs=jDS(Rng2{Mh!L_dfjKgOC6IXFq@R=&>o+^^lwvjWKiC6pCgRQ;bcp*YKw;DMyBgtheQxAnpcUfny&vS9zvI+< zD|Xi!UwvtOe&eI7j=umu|FZGwm)qYt%wW*87llpJZjOWY9w^RG?)ec+AXXo4H z&x`yb`T05X^F^~B>r&(?O_8%pF;Ca2jUw-@28Nk2k8~k1S z?P{kYFJ6)X?5mg4E8fra`P;`CnT_z`gq3CTA8`S2xObaC|(7aX6|`S5>H(S%PVf zvuTFql@)}77H=?4Hl~Sp0N{p8*u8T!;*=_XmIHBmx?QE|Y(h3`?B(@v1jxUh*r#O77v*~fW%LG6pd+$jOt#jm+U-gRK$_6?DRh$lS#kr0#%r>&Vx8gRSnD8SdUR&Hn!W za*>B8v#qVI;b^qCx5t7If`||qz~%++)r|r1)ti)4;3zB-#7*2a=d4N(9y}Tj>+PNK z_V)I07^|w1Ak3_(IqO6}7lC{F{i$)@B>G(Vyh=$_03`)mAy==Z|mF@)_kNBOAyt!r%tBUggoH*f#+Z-4c{yNmg8ZkMZ?f2s=Ss;b(w0I*yx zA3S*Q@ZqOhTU)no-P*l=)-m;xBlR*-+%ShSAXz>AAIk7-+TJ_$@}lW|MuH&fAGNv2hX0h zZ9AJS01yNe9W`iJ-TTHX-}u9uuYH~Ci3%a=_HOv*?_GcMD+mT}bAW^pAuxjynL~VS zx303hmtlo7Y_MSz84B331|ST*jpg9;b+WH$P8+$%PPfY$z%OPO1i>O>|M2AC@OZY& zRXs4`lv7E**d;VW7WNP&$7*nG{OAZjef#+1M~htDn6{jndEDO7rX^?g2p}6Ea5nOi zyp_F68T=f#te^(g7}|^!T%Ft)Ij8BhZI(29_{rbvum2+!9}zu5YC;7?$?Zp-Uyl=@ zB@hGz5d@YXgUCacsNQ+1e2ozkfWGEy$CfiI>1T~2ckb-Y@7lqtpGy;3ah1yJ#qz`% zs0i%71RT_$o!a8SY)R$%*H9T1wyhhK5zA$JD7pHm+>XIJaG^`!&wwW)^(^k5;Ej_~ zbQcV7?CtE1ZePdl7QFSx5Af*M`RMU9J!+u?_R6z(0vhislWy4YR*+RUC`kz936=>< zMhZNSw5V{rJy?#zbQDiUa#GVtz)W-=EV+U_8ZohhorS0hQ3b(rLP}_}TF$TxHDl+J zB#;PZFc_PuN^p0QE*r43tf-lt<89@SS*aPThq8Wx06KCs^~5>n5?4qP2BK;)gb>;` zSlhNKCDo*8oRpEO&}>!d&fehldt0yEnB3YMZVzR9$l`5k8)ynr)v;0pDiMA}X4K}~ zE>qjKj~;yHS+lmT764&lXs4~Zn6jyt1pY*Uxk_r;xm6^iKcQwas(j6qd~nh9#=dXj;gJ(3~H@vo{Yk^-SO7;co^NCl49Oq zc9I`Ie*EdD51$?!?H?>$YT;27Hm973oI@O$yL+F@loDXp!BGxaNov}=d3=oro#O$V zA(*ayWxWrxtUGsC)olLk;Aq*T`Fy@yE=v{O5MuxIPpvW{5)sQU=uX(Ul9ksMSc?Vi zo0%Ehi95p7dTOm_TA?GGnPnrQ7(B3j@2&6r>wonxzwyRbVV+YG_9*Pd(b)grr}gDi z@Z84emC&e^lBy2sdORN2b!c0qE}cv_;fwvXF)V)O)yymaW=+bo*=#yrrtBb5J!d!d zDsk_CyMV^z{aB@xnx<)UDixcZJg_iO$1oZVCR<~-wlAdt=`+EYS;~5Ha&mk$ZQE36 z!5cHA#9ntG?kUFBZ>|;3gKzv<{yq1){htbWBrAPy3vl!VU`Lp2yk3^7JXr~j15 zQG#sl@SWRZL$fVamVJFXK7$DV#xc+rY9WNdV4$UjM@JSXBJvFq$SGau^KS0U?O%o$ zUDhtwug}jyVL+)K_A6FeK`Q^vhn$%@U-8y_M*(TFZ#S^ zKkX!S*^khrm~glyZL<;4aIi&!!^7hbKm6#EPapl{@7~@&oE{t;snVdHa0sc@)TS7D z?VF@7y^4r<&RXL@FQgYov(_U#+Hcdiev?_g_~>NpiN zZsuU-n(FApt*Iudpc_F)tNb8+82IL0Qy;IeR(b)HUEa_~j(3g8$~N1;ok z9G~%I`No@7(cg^&tcxi>)2@;a=Xb-^n=`K8{=+Le`z>n!w04d2?G%1;N=y85&wGAd zUon#Z2t$04oVjWUF1y&vLJhbNpq$_@exqSFFcN&ii8hzi4~88o)gzuEQTn zJ0D2_;Ecb$Ln;AWo;k~+GZTbW`yQttsGO1 z$NKnFv0&x%=ZPrUxCXy^JU8bSt$%gtGP|VzOVP5+`oH=v&b3pK8s~Yyntwb^oX0S$drI^RMcXe$GFfOWV2m*Or~_oo@M6qUfqhNM z-JmdW4#rT_L=|BKDETOa)~R7%LL1f@IWcOox?R*pW|^4+YTF*RJhaTGUBWOerNx(3JZkx6z3R=59^}RboeRpssh~mCKFMJFLvy)ZvaupgM*a zDQb*Sn;cR~Ij3aqUZ}WzjHDAe32~c}nHDIjjwwcA36<1@k>$2++qN~;?l};%Um2gU z=>uNP(#{WC3?$;71WYSqyGJB9SCF7%!>>x4t?0kl9FPm=Cpo0lT`Qx+OiU!=LfhNB z^{|@kOm_Enws$9k5k#<9;=v&vALWB5N6m5`QIjKO)(q}S4VQ8|nE--1C?S~uT6hH< zKxQNz%NWun6%1zRs%Nroj$8+4IOl9cA{^Xku~;rzpG_B`inH0Q9>mdTR3OU`0`sQR z7yY18sqagW9xwBiaY#gMtM1F3(|ooZjjQo^JQ`PZT{AXo05cJ7uJ@JowV_{b@`HQR zw|jqK3vf1sG8%ApQXu4Hp{8L~jfQnS<3;kM8ImiGZK4>*qup0#liPmq3FSk8D@4d7 zZ{4bP?$Ypj)?r_Uv=o#joQnTlwR5^w7YJQm6-00a*@}zVXXQob3q}zyv1Ha{V$J}d z86u8AL~dw}9iq&6Dp;xnS-9LI@$o>2wO9ss;d_K70HZfBE?5Kl|Cu zn>Sy1-KAJdOeo$B-v~-qHlct)+?_J1r7O(BA7=-EN6xWn4)no!x?>md}d^V!UZ;P>nrur zYC3f|0-av{MgT31?DA)NYPaQ0xE{}`l3cdGU+`mfg5mMg{MqCEHkpLF&Fn}b(cO(e zW{%9HA&1rgk@X$Ve7l$814hNz27KL21zIQTEyQ)CSgdhk+0U`L< zO`H;_(B*sRoB<%I7CFN~N{(nEVsfEeQWTh(Df^21d#M#bWyKK@NSRqA0-SSu$@3Bi z8wfCn!CGqOumnm0wM5=BXDiQ*V2s226nSqJj0CFOSyLT~&*x>%6tg^Be^!>=$X^pG_e+@q{B4CXr6P< zsnunx^Z9%+ZJNb$wphYEz=bHXvuC)PLCvgWH|!`)ZW@zOt5Ka=wN|MGWe9*qf+JM* za5vthtyinbt*RPqS9zyqL4zO`IEVzP$AiK4c(5}V1&k(jHLh(k8H~npYZ4|~u?pPg zluc$cfB0zsSD!ri?D5mtqBR$_I)-tGQ4J|+&L+%4L2U^L%F-y?av?Jniex8piW}J0 zF3nR6)G}kcb+J~lx&X3JGyzl3T5>+mmrXi6In3rcXNNP(D&KR?XIEmcHe6@zQ=f!j6JaPXl5B$$Y*jW}~W`xy0%;^5AeIFuWuyLI1EW-AO;cU0}bj ztVQd0mKDu?<%HODwe~?m>-~KLS2?H8cRp{5!W?4^byW{yRoAhusDwufJ4rDpiU|Av z*?ZF_Nsi=7@Tsc#5l3ECSr<^a`y`s|CTE9S9?Mx7%FYU9zwM9R?<*rSBRd?DJtVu) z2Y>3;z~Pn zf4}7T@ryI-8b^pZ$jv?HpvXrGcf>9^F%iz=^7Qod!Gll#>8C&a^x>mNPoGuwbTZum z&^EeQwuDfRrkc_~-{C-<)eFoWr0lD-Lqkp*5Rvr9QFjAFgo*-XS?}(J-JKiz``fo~ zR=X1$6;0twB;%0tkq5B27v_>Qsaqkdlj!Oev!}JsA2Rfq6T{(}R>DUsvaI_6j%_Tt z4)pr!)>lMqt96*K47Z`*Z8H=B0QdfH*?5G*B@P3xpUlhnJ80ErA9lum{BJHkFTtO% zp)E8p<@n2>+V!4J8*!@u;^qylTlm%ZJYLFPx^}+5DqekExq6=cmG+}+pXd)4Q4ZSjq^z0CJFR@w^^X#Y$ZJzmE9`_E8*1qtX^ zX0RINTr#UO$%+HGdcS(b1xn2CMB(dg-=VCg+-0clcez|VfL;3Jcc{GTUE8a#t-n!a zwLNSg2-lYw<7_sIol4*kLf0iT72%geufMV}s>Xo3x^rf{x;sqKE-5yoku513^|&hc zv-stIfU*!yhOl)IRb@k1G}??%)zj&8QWr*5v0ZPM&@{%eOD{*;)9u1g zWR!zJB1aZ`%{lEPj}`);>;(kQ3Hd6|s5AqmPzNjwa59CHE4vak zWNuWNizT|66fTv zW=8N(1YwIYjz%L0xwfV}om97Wwr*^1*MSr~4kIhewu#NWYs{l22}Gvq1SpY{CpZBL z;+0u!$XM*KEt`SNV8je4AxAQ~xiL!}qzqCdZ;3h>M`J+(D4P*xt7DfG!OfRl*QV43 zt*WxFg^Ey*C#ehSgk(s%%3Qm$^}dPi&;VKSuK~+ae%>2v>&4TN&s#ZNwWAjY2axrV z8OUgVzkoPkWLeeE2*iv41SY}FJGV!Zdhh1;&J9!}Uv_kSf|IlM@zF`sTADZ3G|SkL zD_d3zcY={6hZ`c33%fB52jl)g=n%dd?q;4P`vyELE1SvCNOpMFCL*q?(YP8%vzXF6 zMi8AI9#rFMcX#*3jT<|=)6r-Y0yBd-WW=Y36#JaD%uEg>Q%lJ#xhr!Z^3ix=mYS|v zw#{rIlSQ)=CzH{5Yr7T@K<-3YGON#yJv4q(VIEjX9ud9Z;a^&_7_gqg&_5jm!2ioE4UmPu5dc;#<|$GDWI>z0yZo;|e*EEwU;N>kzP)IhpZ?^7M~@yoeE3jP0}=|NYH7I~kH?GUvg?}62XLpOqoc)Q z@yREjJbd{1FMs~wn{VEK=bd-nd*_||uf6v4>C>P6;^POOe*VFSk7o;vZhz;E@BZ2S z@BPWvoo_#%x7*X5*fiT))%U*j#_hc_bIq;DMN!CPn|E)0{1N`~!THlUq1v7|1}=*oiOVH3JCR8r$?rL>qv1t* z*S>lIIUwxAAT+Q72`P%_+?vpUF5rAx&(9Bko*w-zW*-A5(3z8qpi3)A-iXZEDI@R! zU<5z};*w=4FgP!VAeJ0EU|@nVixfpsmStJiMO}pu3Z^d3-BK=HYcaLZU}olhIE6z2 za`MXuDR(9UNQgmee$nQ)9BwcphAS8lAaoVwsiJm(NzXL-^=$ha4BH-bAXOG`5O z5Ko!21?Q7Xp(X}N#6}a@y)nIYx7@iwb%og(9zMnK<9L2}juXc$#n~A(m21sZ5}cwM zBEwlkRZaV}?HRywc9;ck3tzzJBBzziN8x;2&PQQ34a*X<0t>++_)HK>Ng#m|QR(82 zlsso%GZyBc#LNhRg9p)QW^VA=GIExwVD>)P(z0LBVdlnc8bVo0Sp`C2p2#wu=}y$U zCt)CF_>f986O2G)WQjRDnFUM+&N<`&uuxzr$jib?@lsTiSKf?AxU)BY>)zhm_qOit zR$E0Iw3)CXwa~;MDNC@JvUW-85L0TFaj{q|m+fpeo1M+OWwSlqfhN;P4psHMwP);} z%uI|#sc0N+Dq0f{!iAJ7uE6hD7ZE(63)N9gu^2=0y-h2*J!$Ev2+B;8_dBZ#4ggHBf&{um@vR$-6jqvN;bYEG|s?cE0tUlHuZqR#9OePS}KoRaIGWYHP zB9|=WWc^X4Cs<^kE(Zw|0tI((yX0mqo9e;&`S~w@`ODw`;k(I{_A3d2K^7pyPTYI( z;Ff=A?Qz;z0bT%aUSqBOTlwb7ivYpQkg%(0mAm&02Jgu??xG+mLQ*bmmZ$4uipyscKRL=2EB`96X-I%5vtXH929E zLSX>ZQcuL>3z%V_jE&a4*^mT^qzP|zVtM-N7&Wqxu9lyt+X#Feer}DK|&`aK? zmvjC8TlpO=D+KCNUh3;!|E;`g`4-CR@D*rQf!-H`T$+YCOa;-f1{&`HtuxeuKV%O-|71Og>kjnB`EV> z8};DwCl|u@Hyyxf^@-`S-*ELHg0>P&dvP3{n*I&>+8!0=n()>wXSB}pVWhdy$shn{%nYj z%JXhxob>Iv+WK_iU#lM&Ts4>5e4&42_5Naf+s0M4*#okEpK}@^YcA!my!^Xs-qDZ` z6@b;%*1_`=<}e$`?W`2T$XSXLeCRKg5j7g=QPAne3IOoDJ-`C@l+{j!@0s>rI;f?pX zY1IqqOirVHaeVar_-L=LwnkQxZY!eGY3ENCi^r$4WA#*)s3#gKuO>X+4wH$L8ibgl zGsJ5rBr_s{^m%~Yxrru$MUVr8g+!t3YzpGOyWK&Af+z^sQ2-;M9g&6cywmfhTWVTx z=%n06Q89jB&Ei>ju5xU^}W66&1pG8$Bow+5rmY1tI23o#IED0Y2KcQY1HJV zWac1Y21`r^usIWQbT~P2CakX(2e6X6hypCI9$_<#Sn7&Um+Er5NHMidY*m$n*#Zd> zNlKbmW-^!|xpy&1(5uF zgP#IX-q+v`khleR0fKAJ(M5T0HFq$PuqW*gKb{>FIT5laf|C;^axfG;wYkMZQ-;OywAuIt_1-P^Zs@9u7cbHFEK*!pv*R_9&*50WY;+sz4L+tdOe zW+pMR^TqkBIRo(a>+g)m=ssO+}sjFE6Ky1Q=P)|PaOv4~zguFUA zF6@j1FiBxcBL>7t91LSX7(S}#?CjBG_2m5c@d>!Nqh3ZJR2DlD+b(YXD9+$t zY@wN_?R&Iyzux{n(c7up0R@yD(7`JYDA~kX)>Aa+!K@Goq&dTN36yXLQ*3%N3_1d8 zgp$&3wB<~fg={a6W{-{z|NGC6e(&4&|M=g%_WpM#KYZ=~dgBkicklh*``M5G=chmW z<B>8GC_9v&_hGwmYcvRTe*2bBaMMbFu)yRHMt#~*$2=;7m?-R;{q_wU`g z`}UjnZ{5A~`#=1_{#)-Aw;uoW(|Ni7-CMu^zgMq)_ozX&xAVpGFTV5I_^)OJ(b4+MzEan7Aj)Ag2^2{u^q#{>KE(|b`+shtYi4& zy8r+n07*naRMh^hhX~jE@+JKbGos#uwc4rsTBX-t#oDejz-b^fcpsIQ9WyC*MNx!6 zX4GkPr@X0t_H1!5Kc1&0D+v{K0qZ=?X31zY-LaCoZow0&Zr@mz_~JDEKY#c9nci({ zU3M@UF(EDjdF8t1w)Fd{bM6iAZ8if(0K^GST!^Y7GB}7-M9>asVGFZ14><;@+p>_; zop9u*KTePS3qATDo*sdg@YrA-Scu-=sYt!S$Pr}~MA)OdP$)gnvP*V>#x6c=e1jVdwctLZfxyrhk`=j<=on~ZQ4cKwu{B$;NaO8k3K&*IB;#v5)pG? zf|w_BHB00%FcFcf#x7@rMv%ZLRW;>q%4;V9NbXGpihyXKX6dYG8=ajNwFz7q768E9 zSsZ{mOOdZnC<4IVSutWIQDgOB1hSkqjUsox>%a`s)ce!>ukY^P^is@PJpPbohkEj~ zTOPGIuMjJA0f|5f+=7(Ihuo`zoYNhY!%&>yo?tGvDAQq$)3P|P%Ck{*GAhsOVpeh^ z+60e+M5G?v;4RdB$>G=`AY)ib;$E2n%7xcN;stpiizyW;#+ck{Zw(5IDcQ=&2asAn zs>s~bET(8KVgZ$iAP~e&p`0j30)vcl2pzi#oP@Y?XFsR_!pMoEm(kfE&SI8ICIn+r zk;OP99$QJ+t*1ApeEa71t)1!4D2_urqORbS=JT@PvaH=bb*`xsRDrAcY%!mACnx8# zv$NPP-L)p3jK;B@5pviv8-=7$PH<&+OGzP7LgI4C)j7f}mCICiUbM!oax}?`v0hG^ zavxzj4pWx0AdEsWDW-K0LRS@GRENo^9FJ%+_N_6E3f$YX@kquaE@}$}V#3i$_x$kq zi^qq@XUpT`cHTy!5hS=uN=dlwF^4_|CEKHYM&3-)0vS6K%!xcr2Bd;EmNoPVnQ34W z03u~5Bt{H!>mU+PKKr|bqFXM{&d*LyPv?u%uItPaF$$h!+r!OuI2~|Ke(M7tG@sOR zx-|m3xjSXS9qJ=`V=^LQDxHa}FgF+!P8^6tsBpNtcU{+ZDWzn2HDfpvOY2Oae=~mN%hWj(kxnSn)kl@-T(AgfB8qh|Bi6i&La^OA((lm3>sbB zC=xkyK0&)OBPC0ztEy31mWxGmbaapsMx(9ibi0tC9SETiVX$#&&aOrTM#}_H=YS(| zR#fJkn$+E)#1tmWW_dJQE*1@(Bvf!#)jqYX1I~SvZB{Bq&co^eoYb>Q5uoN2#EsgN z=JR&BY}62nnmm@l%A%Z%!f4E+F$dO&&Nxz05tT_bTh2|yeBK=&9hrKOC2f;4K*X*# z@F}zB&ju|RFqK%J7I`D)+txemaK65bn{D7lu5{(|ys@xTfIFikR74@itQ$EwjAG6O z>co!7pc2IocrMX9w)YQ#MxG02*ay%M`x*CnEs;WW|h&x3ia?d9|A|j?R?5FwM zYS{^FNMJWtCzDWuvbKoB#rxUH8BZGuU46gC{Qv+%#>*=x(=~XAUBsbR04rgIV+=VI z`+o#rK*Rc)FX2}XXa?(y5HNCgF3Rc7Xf#RPvYDUHmdmBa4!v8vXMLzD)T9(wH%sQ0 zt`MbMAZek$Yck>a+G)K3 zDfbV$@0m6JHrSt=<0Rv{FUISxivYVoI^Mvyvo$iHsrjH72MTfom7or!jtC@>T&Oa$ zH+$Uu#dtFM_2DwUN-ObVUyaY)4=;}CvW=8RoAV1ELGX+id*Sfh&t)jg)X>-(rX-^Zb)DRo#O3yMa`*Q5?ycQ--)#anz>;HsV&*~s zv`mzR2L!|^&?5Ik_FQMTEK`m>2CeYJ+^cEz#2NMG16vhla{>*!Kp)`_khl3SVjAGY ze4Y{jmov;HTKclL2tw!prrq$EQ0; zSAGW_){0B^?MkX;qX#x`akI6K4T}X>jhTF`8~ja7aKHFN-dG4OgBc^{ErqyJUX7u01dn1>3|8pC-SPZU?|ccDe*T*+D{;AOvJZRR zWtPpw*Wab`YT>+JHb8$@%LN+p%U|}dh5B?QlIAPQuVtG5^A^AI`la7?H}ke_$K#qv z0L`yoe$`8k4T3RDpgHBMQI~*8A4!fCV#_I8PtU~cj zyX4l!6kLLf2uzU}5io&8ot>Q?eDV17(Gwh=REuSFtIJ}twNs5ot$P=vxd@XeF*9=@ zLe290{nog>+1Q97k1DT*CA)!(vl!chP(>x`oL=mnq&fy|NgkBlQ z-Q8&jr}AD-xo6gc*n33JvKponF?pYejLCM#b(^&A(59HoqbEz=8OqU!0C+(}@Q@Uy zifF1{1}Y0Fg*g;uJuV6{P0f6fcXIwlL`i6%sFN8HqbGM8<)6q<)XK2t6?upq1S4=+ z1XGG?L`G!90Zs{KWQn4KE0OVZclXAPTet7-+@P{T6LEfulQW#0ot>Y}&lhvFaoi~< zg+?9LckkZI;ddbfqAYDk4ib@kbTrS%a84XY@Imeg$cAzjTKxRcfT02v|r&0PhpbnO(kt;Q?M~Jb=L>?w_U$0MD@)Q1TSWlAQ(S z-EE$nXd9Iosz^#9RqBjz&!=bDCyI^l-lO_1RqwdpG8;J=m7Nng0#e)gqQ;rGPusIc zdVb2L)o81zwlUc+CO52{wp;-nEy#-i59|UKb0Kpla&r>x)udNJGueCT+$(d!*xAvC z+5m*hMk%c=#FegLVo(W}u3;;y#Fc3|JD8nzCl3zr`rpc5{?V;BZom8Q|LR-s|LCtC zfB5rHKlsVVKl$;akAL>;(Szmr$)Y`TSL2=nE)F4>BdM8oi=)G{Mf1t$pO^LMy>EZ} z{ontCzy9mLUM}aq_{A?i_{l$g^wCG>hx5^>h)qn<-64WfLQ+yyVF6Lwwa=bCJ9zf& zlaC*K`r!87t=pp;J2R{2xbgb8e>lDWhvkhoPPLq+IIZCYm7`ErC!SVWnHln>hUf;*ck^tvdK5!FtN+;G zbPeQ*Rp4lD1j;gqkUOF!um|BzeG&cmd@-BHX6ZsyG52W-1VY}l^O<&5l(+X^ulDHS zWBbql`1$ks&Er_M8qq7mK?rWha{B!bZtUiy$fWzt(UnD0$=!RW1lU}aEP<0#B1-P6 z5G_IqdS=Vd&c65uJ^DGiFMv}C86eF=dgy%5o(bwFrZan8N(Dhr1aXb#3Y4J^QmSfd zV^I`aJ3HIk+u#5G_wT%RZ}-M_H6Bf-m72|)Q&rvCsmJQp$0c}-aWR`Omb0IK@Uw%1 zXOEwJae8`8Mj>zrAp|CKn8M86ix7y29cE_4D@F7R;X*6I%YYp~6KN-&B*z-|8$zFO zweQ>2h{!pB9gF1xrEpo0aPDwsCo#u@_R2eVZ{5B_JGHe7JbCJ82hHqxYR(W(fHOxc zV1WuH8uSg_;X33FbaNtSCwBxS_m0tmQt;CeAJ=qT@L5eKHI6HqSLjNQ;!Jf}z$4kxt*N-(s%dLdZdc*Wy=q$8 z*0>m#D4>#B*itR+Y;U#AVm4a=N*J`e#xs@$yg+z#QDH4iMB21#}a5<@}@u(b?QkPVeOu|%$ zx?nFzOQdPVcW#bv?eA>wpwhao0P?oQ(NTMRI)8F-cyxSnzR+cxmaUlv79kIC>RGv~ zD4I>dw~K*FIqH`j8!5|a;}tQcoDet9`xVGyZYu|HezJKSJbCh@>$+t#Ynmpd1Y~E1 zyp&q!)j}H%jO+*s0f0K-o^pgG5g%+AQ7?T z`5B1XX0fw1sUXdAwmlku|3|;~XaD|Bzw_RGMkHu9rZxfMUTShfWRe^p4@H?$Cqg0A zW_o%$pU>whrO{|oRaFSwhd>!TE5@(OusL{kXlaI^%qXe5JB7fZn6+uq#h6^PN8ilN zEwi0`FxE#~cNY^*`F{CZ8mix2VEK-N`q;2VV+dO6t(ZsT0P^$w3dE;(}~R5ifivhqv< zIXc(C0yqgXkrYK)1*)oQdq=9GC?tf?voVqL;|K;r`(nvPs1wM^@+$_!Z^!|EfiCu2 zUD^}@2#AOzgiu#CJe0*^G1rt*+o>AJ7$hRhl9S*P5eWw#jwwVj^_y?rd!2q2Y{stF zvEIzgoX4bylx4Zpl*|}_FavCGOTdtRsQ2)Lhw~R4M*U11o714A%kWF?r9qapvW7c5xFPJbZ#-0@!sxvif3)Y zxSrm-ck}+e-8*-9cd{rr%7(wB2Msc{yJV5_s^5Y(Oz0KMpc-#Tnk3cgZKcIARc z1|o)-5CFa6^I8|+1#i~uZ{;_+Ff#P!7Y_Vir#cK#gM8(4tpE4RU6|KuoqwJ7Y)p^-=#_u#SE{%#8~1X- zw7stWSDd03g!48TVb}G~bvM(~=8-)azq%o{iT!O>vT5RfX+yrET+^TaO+BwQ4|kA_ z!UjJV$icMkU)4jK&jRbV{i^M`T<3MUkYBl6H$DNZz~CN3$VBv4D;IdUn=^EinYHo3 z%hz*>tMszv()yF956n`G@%;RJZ*OOP%%F>=R{woLPX=6BlUK(%4ZpG?WaX5W46qwH z$c@~^%*ayPHBGaWQA1p^tEZO4UVLXmKdi^60ar7JI6J|>mTWvKqZLn{&pv$cX&I=A*LO z+1cCK*{jL|)&a;6cRpLPP#FpjZ164GNvSK_cF{In*Clm@yMdX_DRVKYKhrvT>8jOQ zk##f;*|r}Zy_4h|KkQtUl>`rgCB>+Tl6GBk*A$J2n0q_Y%+!gHQcS5Js|y}gwG>4a zERkwlES7mS>fI>rjz}*K9>;p*uV+F3$1mh|Qoz`A?Ck2oe(n<(?jh9xK#5_LrAXaC zZb{X0cng>VNla>vuG3W2qtR%xwY|H)zrTNbI-P<92Zxv~aeOj6Iys)5&zsn}d*Kvg z67`%8*$0#gG%&LBQQ6m1&o53x8dj<-yqMu#Ua@rnqKyUIH-++e{U@(}8{El^TB_=7 zHfx$Dgm8L#y1l)9^XC5E-d~4@iJY1H{BzWk39?I@L9^K`buq@Y zSd2!a(P&&vCX=ElR5P&VrjG0kFec`Um}zdG_Glt{7ieZ?@OrCyfgYf%1yGD#AiK4< z^XO=Pb};ua>LPn8%;6}CayM?@_mVxO(PUTn2GOo!q*j2<0Z0W08i89V5`3nMM>zV> zy2Y{>Evqe_-Yxg;*E@I1datFj^9k!sPz@h46_Gm3S&dtF0~{3KfwTZD3(fcQi2Gbw zn-J>iZq_DT&wOO39{zO)5hIpL#4>?VmvH#JJ3l%3{NwKV!=v}VbNBu4+`4~f=LdiC zCx7_w{^YY?{N#gw_-`Nm^nW~i^x(4x51u`HvRp2SP#{ntox;p~z$}_Jc6Kha*~!u2 z<4+&lzkmPr*YAD%Tkrnq5C8ASk01Z!r$7CF|I2^n5e3z*>$K@o*Kf6Ik$Uq&g+#4= z`03|A|MX$Cx38m{`)~Z{?YD02-rny@c1q*js_9N{?2q62_Px9J31ckgD!!P6AQ8Q5I?|qEMx>h+*oBj7%mdJUr=ZzZ4Z!#4F#0-1x&f8WiTUT@b2pOJ!mNWEFJTx zx_S5h&h2n`?*I6c`QQKj>8#pqJtD4e)UQxLE)*Wz!h_}wvNO@(9teRD0I~#)@aUez z)jdV{LPV#b@$;kE(Zl7F&v1Uy1MSvR%3dg&)H?``SVTCuXEAByoaEE#PG{CMOHFB9 zPG5ihweNiA`}gnPzj^D<-rinW2WK)%r$>j6o;*IE&xFeRPDXWI*Sj}v-QZih zJ2##^fAY!4AAS1plf#3fF1AL@IoG|pB^6K>--~9dnioAzea3Xp6ESZ&D|c>hi$+xq z>rSQq0`L1$64tA=Yx0!1D91%7$z%zSfTLikCZnp{e|x_iV`~I%aP)+Zp7PP-d3(}f zUec0jX6^-?h!o;1K~s+0Dpr}>tjFyP9>u$WWx$LvBX3L0YMvJ~D|jX}6I!x&q#an< z!H}%v!=8f`;4tj9H5SAqWHrpxVWkiH#~Mn1qwdY|$JZoSmMY#^rgAPh-{~%)Py8W^N93GFPVz zU9yQZR4vTs3A0E`EfyXYE)Asdpd5@U<5IZbaumuDm-VRL3DtO1*Hu*&T!?{O#pAfH zC*yK=r@pzjwYyvIZcip7D{HD8Fq|*w+0(-(&z?U&JU%&{EtajJP=~4z6+lumcgf*~ zpp^-I#SMH-S(_6BkjI>vSc4bR%-z(?kw75yPW>2D*QJ!w^Mhxqno_5#jy|s~G3&Kn zt<59rIvgWARB}t;?3r%~5Xs89*f)}xfaFc5DYd%nT2*p)LLgzlvsUpC%9Gu6oYd8b zC=dcXkwXYX9tf`5rM52lTkpR47k~c8Km5V_J6lja2aH$%hZ|8p3%;aeRp$`GVzD?m zIqABtuItHU6ha6g5Rq9H?&xWeL;v@#$07J2r-2a9-fm}@z-Ts`Etg%4QB||`ZVFW| zicMv&O`~pIxeuJYyfvm2+cq{$OsV(aX7Wo}R^v%Mp44SY#Aa&l&RoP8&Alu}4r-e2 z{QP`ApKG$!EnI#;>qoubaNQLcP=)nLmR=d6?Uj62=grGyHQsYJ0Y+X=!~k}(fy9|F z?sE$`gV+Ek?oy&aMG-<-lx11eRbAIo7BbqRLPYXmN8N38cPrcb;=TMD@TE;pNZ${e zKK@^={)>3X`W9XdzgiL9n2A9pmCS5aRhDJDY?iXD_v`;jb`R4fJB(cQ&a&F6&NTlnet5N zbG|SQz0_wu$QEZNGWBjYxVd|??4Gp;hlhusfByNsM|asUM)P6k3Gl#IWsYn6aX?Q3Krd|X`_TPgbFNe z6Tf)+Dws-E`z4^xd$;}&9)eY1))EqCa$yxQMx2iTC(<)g&o|XPJ`;&%< zNXm}%{Lnqu|1!Zjylzj<3-c?kZySTdH`n3S`nKXyZhrsetG|Rxf7AV$+q}ks2Yj_Z zZmhf>>kF=H=o--_Y}E6rWy4>9O@Be&DOS7QuUc}veqVtNT(P04FR1_8{=5dSzT{sR zdf;kLZhBa*mJ9wS05r7fYvA)&eS);{TfbT$=!NllWljG2_5TZ%O98|$0>{2q30J+p zzouy5-|=!`dT+d5&*A&+D3^g+;7Z`mZ$w#fa&kC+=y39K#S{F1G*$( z@J*LtGrRoy%6@A17~}Er@f&ZvPV2&7dS8xfx79EEAq?ois!*HS<+7YKT$O=Hvjge+ z%dd{l7v8ZG6Bi0@lbp=s$DbdKxI4HJ_P6o&TQ{e5m`uhn(l(Ln)_DASRX+{Kr!gM2 z%Y&vpUC!I)q&;ITs=eFyQ#GopiUZZmVCK*#1BN3T?#L)M6BApToRLE@vT97sh$oZe zL!%NHLSS|V?NyQ_Bv0z8jmeFbVJc-nd#dLTpPfEcVF-A8Auc!;2VJa6erIh`VlIx8z|}$Ws&;iB!QdPJ+~6|~0ebyYhOh^61_DDt zL{LzI8w5dEh!q~aF(pHA!gyzbhGWY}ZcJT#pdHr)laHp~?-F-HjEf$NiET_{+>~u06 zO(qi}_dI*liAVws6$~}>nC6!(LAK%jwc*tWMy|r*u`5H`->z>?+h@;bQ77yZby9~q z1({aUebga9g(~>ArirQ~N0yQXIgFqdf|sF7euCvgEI)>wBN7&sEpN56hccGJ1Kv1iZ{1_jB61wjA}Vw_-y5(MO$q0Bx~ zI-C7Qpvq&2))6>x#bkv5h#!1>{QT(nXCHU(y|MF0?@xdKTlmf&zyIF*?>~9?=Z_wI z@K1mLH$VBGKmPRNj}8wGx@MU=B`UluN!U|FY#d3u2%)I)(+4M?Klnve74N+L_78vf z2XDOf=8t~#qyObU{2xF2@WJ2y&42&smp}Jt9EdcT#_4EmmSUR>hz^U{aIczEgVa2} zDbt%#s-+0-(%|z)!Jr5bpaXr20j4a}PJn7Zkv6p^ ze1H@CAu`McCKL|sw{qtTlQ4g_F|bwvATKHxvH<}OumXY?3YIw`YN8+t0t->0pws!{ zi^tF7vLvf&8HZ2{h2)(gDpF%}uVw%K?OXRJ&ra~){x1F9PfwQVhLt4%3_fqwtbqAK zu)wdhUWm+H`ZJX?ArP1pDZx8X3yV%lV28D%uoOR7oIhAR`v8jr_!6)Zg(0qk5-$d> z_kLF9qNzm3%|exbhwgQN?qyR6FAJl>+j^v48r+UJ^%n907*naRH^TA za!nQ!RWb^sOHWH^hq{v8?cMD#n&P#6bS=)G;_xXBpEZ8mp(W@R7Qv$X&xIBhDbZZek}se$M^sUQ1*sSWaAp9Z-*IfS-j&Vi z?nCrvCJM2$2?c{2S$?1)gxE)AuJBBEn5q+54w!RTO3@8&LdujRSmh?c3joX{!a~SC zXGSukCb>wEs_4}qECz1_#nODMqTMm?PO2Ld*%_D9T1KUFJ7Y?&aE6kxfVp7idE1H< zQWo>JIX*f$JUl)-Uux4$YiAf!FXU=Q2B;w=H3X12L8{>|xh>_ntW zZR@A=v^;O09X@;Z?BMX|xM?~y7)0Hi3Mm3WY6i8wm))IK{I#z>4P4zi^WM5j0kdhY z17OMIOER;rOY`}BHd`#0%RFm*WoaOjxAaxBcJ@}v3XU6qKQlF;*BarT-sFTuvxwSt zop-S{6(=eN^VvttvE7SlPGU4-Rv818MTEizy|uoYzF5RF=iKF2{9MRi&`OEPIAC zS&N97LmTaUwwRsIyDn`??XB+avIF>H@geGW!w&q$;)jR^19xo(4`VWi@eO)8=Ia|H z2#7%J{V|7(s1PZ}^>{R?MpZSc%d+H9EY;zjM^X0T)4-41c%T>Fyi)lJJmH_cyefWG z6on6=eg+VMgAh@*Qx$a;=AkLeu5D9F7E??~LcbB@ioM@P!95U=EneENO z449g*fJ-MNwMalAUX?PL-ne_~<{NKL?%t+RwRBx-8{MSrrQI*}^VM#@gjjyf=Q7v; z{ri<+aIxA8K;oCw^YY*SO)J;-^KW^%4v+Os3uFM*@alIxEZdiHtyf+D|F!o2zm-d6 z^XTynmdg^*U)%e8DFcCBU>x*g{yG=br6@oecn4qp{Vy#q$cV6^_x%+!?j`z~u9N5d zhU$NTV*V@k&nAOo&C`5gbFN1BUTx2n{^WN3D_N6Tj!}l*X@CD8JGQf1W_UiLZ>x;gEvBFp0T=@Bo_ZLGt)?Bbv{q&;S zc!}qA-S~V#MDNuG=J6TU-+4hi@n(4$*R@=*^_>BYogN(>yAwf(R!GOHHtMhPFvLw> zznhX?#2^d^$n;ldcOqgVb|V52*tKnz=T*C?%TeGJJ^b2oWqcYCd!&+9vHk>SE+?HX z#Oju(&riC)JAeF9(cHbkA3yo{jeEQA-GArK?rvQc-U4kyUHjH_JXgKZ%67$vtsQmU zdDku5=ILx%jCZ!SceZwS#^W&K0 zdCrf*L_CFSuvGIBVGeKAh&Tjrhx5mW&wl>!v37J)z2IKQ9f;0O4D33m35a%R`{U_$sOFCoN z67ta{5c1#*l1A(dN?EDNNC9!uP%zllENa&pB!uzSXf&SOyLWHr=6Gj|0klgT&Tx2i zc6fN)b)BoFlr%<42`T0Dx20EoYEm-l6DZo6({}NA&pD1X2a0YSuGY8Pr=kutNNf@H zZ`US!ju6ey$ORsHF18Dt%sRj`%(rO;6=fM?eEj6|r_a8aPN)0(`*-f#+1lBmtg6U4 z28aiJsbRVBUP`g&#REiaZmP+mHC@}rZqYQ=NqPJB?V^yXs*19dP~ROeG@UC?ZP@oBMkF`D0a+=~#>%z1 zljV~wQ!j^pApG!NhpfHQJ+1T>Gm`K+6L>}PKlH{S}|XI1&F7@WB_7Ns0v z=&m40);T3-@+`qEMr@=oUu_Z!m;ax=H*J3?$*;y3`Kx~ z8*rz(Dk~~7GFJCg*0b;dOFd>njV-~Tl*pLO>uRzmgPB;W%)GJ*L6b2hcDws^ zH@n~6-#_}r$NR6}tA78zm)`pp?!5i(^;h40{oOx&|40Au@drQs$DjW6(~mxU_~h}) z$suAuXW#^8wg^N@@Ib*tPP(@H;2%Ev`9FSi^X844cVB<+M}PLld+-1GfBx^DKKkmf z|L?#2#ozs8y8lEF5B868Clo4@S|Gq22HU_(lh^+E-aCJ`efv92vC{^>=;-*QE?x1} z!IK~Vv@Pjg{YLriJ+KpFS;Rysv&Pi1u#gjiK)Z&q(k#(Ls(``@b}mN_vRHsJ5;irS zwVxlL3I^0jXqC)LSGX3O4{NN~o%Pzhu@zg*CTd`)T2|Eu<>c|JNU|X(BTrd!t&8f# zkrX0@0gH(J!?gc2gm%PQi8w%F(pI}jT|lGGwr^b@?cI8KgdhK%{>{%1o=hh)+>6#R zk@dKHGc_cFDY=b1u+6)`=`AK0J5U4&2{2|6PC$fpK&uuQ9YA18-ghoN?v|e|4?e)7 z50Q>wQ9xwQ%yOzw%0l|<-4+QEGdU)9&c_&2B!HOTx)SI!h_I%!`!zC48berL)5FQBXIC)6 zlEH}j&X}MNxudz%IYO13XPq&Uao1oM*`vyNJ^Sil^X8EaysCd$N- z&>7%jl`=Q`^l7%BrD!Xddpj<0SlL0rCk0IjEdZc{MxcpkSv4ngvyv17^r`38#EZ=J z=d+xi^=bknC1r3zqF#fT$vNkos-|QigcvlX)ODl^)f~uUW)=}T+Vcn8-(p z!HCEgPD&OBX23M(aP1No&Iu>7sHyYTZk2vq+Ri|>26BDkcgMxJvXYWeBPkTl^g9Qix9Zw@Or z84ZR502DfFyE=6C$tRDe$MwdUL_dA%v#xnx?7iwyx{CZbJxVSrQQ-y~J_ej(t6RdwmSa|H__lwyaJK z&C^CN<4-x%0<{=Jj8TK>yg5qHlvokL1qmC)oXEqFwRZr^1ieg>^F4^e2uW2TAT~;| z+uhlE`;FKC;?Mv1hwp!9GAuQArplaFNvSh?DU)7olXFNV%gMf>@}ZdQ={d~GhLrL zi50Xav>8a%6l`WOX^hFTxU~_HWc9-Fcsv{yW#yUKEWyAKkwP^xIpR_ki^XC#TQp4r zro30rzjm2(?BWSGoId*V857QZ{WrE1jaGIpzC7H*XFDvr0kq8U8jv%)`>GwCCfS` zKt9vt-8wjN--v!NW^e?zngTl-4E*+%pNw99=Pkdz<+rzkck>t;g_MJ$@-ZxMwZD!y zA1yZ!$kN_T9=3(%c@d}dX;*l^Erzn8?1Hmdqu<)4WQo_CR%J8j8Tp}?ij`eONZ_WE_a z=|VlPeCOgN7w6Bg@fxRfyTqQSJud>zH{0{qF8^P`HX)VYco^7iE=Zd{^E({DH*1$5 z4FRl1)o-ua`S}Isrlj8x+eGoKU*NaD{r|b`stxNJ!FvAsZ|HZ=_Mg+&FA7j0q8Q`x z@$qv`otqbIF00RpjLDO=5>`sVF)ruLVqR7wDYJBvURuzl{nK!s@tO6X0WfniZx|%9 zS%;&OB{lnBP1^An2e)rjZ{2(J?(46A>(@Ohuf2CJeI<-l4K`734zT_lNq!W&RM)7EP_*3uVq9587x6fVabx2 zk$}9JBLO=pony)jEmka^E}wq#t0y0QxqNtt`4XW4SyB00w{8`Ki5Vp|kU$)mvqm9+ z>|XLl#K!EDZCF*;wno>l?N+5%Rq3&-Fl03?A`mF6ObJMvw&^KZ-e($CQMwRyHk*fJ zDFIQFDdj|B#sb!L(3gPB0|vNPV_uJfevuZ(u$&SaOhk@Kc9Lv7oP?OVR+|u0mo)X) zS5;Azz9@X|s9o2E6qA{w(|zkXQpJnfnvt+B%FGzN9ueyoY$QZI^%JHfL@+XCtGke+ z59W9<9&KIQzJ2@U-QCe}WB`^mjt_Boc(RyJ+hyIhZ3+>pF-DCkKRZtlCXPT37o0+J z&)?d{7^HKb67?G0r(QV%W0g|qisRNZT2DkQD_os5=2d33m}awCjB!4n7ghDjYxkr$ z%?*rv_@Q1C@;q)79HSDElY+d#*c9{Gaz39g7R%9SxVyW%wKc8=Mb8-1WE4T?E8KgU zE`PebahB87VO|+#ss%ADAT9SMa(mZ@gSJZn?2!-^WCk8))mA148sw0j5EL+0(zX;S zTvK2k7Z2L$XK3$(pMp*hvQpSmajfAm>>nJ@?ql?D@JgWKM9LlKCJ`f;k11zO7D`^Z z_g@kxsDhZ(Y^{{V2F+T*dV1qI*wjbX6`4kCIh&`E_5EXojUi%31T~~!P{$={OH1g~ zmrsu7pFMc|;it#1+#Y=I&AnG{kKTFZ?jL>Y?vMWMfA!$Ak3am`Prms4lfV3{|NZf! z`wxHh6+-6-qtaWlu1i9Q(KJRDl*6iS;-e?WkM@81iwDQA{_QV*@cnnc|L&Xr{(t!I z{{4UZUw`q-4?h0z!%si{+^y3eU@4RyJ_urnpx`#1a;UQos1!JhO!NFWvfD)U663CziQ)p*4 zI@>)~M{`qx5@{xPuf4ala;DSj37q-os*q>cn){mz5-7l83NS+rU7wV)XBZezD43Y@ z-ir;3fP+IlIJ9NsEeM%Yf@<5Lj?|$fDTjByb$4`q`^gM{`M1YE{>lFSY@FO~(;+Za zbi*;t5CCU$bDmk#FBw5(Vw#wV4W!8W&qzS%kyoW_9nI46tND|k;phXzN6BFA+ zz7dVr+TlHMYBh~ej4>qxB>OkjUqrj3Go8I_tk44fnETl*n@7sG#FO9gRNZ*hET=P zA)3R~-8Ws3HA{365vC5wD5zzq0^leIMjTTG6C?DAasfkYv?MGgEuGFwniX_h+F^mC z0w*3bP^%^ig(bB_76Z)S6y(Sl$uldPAfq0b*r*r9A;2!~{R~Q3)x^v!89>ZTYsCmS z=b}?pW$t2(Atcpcnp8n#3L_*~g7!TNDW#am<#k6Kr9_!eo!F8wIR+yl1=6;%urrWb z+y2Jb-`Fk(PDh0eTy)g2Mbb!!12@XBBQPgIFmy45WXH$HC$s7C;c?qGr7Omx0W(WV zY>6#qj2@9C;zVU~Y*Iv(PPvV|?Bb$HZO{|5$2y#29MmF_`htsruO_Y-GCT2A;j2Me z7DZ9|qAUhpSgbCX%F2y~#rF32`i-3%dpnb@a%WPAz!8FCb}~OWI66GsUo69uC+%Vx z+O{PUl1f!W2r0E99!Q2hp)4W8DM&ZDzZ=PFO6g*;L>D&bUu#V301-j%zSUgSvRJH{F|)!nX^b(1*mP~z#-ORAR>>Fz ziDL+uOaU_m6Ooz{D06&QS{VW&X64LQCo3E(&l;BBfB*Y`@o)d+y|-VV487xIj$%v~ zcVEwFO!WIDYumPI8X_7Fhr{78H{EI5(t7)3c_+RJ>^93X)|4}+C*% zWhU<$JCu=jIb3j_qnW3g9=5BdW}2yI-HJwRNFX6H=bRIsjLNd~B1}-^5lzG_DI^gw z$fEA1vwB%K$soP_OOoCRH&Qlw5csN~Xa~Rh=(-WFvCocr&xjDEQ{>KmWOSZC73YFXb1gb1?yk^F-oZxjiUHlihl8w4BZsNBeP6D+8Lym^6WiLHQhDDV@vycrE~B zq-Ko#7YJR#YV#vbh>()S*u@w>{`iw8PY&+fx%29)_wL-ev%S4r_=30-0yC>>(xjI0 zuDY5@*7Js4krV6mHaGuu{xxmBe||;yb!_#!XJR8D+CTtb5u5o9G15y=Q^q+97Bh?U zPB@u1%erpbUw-=eXJ7p4qmMp%^!Rbx1^_Icm=v5WuC%?(j7SpT5>kfe=KnbmX+Lie zAu#|>tcjq^WMn3$6hY<(etR^&xwm`w_F(T?b#1p{nnJr2qA&_kkzfD`uj;?q)K|?{ ztHb&E_g}O>Y`RT0U5l$S&xhr{Zr*#|>wnXXzM=N~O|z@w1!ow*{cZ$!@zK5MDay9l z6Q19$?B~C;e-(D=IQj+$*J(ihT#)(KGF!WkRxd7(ey;3{e)lG#5SK;hdW7kVe06y}#971OagYbA9oyFK)t~ ze`-5}b+Yp%|5KlrZ78*EOpz;;jbVcaeC}s9v91>onwQwKnXDJ>3Jm+1R^6~Od2^p_ zdiwXY=dV_;93Z=>n|~%B!}HjM{+SEAlF{3LeE!oj-`ZRoH^=OASf2xf0VNVu%;$4p zz3<%IovgXP1QQUgF__O>O?6e*brW$eC-phiRt8!2(wJD=N)v*nLJ` z!wBG>pLF`W0>Fr46p?{SY*ZJ~3_ESJTsF({czU@1;m4m(??0wREuCqw zVp3hd`O?<*c2thpVVwc9rbHAi8FDO`Q&Q`arKka;iQ5`g+mo?#97D@&!dc?cEJp=2 z=e^3YG4LvZC4-n{Pz(xj$w){-)UNC5E_7X&V!j6kk)Zd9E3L!8iX64dX_j)Q1H)LD zO-U`8f*{1~h~TIw3UTJWRnat3mKp}&i-Gsz1SxcN-F9`S3Ca_Q5C`dE2)tHPpu}d)aWihBmJL9dr-R-?=JKI#2 zsAo7n*2Def$;nAQUpDm;YM!`j8cS*^LY2rIOCgS#;suDFu1Sf=PIy`&NwfEDb*#!u z7^nx$uk-_~r@}yp&Z#L_Zf0HEigQ`mP&Kw~y&2wFL>q@?>e7_sG_&zZ!a#Bk+SD zGxD05U{D(Xk*G8xHc%pDqQ5O2mILZ4%tHP7;_yQ~`V@KuUW%F^Cl{QW)*Y6~X0dsS z=HblEFuYeyUM`3C3imSeHO5XrX`RqoZiY1>fs*z9B&OUR1 zDCclZV9A76B!G$fJfCJprlgv?I|F5st+Lt!b@xw}j}DJM{OrNKTmE}*T>I|3+i%^& z-FLse_sSdZ?>~6|{qKGC=|?~R`@jC=!+$t<{9rLVZo0(i=X(aCNmDDq!;WsVT(=>3q))!L*t4&oljpJ9DVxn{)e9|KY#f4+piSwzJ{$4CZkk2 zGSlomESL~Tz>dLW4o0FxiH$k+u9j@F>JQMIJ~JYNi1NrI2Na2zjm$EHC;QWTPg~AZ zcN!x&@0~n#d(r7`ArzkrARTQ$fleZzzobvS*ZZbNR;_ZdBX#W#z}Uz3K^p)jiW7|(#c8a4i0b_ zse2hqLnjC=tOIu-XI#J>xS~Xf0VF1XnAJGJkr8UP1z|=y6Pr1ki!B@$o)*FhhNAjvrh;KWEFM&9RLR$e(y{f3km=zNl*L7nR9h9cOL#;_%G$y@(!>G=G(-R-P@`n1+jdbe7j5(C(Zd)cR40`m6os&cb{UpU z;S{C}GIGj3k&9FY6m{}-qD9NICeAymJKw}&j`7rOwY&}Qh#iS{RaI4!vMiaMbFT8k zs&FN{!n?xxLTp%6lR>$&Grqnz+1VX!?~F#{qAZ{WRm|FWa&q$I@zJA)PxkkZXYIVk{&DI_IOp_bPI1Hd`?xV4&a+4*SmANig0=cDzW|6B}@8O#LI7(?5(A%x@E zaoe`bMbmYi8Rc|@;4=ZvRpwx$bCIKqmN_WvlcO1+Mx4O}3W1qH4HTkfWz;rwT^mCP zDOo^NmsH>=0Y)VKFf|B^NK&;pHWrj1DfSAA(nfFLPRowYS;h(AOJ~3K~zSg(Qr7-!JA$s zc%_n)Fo8xWwzbGvs3*Jdv*UHu)~8Q)T`N^ht2FZ| zBl+?cD|NwCv)qm*xIzY1IT)1Hzk?@s?o{-rD2yQ>{?{souWbVOp@^{ce7D~fVBCDa$;E$JFlmdGc@Oj^Cla6gAIIDj=(bu@C*7wHgi~RdLgdj0rxD= z7x6D`f+q27|J8a^Y5-DJT3`m{86LzrxeZcQ86px_RP4kRRZ1d0#u(eC>pBaqsZ!nw zZ1$O+rFH>Qf5ywSad&6(Ltk#I6)K;h(2Gv7M0M;uxuPu84+cfGs0O2MS+}z(rIAr;lXRK z9l!eOt9yIbhQm-4t}F-4l8e!NWbMy8D|kl_Y$ZyAEJd)Kl#bue{^^>n@*=jaIQ47HfU<b|Vq=Dhv8+X% zdZ;94H7F${QY9D7OIa1;;b3=bbZc*Xb8mQkk0+zUW*I<{Je((A031S!u^W}E=D6Hn zcgn$Cz39g~5pB%UcD6q}mz`oIAsZ_uotEF9)9pg>7yIYtyn3-FzxMo@7a-g0C%=Y& zezR}){qx!F`J&}-_^8jU_#1xUO9*we`t+dTvRw(8Q*;&_YXMPbPLHZs217B})o~vqj6HQpm7BMob zXlzc7zxw=(#~*(3#k+5O>$Q6?efOQW9hn4Wk3~ymZIP%8y2VSP0CB%n{6-ao*7;fQ*R142GFeVo;<+tRxXBv4chkYwQ{`Ejcrz#E z;j(a+LW*4yW`d^V3fDjAKG;eM1zA~+%uHeZyMSX6g5R37AvTQ&a|3J9rNqggrUt%% z_hcqnJ#Ju?J1x7!4LN0wF%gJ_nTSK%kT@@{D!fp!Vn}F+B*La$-G@|c;GB{gSz;u{&b8}Y$Y^_K_vZEOYbKr+9S)x0 z_@F)6KblUbP|LV&i!p$N7;MZQYGetTQrG4qU*1j9X}Y-HY4~irI1<e;8HIddK}M1*hW1L)!2!&ctX7-j=@Eu6$M9CA^J1)pN8~b!uLCC~ru?MYC{YgNo02gs z8B<2L=t_6a%qYtgn`Qk~^yh^hD`Nnufq2DxF;lD%1_mY&(6$&AV2@gt%Y>pNSFu$T z@xd2QfBESz|LSk?`|rK=O-Wh?SFdw$v^zhgHlzm?cM(3(V@Db8*ar^ zqS$)*y&wJH&;EPcdv6Y3CoCK~LanG1LWD1?x}libigsi$c$)bC`Dpp$UwrxMos(PF z{oOk+?d|RkD_1xh7B(ozJCuNTD40q|BJAKCp%il~zyndH`?3Ip$WSsSD4T+mOhByM zLk(;tnE){NWQ#t;06TL+I_v5{Ue2rj0jK~tSOOTNmV-2_ zsK{le=fthojs<}U5e%%B5+MPRV99|wEgT>F^u!il;pAhBPhFu@cOJ~B3<8icf`!f2 zAre~4bsCHFW<=mHaorw<8I*G=qN=Lwo(3WjKA z%mly@Cra5bls6xw)O)2YAv0Mw6JeTdo~9EalZVz#Zc3suaG;2IVkb40M{}CjNQ5-D z#|^ZEIM5I*y&@lxA;LP7!j#k$N=)$R3Z8je2+h4t9ge)6upT=sNNYzOs0DSPVALh* zK#7SN88$>_Y~~Y4A*nOR$(cDK$0lr9z=3I{h`tCD>rs- zZIwgO!dir>=j4$ePcjE07B+NX)0nIavFX~Q>FnV6U^ZWhQ02K`#~NdE5@RbwLoXJC zDhHKFl9KDVtZmT1&ttiWblhUv*eqxpIgzw9X?RCv%X<&!oOiygs==@K0O-g;^8`ps+OF?@;4-RfGMPUnxGJbn1!>B0WIUItSsie04woRTFZ zQq>rfbLC(#=-N7O57wDw^I9zO%^cq{qc`{Mn7ZY1Ih{_I%jL3Nni)a7_c_F+sxe0A zR{P1*UAhs;3;K=OIAct(>T}3Ft?RljhNfxSwhdiMFd|`b%0eIolTqveQ(5AmcRP~x znkX6DXD}fE%0vt}rmB!}CI97L{OOzDy0<%aL@-H6Q7M6p4MuW#WiPWB<8(T0nr3Hb zXM20wd%sF(atei{(?p_|w~m6QVYD&penTxV4x5h)q#Ddihjm#K15irDvyEe=hb<=hVHbw~Qg zBK2(HSwxsN)Ge;M&Ho=-7WdC^2eMu#H!|3}m9l*HG*N zG?GEp_-yO)CIIr+w$*X<%s-7-S#mxk26Isjc6>D&AciORztpxv(?&vSlWB^oV(N%D zk5qa4&87;F!FUZNMDB+f3nC)O&BJSYea5Nf@M_Wn5qlf#)N7KiT4sPAL@!jvf zG8|U0q9}++GEgLgzb`xQ{I+_h>9VliZ-%X+={=S)$Esb5+C`X|cHLsS_~f(C|L!M$ z|Isf$YojD3=PPoOQfj-Fh|0mBY1@>NkrYnYiAAK8)S_6*v-yeyOag-OYSw0BB;rJf zq=}>&?-W~GTQ~N0Ub->3wrzuAMpiGT7*uecxiqs7)hr3Qsv4LrHgD#tdFe&pe@=VG zLa%yJ&i=*Ct^Kf@6WL`T$KHBi*-BNPHrVm`^YtIV z);Y>>W@k+6g3eg4&VL36x8WeZP@jB#mauy+wju*CUAe8!*5|T$oPo?9yV{k020fAM z;4Zv>=DQp5{OoJE9DT5=Pk*@CsLvVn%DR0nt6Of*l{1j~M2hF`_uPr4SMq!A_M|hX z$4l<_!l%!Lz5%epPhH-gS3R%(`Ch1hFIjvBW%(@J$7SWG&5ttPdF2SWbiCL`eXe*$ zw(%ch06jn&7oR@Pk2qsnu^ca=Z`Nn=)BCmc>$4;AvUSd^C;P14KVN^^Ecq0B1wDgs z+_;OYZr;-QcW}l1l5WgWXRf(W^YwLFmQFQ3c<^9*X9h9|$8PRIY~e(>nQ z>o4DV^R-v6?`#(&r4@w+r{*O^XHm*)mAk$*JX|af7u~dOo_zW#RYSiu8SPvf@9Y*s zn5h|670l3SFk;FsQ3Wi6g`u32|2ktAEU41FZ9EIS1hps})Mh6~2fw=i!w%;H!DZkd>vi^9pUth#P6ua}EO-Lye?&~zcDb@m@r{s&=X*><6R4u)1~c?r_U*?Z6kdZ0NxwJl#L4r*rBeLb9Z>?NW>y6KmF& z1euZomIx|&C1TQk9?Hv>uDB7nY(-dwbO9x0CJ`Z`9A{22O=_xO67j-95Hn&YLPV>X zS+l3Y5>sY}BqC%9Pa{%IEIEHHWvAh}Wf24sf%G295Q0==Qaai{IypQk%W`*j_vX!) zc6PQh-|rM@NDy)&QgYI>!Mczu^79|C*U%ql+Y=R2%K5Mw!(+oD#o9?F94XM%nmmu zu)_MpMzVTxy!s9S1}X$0fC}@1GWRx1G?)fP3{J6la`I&Q_-CIUzw_<8Z{D56d+yfO z?U&!Wy?5um_kQos9(?uj&wlbBKltfSMqhq@cz7_I&72?+wQX%i5QcUxiX(+aQp}G} z<_Bni&mJ6h7{QGx3U0l6@B4rF?hpTHaQCgJ$sYvF70ZMr&@ozrG9rP?vNaz=%QC1# zJnFdM?O%O*Gr4<*|mqc-k)6FBE|bjJCITZ{8kmxs#y(@D=?p z|KY1gM>1_kfd(NJfdIeSk@b}3RrId!H0yoEnT7id$w%`N0S7ow8WCE=n$QO7l9>n* z!s6PM9Ezy@5WMWV>%ebgCQRdWVv0=cL(*D=V+fci+yMani`FbQXm%~NgTjcmfDO4 zbIeY-BocrOsz^bDLaxa5N-=0h8a=DP70eaK8#{b`tGctddt+xj zE>POig_gA*mCjPq3^EWgaDv6CBky8pXY={t$@FA4T{aDvMrC2zQS8W)StvEZI;g>1 zNSwGbUnDAPEoQ;ZqFbcm!ErmcYMxwcMc`qoO5-x21Wkxb5T2Yv-r-}E1B4(CxNaxO*>+^_+Xodk=j+rpCBce9e zU?R@B*@DItLWr6U4i2KJCiL1cOq4fE>J=p7nT3?h%zLS-N~86mJYyO? z5u1ikSCxP3Td)8A```JafAa$eZQCG}n3X7H94E8WOddY1KM_&WbeY}TG)+p$IR{YJ zg{My+v(WbT_GmP6&gI+ey3TvQejuyhQ$`Ol5haaD6T_TyW~3nyJFu`JMqMns>Ada& zfxM=m#4AbMjq_a}rPyFEWy1bxs7VzZO)Z(Kc3mVQN9>Byxnel1Cc{xxm8LD3LM^E> z#5oT^N=d{|XY-SjS=+WT#-@wT6@$T`UDkBLA-2} zWiz9mj1V=Yl*+O=O#`uU*XLfW0~I8jzLYafbm96u^zt~p!asAS9KuQ;Xw8v2^;2E+ z&lmu#b3t5De!ghaU-vZ#gEL+T0-IzFs{CUt0$ZKkNpg~0MQ&3DG-x7`;b=0bMqOx@ z^F=eCwaZ#q%)kl}W{|4J5JT$77g!+-`ln21{7W1D!#=2s(=*hC`^{?Vlq0ge1Vyj1 zgk%sS2v_2ZmtT9MUCiglN7JLDWJ@H=s3kGe6jG;_RB}2fK#7GZrIfeiBz+`I&4k31 zlEsa2L8>|!49rm1H4B`pRPpfP)ukKt*g8VfA%$L`{D2kNQN^R?u7w%n=Qi{olSR<>N!i1T{L2Y_G z{rsz6{o~I+`skC7=OSmSW2hz(CHH%pP5I(wm&O<9VmTMTds;DLfGoG?8L#gZ@u2?a`Uc!= z$*V2~u;Oq$+rN!N=g`TxSf3XK>bxjn_Of;7 z+2vo-hp+n9W+R>(cm0my!o$Cillgb{JNupe&i=Jnj4`FqG|hZI58)cIrj#-v@0+sI zIh{b%$C6nhnZlTu%~EU|?OGWO9V2ZVkFoMtU3E}dxk%5(q$vy7lEEbu!N4%3mS~vL zK+!3wQrBo)bUItKRofo@s(AAR@DH{QJa>b22Gl(}t0S|xMFLy=-o4!s{1 z?X(St%XZN=%SZF&{=s~_y?f*4wHsSoL$r%p5LhG;_YpkHBr{2dWJ=5iQ88g*>bYbQ zx@;RO2BFd8Cr`in^ppDdkh+dkErnt<+Pbzo*xG87CSnG_q}nGbgb_izwnmChNE~Yj zn!;pf>&}hc$+#*DM~I{bOH52xrc2e_ntJ|YB_O9C5(7DMQg|n$vh0E$FC&<`t}(Kt zK@%X{M(?h+<<>4@!lJh0eVQJ3$H&LB#ZsGQK*lkpm^1`RCT0v`GKQ|4qbm7PA_wc% zv6ttvvMkLkZNN&1$e1i87Ga-V00=2DlOs+k_VHcIC;=96&bdq^+T2AE5z#pm{?|i# zwQG$eM;SBCt7*D}gVF8Vx4iddS$Z!yBp*WPy3V){Ew3L66G6!pVk=R^lv39rrJ5O! z9)-c6oJ@2$tV&<8)L^P0?|Gz_?rc-$@TH}$9O!C%|rS2TNK@d=?e3jKVvQYun{GKex8 zKsiK0Z6TQ@1sXIl9%*%Zu=6eNCL&uAWzZ7pL7o|`3QH*`Q-)Yf21PV-zV9cbFkNZE zF~F-cMn-V-5nwh}t{`9}N|H0q?_~Va$_QB8p{^9*En|3iQQkD!AFNS1Y zms_Jv5CBy8YPV}0Y-G3IeC-eZ;@dy?lfjKUPuk+CVyb8it)K;x^==+*qmo7B*eLQkGtv2stKC&EB{hxHu?>!@>`|8y3Z|@B@*X zJ8*=dqpGlxL*cpbk$|p`p@OInkBWhaG>gHlj}!zkBp@mx^#S9Ijg*zjIo8K7>i-Xj z87oMWsiKSM6e&_te06^|tJ|ZKX1Z*fpdin#GM~n~UaD%ewYzg|RF3iR2tWQi{hObD ze!TF9bDg#lNK$q_pH3mqA&Ovqeud4!O#~!lpJs~C2n294jcQ0RC5>a(S@XC#`3$qK zsC{Z_PDramVoW5-Op&aQom%+6SlyNTpl>MNxF)xvnXNSKR&@Z>n7{&GA(3@xrxcgyI%+yY z%VYc5<>< zENaCp$_&Mvs>D^I0uYNGs{sX30V-fF8JQ(wOJqdGl-Nv+yqQZR1_&WB8xesZtmc@A z9g`6WLn$L0&6JqZB@4uA)led01{1T0h&YvUe7)}4dJ#jgE_II7u`wZa-JqbNP=}6V zBU)~cCbxID-hOE`abZ}}fagA{Xe$;R5@LiIAt{T2O`O3%^x($d+WxHo7b;zk6qzyJf=Zq37F6Ics4!QKRh~_9vv>0 zb+?>bNRCm0N-_@)u%?&rC6K*PUZ*n_&*qlM@m&C*9QV!Hd^yJq%&cje#bU8o%odA9 z(=KC-d0&Bxe)SFeT7S*jx~|KCXXjid#>E_ero`xTNT-zQwyEp7?%HVCg|`ZP_s(N3 z{2+v&K?UMnVP+b&UNl|PmStIbDI80V$HdTumXa$PDyY#jgrf}4y_6*PRKey#uPMW$Dq3T^h`4D542fa8)&Tnl` zr0`W$m4iwO&mv09W?6~&ymvI8EB|?F`!Cp5->5xng4)!g)^$8iK&B);O4>2Xvh3Tl6zo8jVvL=pSe7MI#`LL@=3L*VSENKYwiQ@U6M@x?^#5h=O}pecj%>ke zX6_M@Yi(EwaM4D!*iuW~{YL%XnVt_bKYq@cPwM5p7R6l@0Ai~pE4NtO%;tkfW@VwO zKmwwkdXe*-L^2VG@bGZAa5KC2ni{dsW{b~0{qp2^cJJQZd-v|$xqIv2;9xK)XXnRe z3Ti_Lu@GifYgb)8k^^_mNv=F5X1WDre0Tf&U#-=34S*qbf7V&rh%LPNJ3@hd@fbaN5kR%WOTSMlkxEWT^bE_G)Pfe?>az*hr?Kui;4xF3km`~)bKmBw^HKn z1(B}QSGWe=L07(fhqjAuxOCloYrC7mw==J~|5rA7{rU6vw>tk8i}6Nw|GSUpTYBvI z6jz;%9X0t&D4RDu{nh@{_TzFz;qA?Qx4q*{l zH-C8k@(emIR*gZX!f`a1mgT*JgW0Nies+2~ zU!>)HIX??02bc_R9acqfD%1dVxO)zGriA3u5gG|i5kag>?wlxsNHwLpZI|b(+4A{U zUq1fb$96s|TNP3YJf4n@Zr_Td(Yi@OWX=v}W_U2TzyQ{^0eKJ#u;g7}zr8>G;d}2M zOv+L~NM@QNusN%@kwML#FVUV z*Q)A@#7D9cg^FiWYb*Ts50 zeDb7Si>P|eqGo{c&h&SXyAg4g!zB>;B{U-g>`rj$xmlndQ_Mo(y6H&Rg(;T}B^VP} zJFEt=Zf0d4k%?lH&K>SCPJH1GUXseRSpM(K`6+*>zcN0 zyHsZdZ$O9x_l4gKZh+-gntGVH5y35E0Q0q|U+=GU&6z^az_w(oWz)9Dv)N2lhr?=b zZ*MZ06h)EM%m8Fc!X`YS%*H7^n!Fn)Bq;Lu+m@(a|dWO?|kL&-b+7xc<`h9 z^6uTkckdtF`{CdG_v6Q3fA-J+_Rs&{C;#g=PyX=5>5HfHRa&WaW=tWlxKlDuh{oe? zU7$Ro2Ooa$cmMd)U;p1nAAB@RI6hmxY|hujos)u-hXf(-ToOo0fGB~bATC%+f(UUu z0;B0kw+{0)oJnO^Fd4gXmhn`hWPlXv0nVt!R|UmNcofQka7kVgj|v)<<+u!kk}8oP zxOap=kbn?SL@EUmOyD^|$e=)g^->v5{f@s6zU0Eq)UR0YslyJ+v=lM8Dc6mkpY!Pq zv)Oz$KU*&6wRTChb0jdAaj-ufPWMLRu?)b&wis4HaJt0f-`ej!!M}WR{Q0BC1FaJp zcb5PjpbMLgL%0^So7Xa6*wTjFoC#)NgEN>Z2f-ZVNa{##$xIWuxjD?l*W==R_40SK zr~ii86K@wptviH~5gqF4VDCAtAcrai5e8|Oz$6@r-7K+`QDlGb)=z%=v%mW2ql3f4 z#bSMYeB8EmEQ_`?;sRotQkKrk;31H!c3o;!JF_gY*m{04&II0yl7iU?id@Xu4Q@U8 zC%p6EVO`hr*=fCA!a5>0GtV_U`-McCfS|kY;-?JA1W1NEEXQ$egT0`OJQ9--Q$%Ww zTGVH%Zmx{vNCC=GQ4)w??m2%?`ML&Xh(Q$s1Qy21{g~)9$ZQmzJ}95wt47dQ%A65ng|-uiPHc+ zs%UQ#@7$ig`_9q*gYv=1D_9_9Ph={bA|Z=}5D~>fI6AmaTDM)>*3Vx)@0z;pYBCq0 zz``(7WeTol1{je?AQF2=g9WBbtCo$;)_%6Ovzq5gmL40Kv@%RQ)G+WcL@1rhK$wJ3 z5?I?oQS1)~Rg6`ELfV3~D&=rGxp(*0{X6%M_J?JKNQfnIK;tw!?Vde*_WZ^1$;sJ# zv98xCnYa}|a0*UB9th-E5!8)ni@?v*vVZel_%eQ#JGJBc>?Qzcr*+!)Ec_7ip1*BV z(=?04V!2$-=d-qLb7=;UYcisE#ii}vGuvIk#rEKpp7b7;Z+c|8%z>M^yIBTqn7XyC zc3s!h-LhWS&8q7XBh^hg-8Yrcf1?h-lZQlnM!D8K?V|2*FZH8T*)#hf1VE zoq#99>c>BN_aFY-uYU3K5APjK)LMp8zs1Shu>{aY`4g{>7uFfpP?ryGd5E;l=iuI~Hoh{E7i&cYUq<~wu z;VWc8kNhg%kVM=!dQlf_PTK$?RaHAvwUh-yna!A7ql95K7!9kc6lQXBA%cM%Lc}n) z&}nMhZZWSHi&d9YVi4g@t<^T}hR810<|OLt-R7LiTl(*PGvGRZb2qZ&0Kv?hxQE8F z1Lm$^a2+W~~5(0u4k)zuwC(?WFJ6E+=?f7Jpcd2{X? zJ|er<^=h>^IXQdsGk)zGYN4U+Zf8 z^Gd#8bJrUL?03uo-;nRv<+JWu!Z&U=#KW(NC%@?ec)Rhu8c)6wIsc>XH=p6^cwTZ#U#?yf;Lgt^Lkr-r&^VQ-5+aZ0B#^w6gW3mdA5vZ{|Da?|=DY&i`Mf{e=Pi zm-a`s>)s_>C;89NF7@YsBi8A^8uoDG@LzI?zu)s;i}-%i^JHn(uItXu&fGnO2#TuT z8v~en39bJBa_YC2gH1{d=KwdX&zn`1+Cv$DaN(}-P8{~y?&pxKfr*rm_aZq0Ys5@W zAU3B20!Il|hag@!RGn1ZiHwLrQNpV8Z_d`~)32UAIsN$dSAYB0zx?ITKD>XgEa2*0 z*R;)Qsh|+Uw1}aMN2S~!$znb{U(8mkMS6C&eyWoXe^``U6v0_jmi%QF39VA%*h;L6 z!4gVVB;wXwna$muM1B48^vRdMKmPo4ot?(EL)S(2;ds1%bXX2X$+>M(86p!X=Mb_g zw~N406_G$tq%OvIv_Ee@sch*=5AUExkl zfnqhTM#cXA;r_wVcpN}jv^bgL?Rw?Yg$40e~8tqN!m+Q8Jd< z96R9_Ba$7nybH>?egSk{M?_8=@uJM*Wj5qem~cWh9E``~gZ-oFWU@alR`c%k^msO# znRl5d(RH0jv0Z3cArk$V(KhHzJ72Et3_CnXmf+5hIAhOKN{=2r8V-kx#bSSde=?a2 zhr_arF~)VZpmPAfS?rv`G zS;m~*s85k2lRp%Icz&Ej%y3dSL0bx2vE!#`4y=}CvJ4Zobk0yt=KKk{~{^9?* z`{Cc|=+5K0A20pf;tVweZnAwNFi`wi7Wzy2xcgu^Uc7Dv!ly`^9~^r z3V}gH+>ie##eMUH&XGDKNM}XIB>>d|seqN#MK&P_A^7@m5DMx-Ld52gaZ* z7)B&QU_^lvi8D#z8!~;?Qn0|xjMO$DBQv*@!3}UXE1LDVP0}=VU9Z}1-F3A(8OOuh zcMD;PMKKr@gOW>7Kw?z;)#(~f|A0?EO`m=`fBdXnwL;Z{b=xFP%;GGjL<#O&5v*5i zB0w8i#vG~G?j_uNv1kI!4G2V8$T|noEh%-Ks}nphmDaF6YtDY>&whvXGobaXW=~Lo zX|`Rxm&@4TG0@Yqn4(BzVm7_$byTF zJ2SIw`rLJyYp&`U`LQhwZ{*^{0(SQz#+;*K4pmhR2E(GLKwNieP>ycjxqJ8igXhnm zo}E2sB#FT`c%nXgfu7y#aM|*8EJs)Q62s3jmI$VRXG%E8Kth55vDCV10t>7Mu@yid zkP_ILcq5wYaESMikiAAI->=eu7A4LqTLoHc(8*pk zN=4Cfkt8OIsXObu?Yt6(vpJatav?TmPsC2GkvS|^vT#GTV~v}#ca}nw0109$6hTZz za3&Xc{}PA4vMJsDp7nS)5{sUzV-Ubb!=f0(!pDQuv~5$jtEIK8VPOI7fa#rsgCD$q z``!Du_V&sVcd?sAY644OCkC0pJ-KoyNEpKAsN4E{u{=FHUoMxaR^&<|J;X}g4eo8* z!U+&ZREQI)QNyEemf>8(Vx1N>EjnIX(O}TXD21tq5z8=yib9DHNXp1I5){@2PnCq} zpc)U0$O=z~`;%LT(|7N`bLaNqphB?;vlwHs!13|v)2Gj$zkG2%Th?{kCb$JqU>+Dm z4Q5Ja&gSl9N(fs*d)6b~)T`Nmd^VpqZI-t+dh;83`=m0qGRBx$bWPLD=gZ}Cxn8fc zfJf-{K{#ofQVOxW_WU;`7;ef-<^J@Y*^mK=sZCwewyV`@v0k-JQdN)gRX zzvptZtZl$av8vaL#bUl(t5=@AnB*ZB@aVT;7m|b9$AHZ~s!zsI|Il;MUscV?C}Acd z7O4iscrqLg2h42R$tGjO9GI9XC}4*9e7>yLU6&M|^Eb}9q{j90ZM*ibe)-cia+n)r z12SfIW{CkI)@{wqQG&!6i%C%p2gAKs7E+NjA$yOi5C;qnC&_SSCljY_+?+jk;*I~K#TDw=g_%tVXRd>pz2!cfB z5JFKDUDK>$te2~kb^GwI{_4Z&bh>{qV&=M;w@s_6MNzofg>0zzB4O7ifd6x}?ZVmq z@_HBbrWQh9I;S_pIfu`osav9=h`|k-`0Vuj-+uea|NOU)zxwJAO`B3OmQvN5wo`TH z;CLlqwY3{N`=T7ZaX6u_TLW<@SRzRu6spaPormMW;lbqAt;y}f!QLbc2C0l)kd|FN zIr`U6hW|2%3F1V6fQXHaD3^@C+<~{V!#Dn`?`byOWDnmoMtynkZ|dBI{p_WQu3q$NQ(AS2xdxe_!+YPu<=;0ep$I0|1vWESGRV z3^E{XUJ|+N)3+gUuCh+QC5L|nceC5Ks|?x;)WBw!_AMBk*Wr#gXWm6@T^Z8XpZ^ke zc=w9fIp@w@T!UzP{djI1vmTU3-=>Ow6~}bteSaxre*=s6#{TSJF#FSA8P8pu=9`Y^ zHTi@q$6vysZ0Fn7D|r2UOP9R}dgJ+dO@DTt@--4nuQf@R#*=rxZ+f@A;-&h>-}(GE z_J22dvwO@9tlXR0RTS6-`R~%+Y=X)Va5*S*+HpRji0e`T_^J$^vaXqI~PU zQUZbCNfZ9JwDnQ+1KEnssS~pJdwR9hk+wAt05Nbz5WIG3$j@9$%wM8=vZ`Nn(uudmSCf66lMM&Jz;ovceiH~-@wpFVl<_3uCX_>)ivh<16g))Y;G2XbhzRTsGBV>n0|#&CuU8@| zbENZD7dpKRNV~jWCkOE*|Z}Pz*0(0({x?4 z5nWG4xgJE;7C_b>aX`)3O=1|1$D`>emSxVBq-2A^=)r?`pFa8eLC(wo2Y~zcuo01T%abcb~s+&87yzn$w9Fma7(%%ok#8hX_R212u_holVRdX zW7B525?76lNwUJ%#nqlsidxMT7h*osc2G^xAv;{AMC&X&g5uc zB6Z#_hU|d|&`i-$5De}T21QD#S+{jvuU4zsd_JGg>$)zAiUma!QYGy)SuQuLD$2pA z>JVxRO@~IY@apSxS!%KFP994lyY%OlL z4)<>z?!Ei)ozWmpC&RKxgn+C;;duIJd3-i|`t-@^$-Hh>U4k1M1&%S7Pjgc>RY0U= z2B-mPCUf>2U=J5>;A<2(u7)hOEKKZv$uD#X1du7}x?Zi?#bU8q_NiYYim}W=W_O3P zNQBGP5+U0zTun33CI9Fm^P!sczy+WT6iZ1JK3mS3)UDU+rfE`A5Q#)#F-w~Fa9aaL z0`uwcV6|8_&B`>42USrNOo^yH+$-j7V)uKsrId1tF{N~Vem+gHxd4$ncb0*A+h>~3sjoa!-+`DDT+!D> zQMb*^F>_}|RTiVsa9C9_uvzL-9fi3^5rPo_PF-r-bUs_OZA<7mm}cs5jsfj%KtOk% zb-qObJOj>dX8F9{zrM;-*^Q07%BV(fu6uApes2&NM~{)Ksw@UoQH;uJ7^+HQnXL1T zOboHXvRCDdKC^C@rY@N5$|n2`{r8=JemV7r3L*!7D)v#@v^?Kc|YisMyTXJ=HUrP#Z z>YF0m*S6h0?0jB?!8R+Mj9{Q7fD>!KbTqWf84k+fP(WN2^=e6{vw9}F zZY^o&5OYAXcoF3g3P)lg*u`jU1=T2FYnJ_jyPt#4O;c(EYJpJaI z;|C8O{OHH;-M@dotR~FbcB^`w24&)l1!ZPn4*j?O@w_s7-!Pv1M)B?bY~DwN^0>bm z%k@qD8eE)tcZt2qSl#}f|49J0P?-GrhVf*|lfc|znp8D=xFQ5#Ij8-@!MMWl%kHx; zzxw#MpZxCAPai#b${f@(f7wzpHH27JRkd0yuhdP#D_zQxIP5TRa;6X=A+Z>7$81%h zF%;A3@ZfOo-re!xVHj2xLJdknjZt!Q^1K1dE5OV`2JYl2HU+>mzgha7SReVMjgrV_ zG|=ZAF6_pYXx{7FP4)^m*sC|Shu6eQUmKtQmiXrt2CZiWvTYpoTRHKse;@5$G5`Li z_Vcyz@T>9UtI_^%$sgUsD!!rJG@iY^+UYa>Z+XAJ@%eAcchHqXu4f5<+xz`Z^Km!z z$FCgncKMyF<9WrFzTRK>qm)qpv$el4fdA6|sCFHa;(G=ey-~Z=pB?=8pSnLcB5VGn zSN-#~ONd&(V%)#~3%zB_3; zv(dP=nBnPJG|+R7>$Nq0xDPLrv0pHE03`|zxT}&2kq1UmbcwVxR}(WPBQwB7#ntLg zT}eRm&X!M~K0Tj(^WxEmKX~}dU;Op^@4h=4?-xbkZOzscqJ^fon6Y+6yBs!+TkVAQ zv=))TDQ8~I*6hX{5Qj}1w8MQ&YSkkhx)zm%YRTvnwye*;Iez~6m#3e7)txM7 zcQP6@^}?+eo?_u0Qo`$b)i*WgUc-?XFgDI4AW|ZVL5d=jW!bi=1t?RiJvhN!asbSz zkC>A=ld}*rf{?(25K9~k%kf|^84k)QFt^m0uA;CIOB4?Pk(qa9!>SCC(JL7Dahq3e zYS*3Ez+n5|w+Fm3IrA3~fyiL$j=;n5aD2GGf9q&G<H0h(69ptRcU5T(=<)9TrL-j#e6;=jD~mLxi2Av5JbeYBz+$VmF z*Uxp4Iur_yNCs$xM4;0e?K#%xPBWk(Yx`uLt20sNd6StY$_N7h=Ab^Cq*> z!wHVY(O|Xq^?5gY*^OV8`!9y0_qeMsS=R&`ezb_oGj= zff^X~2zMpoK1N{~7r~oH?ZQsxhE4#2O1>F#K>Nz35Wq_(X%y~7Qd&1@MfT)>9`6tB z-oAWrXYkYaZ~gc|ad>$9;nA%h{`w!*^Y-|3em-BFubO2GrJ)v+RPH@r_}8cH<5_yK zNT+MmmdmHQzx*X7fcW+n`SXJBB=Wk>jvj*pUr8$#Q*yE#pz7v zbL-O3P^rg`*rjMwOXeBpL<)xsBM3BI2{>E?c{h`DlLNjSzauzu(!d=AGEdM1GI0n9 zp4{eVFFx)TzlY6%RWK7obxj7!+0P6Y^GF7P5G)XPrg_(qtA18hwYRtTtH1sGAAk6> zz5T-{Po94B^aT->(sS)LmlvZ1ExhTFnVyHOsiKKEaq{g2dU5k*bPF2w^Z7 z42Q$PV30YfQG#kJ%E8@x_wPS^_v_z((bO|+GUA&z0&n9`1TiE5xo5dmf>YMcb?>w0 z)TcN>1~lX*P==EA_%}9qmlOiayDah45hC1SlIce+p(V89ZDFbO`4Hzre=*_5Q+ax8 z_~OoVb!Wdh8g@K;G4fVaEv*deKpa9a$f{L_R^mZ)Sjc{~TZJwYzgXKU@w!P(M+Q%B zd2JJv(DlRW5fz>EnV=JB8N^i8%^aCQP7(pE>h*fP zK0iNSEEa99S?f9|q_e~v7`={#yOJ}Lc&HRbgKC+=c^l3fTeO&`@?}@9yy~11i&4R0 zAjOEd65|kJ2!Y56F6;%TGSDy-RisLMI4t+~_V3?4dhp=(;o<)Nls$nXLLgx@HBL{@ zXY<7uU%fmzU!0%M%$!*=%~XwgxPoPrMoukbJy_By~F$WZvW%| z_22K@I=FxD&f&pySh_jQ=kxh|`A`4!PiA)O@aP90+@B1ib}NF724&l}7rvQO-c>sE zrj3_-PikMSR;$&@-3NogbUH1HXqHk^cP9#Yz+bc3R#mu@Z_s$crm1Q5lzes#SNfU2reN?p4Wkq}B|ZklejTAiIOUc5Md^3CJ--+%Z0 z4<6jUeY>hggyhK;$Lc=^=kKaF+B2Nx^^T7vkIw`07RF#csqh??*z#`5>N<`vD4pn1QiJOvboL$|# zN1&VS@S7RpKlN<6$sWF`alI6Gy=o_~@Plu*!{5*SUN_F)=lS2XUDKcM^?v`Ow5xC1 zEdt=$cGLL$dt(59Uyt$M+x`Bz+V_$GzKY=3`75#w#BYOz>5&vSJ;_T!nw|5%>1JpL zTXCtz>MjF#7cKaj1kAOKFFM=b^$iH4w>F|)l-7%wTGpDam|#rKLPow8 zG~!(j99Y*ac|B`W*QqE4<#I^HAf7j9Tbw^Td-U;_&p!V>W{awA(P>cI+dsH-`*1X< z+|81)3futM&eU&B&D=70~G)} z12B4(@xNgw1=`5(ZT-`%si?_ot=*|jow1r4CATD~g@`G#tGN(S=R`}ffDWQ;RIIO1Q(ZSx}U|3B(M%10w3!I&$v$M0+yl(2+I-{<$gy1Qd zlD48Mut(FL!(?p#D*0r$H2o-LF0ZpWdCvak)D}6B!;@JHTHQG~ z{NO<`Tc0n^6H-T^a3bXCB^;t~73v{qL2l}B&&5GABc4E<*JKAUApl@7Jc_q1A*WQK zVx;aGfRL9LH7&Pf=B?s%*>o>-^%bi3`QY!o;82o;iir|P!AkNfMt-Z_&JF_1Fa53e z8B-$4oS+^lzAbUsk3=9NabbrhBM_KFFc5V}UEwb@I(xayQz9zcCzS zSjQ$bLOGCUA+R$UfdVlXAb?znjvEkX!XF76GXk0P3}9jhg9Jjo5`zV+A`x*gB8D&{ z5levNK_-Af1d_}n#z|U=Xb2&MLWs@T65Js{*EP=0EnZ_cF7`YdJL7iYII{ME+}?V^%t?WI=}7?-;V262 zy42RqS@Zl;G|zw)Avs!iH{yP&#T)?KLboBlYe)8*I|2Ko2 zoE{$^zi8XKECYXNd_2w^&%-nnz<)~#Fh`s}r6GhE)Pd0zv#H-zrI$qU<-*+N1@ zeQkGhBIjHTJOOON<_`82+1w_02Q*A`qNUKhkj21G_GB^j=lk^ds64q>o!%|hhgeTq z)oxiDJA0y53E+?*$;BxE5@3Ov0i{W>LuwX9EQ;yOie>F}BTbUl(Vg&g}4Dhh{eR20U<)4XUZ=E2H>VW#DST6kPuugxC<0e z7B36g8%+h%g%2WX73QK-R4h)5|U^)5A*^!WI=ZPxW_(bj8n zWAcI>!X#>NHDgmI2eT6=rN(XLIPY-M_*qM5ZL#QRiE7Qa8Y-N~5tt%EMG_+i2^1xi zLV=WlLVQqaS;Wb7F9e=Wt9S0+dHCM#yLS#oLlY*;34Wuxrn;_=kB`6k=GpV(v-5?l z)|!&VP!R<+Qfn{@7XS3_!Kr&B1Te zV~h2yX`1C?yJQPJ3jRup+q^crdDJ8%|2m}z3 zK-?%K*)?T~cMf(L3JFeB>Rkqi0)QKBkX)-Ef*4+x0x5?W|*F z4uT?9fr{a9Z*LL`DT;z)0AlJPZ7J`}bJ2Fd@;iDPxyW@gdiU3nfu8$FpaT}0a?-?y~30d^>tx(+_B9U ze$#l=O>G+^dSz9Kz5;V<*xPI+DcXU}7&^0{f%a{D!U0B_fBvR60QL%+cuUK209Itjjee|FE)GgdF?zd6qE$JkHocJM9j z=MC+Kc=9#l`TBg&O~=30s(Ce@jBDcaS2Y8^Q@e==eAE8n4bR_0!*zr4-DbP4zFXgL zJl`%K_w5QF=m+{5P2BI&cIW)=Ui6B;@JH1G|IgOmA_2^o=frCd^-aO2EWp+W@)%jf z?Ap)2w7;~!v_E_6Wd{GlH-d;nho#h)&pJXn^S&W03VSnsVd1Hmbz&PAQw1zfO1 zfHaYzS+0sAglbfK+W<&v)-ID$7<}<$c5?pPm#3@QFZH7ze{gSaID{`|Pvd$f^XFA_ zURXz_La2$KrHRnmKb0$TRIw;OUkXGwwFJ659`SR)0iYBU58Po6uZpN`nv4eT-oJP2;GkVBy3|d_l}YT7 z%$bNxO;v-u3Xjc9!dI33DEr|VOWJ#`-ZKfs-IIG~AjG<9S9NVh>e?nZ7LsUP%DFCg zC$JG<*}?5k&Ws=^1W_PF2a{11s49y9Lf54(5l{pMqL8a<*L9{!!iETNP8MG3tUKkZ zx&X|t-4I?46_A6nCk9F+9ZO=i5Ks)lXfQrHm>iBrQ&(U1smbva)xX6J3)kWt~# zHhJ3yrvenR8)b>KbwEXOEh%>7;!mFIH@n+TRP0LI-TPj<5;LTR0fZtjGfSUmsH$o- z9S=ss+xHHtA^Q z18^hb%&K&^mN))UE{)((U=A{9PpqX)$gFTjXp+s$6zAt@^#tK5TF3A`nI4A05#pZt z5E!Z#6b4QVCr|(@z`a>e#)iMrSDGf{K3mT@dfd+}f=Q+(U-ANSX9T?~uAQ4DpaBPp zalK4IiXcG?GTsn9TcE5`TAV?F z@x1kN(MjzU;?S%_;{Wp2_O9jQll5wCvzg5n z^>Srxhqf!s2F{ai4FFVus>&0P7VU|k`2X2^(T66BD}uv+Lf6hj%lFL=Eh zbd;xuyScd?YVSQ&9hrP)7H1o-Rb4g2oy7S5hadmt-~9CC z{K3zD{)^v!@i>HPd3?0nb;x#da?f__%HSsiqW}0vX%`)j#C129ClUB~-#y@IVmKI`FCuO&gAv{K5O*`tJ8We($~Wrcv@@aT+l( zc|YLE#q-~O{^;@J$J^~*jhs##AdaAz6)CC1gySKyy#x}F!dy)?F$)UO2N*FGd|;$O zUooy{@aQeeVoFR-0L(0 z!6IHVv_^Du=KE_@fDS{^41xh`7OP?CcDrG-Tkm&6-*-8?yN0S!&!vVoj(FxEh0=sg zuK7+(9LeAR@LT=%s^7hM_`$n>@t1$`)4%@7kN^A!?|v(GTN4Ju#533=h{vjq;k)1d z;Mbpi_RC*>{`8UZ_x+s*KdkF|yWLh*4I)EP^%PqbxF4kzk(APYzu)iobzL7HuiCbC z*CBNw1d%`mpEoOXj$jJ=d7A`)l;wIfm6G=Bb${{fYO_m4MPv>&2RqnBq$Gd5jg^lL zj)`oZJb>BV&D{*<<_0qxU7KNb)i!l#TL}TfkX2I@u3}VG5S7_0t9L`*?7H=O9qYQ} z#$*yA5+ZlEoEX)8O*AhD`r)6tj8qvD35U9(MO!toSslfuk{CEJGaIC+{xG)NWMq@U zVXlSYAFt?4H&FYypZP*Fv=dzH; z5QV70zewFyGv}FWwYDvo2HRSn|1g6`OiQ9&6gj4^1(+RzW3ul|EO+4;}Rng zF-a(zTFp-Ej;X)BeW#o3!#}#>le7f5`7$fFcd2yCmIFo+Rm!ev?j# z-T(4G|4*NP@#xvJ7a@cob;?~b4I~_-Vo|87_We4W#~9;sweQy;D@NC7i#h<3Y347r zEwPsd3Aw6!5w7Fn?CkV|_fJ23zkP5<%f)54?_6`vE`fxZ#N6E!B|$lvnUO1zOOVJi z=rDUm2gcjIL___N&o=*3^WneJdH9?1P5Gw$UZrGk@t0PX`$H($?HKE!&=TXH=BJG( zn|N(7E}`egX#8dRHo%;U!ZJ+$LknsY&{!+Xp4tH1+AiF?1)8^K zoZWH$dAI+RmdtmK7%=7h8yh7Yu0wMI@7DX8)pJ(=o8CJr?EIEOaJ<48?{9t`nr@Er z&JV|l%650U*WLbEvNFt%&)XBPEW}gn564Yg5!}iKl_wvv(KqcC{d3f)&UXIeU*|rB zJZlrW`R(|ev-fp3YxQ{jcyokj?R-mpBZu#P58=v(+&m6UkUtTe(yVS__Bm@fn(j#M zW`_^qtGg=XJB1ei8sean(fxY}zxG0mh@3CqOhkBVjZ?$pABJf>2Ii z3qzNswzJhaqk?w^8R<*TU=!bJ-)+DA<@v{d)~w#$st(R!c|sibeU8LrES`zTIXSsX zb~t$oBR$DJWhylSK`i^Ey={_e_E5u)7YppKb0&7zl+C(8If&;0mIl(wIS2=H076cg zDns*pXMgvrr_c6(|C@{bU;XI2KX`9-qD;>&-t)_qWa=)n2dmHel%w_p6|(7_0Hh!X z@z4*8coZn&#gl&1)ya>olH>Tl{o?1p{y+Zr%g;WOVM}=!QkUVMeE8AH**g?l_2|an z0FDGoU02nC2r2a5Z?}=9s$%X3ivn7dxN=F|I3YI^A#5eto6ey{(y(dG?qYSt)B&VhiF%uqhj2fG{B&!Gaq(doDRy?Jy5$ zS=pJG;Bj=uH27@Y8Tptp-U}c#3dyJ8PUJEu;7l>b#i~6!d+^S~)73GD=({~V{!*^4 zuCA_k`+b)aT&qYsRnr1EdKH++*_|!5+pQ6`$7df5DPhy?`mWn|@IbD`p^GUH!3^0g zhRUJtsrZ`!(@I2#X_(ZEh@3M3stHgpD?5jgfC7>GcD+ga?%BnQ)8pgQ^Yio5(`K>I z)RS;1?*Hbh=1A_&p;9<>0IYC0MuR!jOLkl7a~iJV(EE00i{U++YbhR09)qbJ7Pz(5%qM|`Z96G>B#1W*tsV#-cd z@=z1Gu~tnDLiDYC)gasm8Je!Ci zdjMc5F6<&G(F;ndxN(gvSRp9GpdN=32AmcLdh#hl&9jgWPW7TW`TNnCjZfYP|Wo1&x`BaTimHyY(uqt~pD z-kCHC-w9lx$Kn)a4FHA)vWhf2(ttcfhi`8MH zrR1ZRIVR(XW6ABO0FbJxBBFiY#cJ{Kcfa?;AOG~@Z~yRTKl{atb!QyAtUz*dN8aq8 zo5kbR(ROzU>Qy1+FkuHfYcD~nZnwR@+A`G+$>v0LGL^CbnWvnqfVOTz2&czK56@1U zreP<6K&|VB5CStaTORD)haWsRfA2r7|6^S(H18agEP;&J8D?ajl|iFPCV(v|oKpLt z(YgAA0cY+6Ei*jB)yaX*JojFSSEI1bOZLwU0z8dL-`$}cbbn-5v41T3Y#~n{RL@Vt zv!y?7^iieHgI`Lz9P;{6KRnxbtWYyPIj!3uRneGxY#5kLFk#0(fa=YMt83Ue_xE{hzB~$d+5QPZIl!I`LZ46bAmPiP}-7680lOVQjU7>Em@yX)BY5SKy z{NA@7o}Qc>127YgfXR>`f-k-rKKtymM^B!1`)sJqYcQn{A`=87ni;f={)#3lF0=x-5_7^WxNBB2 z^G)CF_M7$fcGqpqj2I;{e$EU80+Sd6ATwuIXi9b6iU2NAf(~wj##ZwF@v_w){NVfl z;lKTFe)?B`b$+@Mh9oqiWCm~~ajFY%S4AwFqs5PoK6?L?&1RFcU0huE$GTiD)ks)^ zL;%?w>Sg7YV16K|P&^JnM5=mqb+y^-+ID$*a$Z-hTW~6=Az_|Ip$|hG0D_2lApyMX zk(`{^>x!;7*Y31hp1Sen<<+C7oAt)jR!&3+AaM%iCFh)pGrbg)<>1OOal%A4=KOWf z#;R`FV9KO{DFzXy_ue@cVbb2L#0n4wo4FA*XCh(=+uio@^NZ{KwX~daF5*SY>cldJ z%mK@McRa&qZh3^K!?vCIKEn9bUSi|Awe0#tjNAS5dY1`D%PF^1Sw z%d>8`-R-*lersJ)SRGr_CDRHFi1iYH8g0!5j9AHW6IRC$maAd2+g`ocUaz&=lA4<_Gzi?1Yf*lR z5M0Ae$}J~2j7s<;2e4`$0IZc=*nP58gj}?_qVaLS1ddEblaw zfx(8%uoCbCWE2X12o@r*0LzZ7AgV^}Yl;lP#m*mFhYy*4CqLj3dn6)|&c^jU_&IJc zVV(|k2fH=`W_n&b04?+-IHa)vXH_S=Mi9`JwiSL2_zarK*f5zo(`_o5m8$v24W z9p3j<`0@>l*A?|C> zd%fz%Id*Q(;AXtjjlDG2W{vZJ-&x;hJi^FFyfj|Errf8ixG!qQt##!7>-=s(KQP*h zFCUv-kPfGnbKlkjm|s1E+*=*SDEc}G&_-XY>1wxUf$=Bz^to@!H|3l1&rl8o>YsXX zW)^qNIj5A;kO7E9B69!3OfouV#$yKwBMMg%nyMbL=TgiWCa$1NL+{EtU2Aoo67$YO? zm&x1ERl`=Vo)4S-_BUVdo?Q5LXT#99YMQ34tELJf1W)9O5y-r;@!{LLv4HBXT-QeRa(LI;#>*^}(%}X><^F z;Fe7;A`Xy`0qGRZZrMFbWahT5&(Gg^@b1}SB}Bg4`|cU~zT0heyWMuXoRYdS`53MA z1~s&aZZicLk+4W5p`jSsc32E)yS1EhHq{b{usBOg$thU2`tn+va8i!Xo81ooW@a~N zw$u%4Y)rl1byZcp``$wa)EzpSszwHadNxePu{)V-ahxJ?5WwnA=DV(UUw55swz^!^ z$H&KQ+XSwC%;)O+{XWK6$EIl(M53yBNS=nX_UQWR%OS*%-aFg-$@(9jd~tOlbi{O~ zLNM>L^nC+7^dm=X!CQ2nq1(D&!Z+|p*tmCqlaaC?BxRJx(6sDC1S5i}6S4#2BnAeU zj4`k!VDG#KrL50!{b-ZF>bFm-lRuN?_uA?MXX>#SSR9P3r0$_YtSBFRS4ws}RaZ9` z8T}&0k^a(#YtG}&`sXNNFW#0+?iiCJI>s<#>R=k9{TsmIBc3TRI4^pRt76vax2ymFjDWW&xtaszB|E;HVaBghC+nw!Xp$jP!K zaEa$fESZ@KWDr6q{@5&FVq!1BYeVRWRY1-p5N8sQ5t|hYVDtDm~StvIx zJC|X|qk`YeiXVxYn{0N;G^lFMng-3;vbq_?>dd{c@;B~WHw}1eBmuashaC5A!BLE8>T=GY(LIlC9BqWsF^w|A1ZtCBAlB@h*Lm}~UH>EYUlKaUP`0BJ_A}MN zfZ}0p4l0fdR8p*^Asgtu58nOZpa1xshwojyxP12FYP;WcX(*{B$2`VFP&4QlzqAA@ za5zSfMwpjKwuT~8fEk1%17^-ZTh|OqDLptlUo948sbMDpfjF`lyR)-_nI*)gS;V?E z8>WpI-_qwzO+HyK3@|uSXhwJZ!)S6X5(OiM6}rZppx`3=7;|DcSQFu9KnL?|Mh-Zs zI~g%Kt1@L_J8A{VOuVXyV+bI?RZ|<8JqOQ0Qx&ukZXzv+K0Z1*sdcre7Ol4-31#w3 zNKF&fdRGISC2*`9$&75!ez&{cZa3TQKKDtpo3cB&jv^5r97^ge#KJKU$m>duR@K@0@xzB_AAR!P zNAI3KSj1My%~V~Y#DM)C>y7{Vvo9{Mx6dwKtT%m9BZv{3aio`e)Qwj4=KnWNhm#;| zvOjoquN8irxLS?_kce%SYYp9X~##ae+txVZKf*_n@qiNV=P z$M4fZVNe2$?2yy7OlT$Mx0E~%L<%2<;kkJ!nh{OYUY?X7X;=mo&yr)6{hxLMSaz zwjeK2662IxOl+D$c@r6_X|C&+LRO6F?m7&R+IEKK`f$%Q~fI`VQ{-XjMA(DnU#v)T8Zx)I4Vw=s&^>5p>n z>jWkdi4xE(+SY}nvML&rLzqTZjV1$_CcosHFE3rL93y_|FMn+1kHmd#M#|V^0pJy% zQ|u0UZ9h7U{Xxn_g4ywjG?nU=K{<&czd4isouIG)lQ;MHScN zF+)S4TQKVwx9jLPH98zno}}y~Y9s_&w1H(I9P7ofT@Ty+(CzwuU&0vqNSHGWL|@~5 zSR9dOV~!o8!;cdwf!X2gL{9kZH($QEx_o-^;*(E4{@{ae9iObAl(u^jk`P1++GCb` zLSSYIufFwErTLOmID$W<2mJ3}oL&xHR?ONduKbMNC_U0FsbzCBlTdMpNipOMVvb=L z?DH?a_`ARVhhP5kmrtKRvy6;Twma_dL->0-2pSA1*`xq6h1GRTo>+@8$B0=BktGE% zphAhM6HXMVj=o%c=aZkv@#)d|X}wxf9aYE!Be3P(2<*nAn}v#v@_)eX!{yUXhk>BsM=UZO?V1dnILCoIN8!_&)hkv8s!1uNPo3|ux?ltc- zzhh|PS$+JK{j*RrZz}O02b_gQdElG$&v`r0Yn484 zU7xwOV|L(e%iWyQU-tvt-14SA%$!n!+c0$f(79`@X8STy5RWcmH?+6i8W%pl{wwO~ z08w$Gaw3lvwTr3*?VYto*;w!}beqjJA0JC~B*ZBvHLs*1Eg&*{+K{;u7X)@9S*&2d zce8Dc|1c+`AjXv8U}mm}2sxN%@o4S_F&Cw%#16?+F)wHtkE*aZIjYakHgxps$HVsG zMZemtj%!7QUdJAihgf82%p*`j?&Msa(lrt@A-f7^Cf}_uzj*ZG@3-{x|L@bsUp&u4 zCPz+GAFs~deSdZSu2gk$8%#4Yjd+@es!>&SuR;(qQmcYDb@TDJ9zHlZZh}Zj0RxAd zd5LcP%HdU89n&IM@pyk%&wf zC~9zK5(IEtNmX&%G;Lc~RZ|IroZKv#lfkuguv-Y%=;1x8w`fcwErk>*BsUQQakg_H>licpYN3S{IhhTXQiy2$HIv?L^w3|1(WOl}M%2GjsE zG9F#z%?fcw7^S*=XkZs zInmX%Z8n={7neEbVaO>Z&0_9CQOYPT$>(lx!$Mwp*(aAUs|^Kruj_hX&Z!@|Gz>%G zT1G5lV!2QrapI_G^3NzC*bN}!LvWMn2@h(v@=o2%ZP2W#>-X2|s}KSURaMnARaI3Y zGIMSr<}u2#z~RMT1Fi-TWb893CCw&1({|YRb;?++a$VOkN)QpI5ZKJSA@wN-E|M1p z5eHJ+6Y$`)#q#8NAG%*Yf3bZgp=LTF5+gS-xUJf6E!)Out($i@FCL+P41W&1aI}Og z_l+Zw8o=%XkE1MrgOLjfF%hYGc2i8idZAj?iAdbleGq;@wuWBXaM5os`u!6=eOxU* ziL38a)w^{#Q!EGNq(Uh|0D)2_a}ULfHFze^ZW2nWb#}l;Cq^eA@W^AKkh=ta)l5DG zuN=AjGPR*#(T?%}1lY*z5D-r$@*+QG?KjnxPwV8A?xHe$ZtTs`}8{p>4r+i6~%TTQR57y!5-RyDJD_QmSx z&;INOKl#aD5?4R}^jB9`*F#c;R#gR-aruH5%uZERl}VTgFgF#6ATrM>^(hZ#S)|Ol z9*D@z%Hkv<1T%Z*;rY?gvZ^X(h8mHV^~l7NC846&4c{CytMGLe*1{;tJVT^)c%mb0-nEKY9H}7*1GgPR(_f^0Mz1?Qz{URjfm(h{Q&`n@X5_ z8UthxAYo$Rz!U^jgL?`g$R<m?&o4T=>UFDm z=XGx}Q{_@is5sOtaFWb1#F`}nfEov?0@pFZ^>o#K@U4d*efZwH@132VEKg1srz_7r zlN9!u)8JQE>8r=j9zVYL>d{4?EDfr5lQfj*HI&EPqhfyizFcBO^5_`J03$)%zJL+% zPAQFPI%pJoX?9gjTixw;*VmVu&1M+JxzrCyE}>;EBRcqwyxN{;Cv~EtYMewD2^GJ1R5@WG|Mgm@SRw_Jt5P#wB< zwfgwOhyU(B|Iy$6+kf+yKlwor>h?nn62^F^Wwk1^Q=ZLHU<#p;3U#fXv*o1jl(Kij z(C-IzixR4)uBwU|ZYqI82+T}w?%CjK`r`7E1#P=ru2yvuix#CsoJEOjG@njqgbgOD z70%?+_xrkCFv*Ln{i7$(E}mVb!AKhO$wDl?AjO+&@=LhiA7b>9DG??NWfM?LH7D{A zq-mN(Q)1v3QkX{PFm@13y^1mCyjkyFym+zScWxw7Tom4Fr}~!r_j}KuAvw21$*-v1)JmNO_uuk`#<4eEeF8(d?rF-$Nd+Pu4 z`G-HvbSH0)*OgV?d4^BEtps3hA-vqqufnfh-6m!xOd>%S!)){oewi75j$K$2n%WIh}BAW zi|zG#eaXGJYL8qDXcJ~CBJ?SA*#V=%)Jy~gf!r9bG+Ai`b0sRlNXSgbK$Y(9_T=%! zvx^sBef8D1zx~N~zVpeu@4d5Jwr#sqO=-w1R96iP<)m5D?M-p{ek0GN(X=mEf!*#% zFTL5jZ?ODvPXCv&Q#yPhQ2pf>eK(8nYkMipU6{*mx*!|l3UV_z%a&KOg}QDfrldo1 zwFItWtcPS@efi|mPk;T(fBf|GFMj*{`Q@$~%&d|IAor~BF%c5O+?fvda+{u!VVp~n z7$q*-ATGjxl{f%Bdt%B}Bg>{eJF3qfeDMA6TU~P%A>5Ohd$y9*Y!(&Zjhrz`57bec z=#!}B2A`i^@z=~$e;|DRzWvA?O??GY_vYoF8lS)K{NEo>p50^4JG}lfug8;bX6BdX z`8O}~W$cam+s&D8k~jL^`p@m&yQ}=&>(I@a+Pk|Gv9%{VcUPC$(hiOcKZ$LQVoWkux)qsatN__TAHy_a2-dH*F+P$=OJ7 z&Tlvslf%i##R(}Xfr$hx0ymV%p}g6qUacQ|pR~_#Vy8eMXpz7=z$l9;I{{WVm1ou5 zTUN)=)b+AynmRUhtO8Y46{9dkx1_43iI|G>Fp9#!N6(EuIWt2zXUnNmCy7?kq#exrwBO{-nuj4k zBP)`6$<o1#ot_IGNL7cRs=n?BwEP1Rg(2K0IKCf!y*!0CZ&1W-J$Agb)O#+0D&j zjG?O9wymn_!Gm{CPL5Ac9q`LbJiEBuY_D_9>+2oVR11;e1-}#`cZJ^oA}@U@Tnij# zW9uyzi<~5IDoO8h&X!Cy75DRLljH#GfLWGf<5(S`;ag>bM;-79b#Zr9EuTd6*=L_E z7K@XUqvPY_#bOa-oW0HQ`sPMN#Kg=g>)}N+7b=Bjq~ZDcdfT+sa@iiO7EM!E zRZXs@P)l9vOU}3;yzehh&K9VvLAGa2{LlXCV}$De{7+B!{e=Te=ZNIi7y(!$4a>z} zsXa{jQBS``dPMn4#|uXwME4z#ihSOQ+1=RO$XOM|m0JpyP9-Za;01&t2Xe8@v+oH2 z_hg;tgv+(@`a&4go1qhSF3R!A?Qg4#vU{3PX)vZR*5y~BurDK2IBJKKT#81Arr=RCd!&q+aSL}~ ze{auD<;cu4o(>y+XAca-GVu_|y)YRLDTD?_*9k|VfeVs`T&|f>LhEtSfgF}Oo`z^4 zwyJW!X(1s1iC!6+%!nf>7o`ejH7A}zMl->~)WXJ=3cfbUL3pIY)eqlM!o}ZUWv`gk z{r0$>j0$+U4%~=Go`I{sP#%ojt$=mZZL19sl4* zfBxei|75v5`r^wcUw-+O8r%uQI(q!OJIpL{ED1q#&caimICmCykgE25KMcdzAsxh= za~1+K!+jWr)uKH=J9~KkV6j+)5PV`$#)*PP-(n()F&-TqtyZh67Z*IW(xLsvjZSeZ z7cv)E0JTytV$~*R7=pSnktw?e1Cvm3mgE2oM&?LP4iDmBXq~T{{A{J49pkG79v#t_ zC-haz7vh`RwhcCwZA5qMh{cJ;**Q2!jk2pzMpQLy*1PSltE%mCu{t_BsTXbW24-ds zAm?0s&QlT*M#%@7nM7d0$;eLHrpjE4EGysjz8kzBY-@R^yTnmp<}gAD?_n&?!QH_G zbGE=l#pQgTF{ma@W|=*QR+bgDRjzrcIV~a`w{m(^9UnEvi>9r#;Y}4Z(#<)c001BW zNklqtvj!%IznieD}J9=`kF z&ogNc|RK2@4W`@9&uCMz?Po6$~`t0KQ)%ALt26GmYDli$StW-tU@D}6c z{xZ{-%)hvq6T8S5{5j{`b;B?W&z~1TSeJ8QLt$oW&J;$YWh!(d1e}gf--!t7QV?eM z(UK|j2#cAG3kcjy$z9!I9h2r^7=~fk^`~AL8!$?sR)5sHh@$x602SnjR%mWFb z-|qrrd0esk-iD7qe()duyZ`dv|LtFV@ZPB~tuHrfxn3=qNi~H~qb#Ho5mqd&5UOlG zbeV`mqzJ;)@#OLKX1CjHwmIhzLRD1~0}+Cdh}SX37)69i4p7tVSjA?!JSuycNrpI@ zR)rj(=^?04Gi3!XC?o+T%{(M!?)%}%)925gUw4Bt2j*aEHue@8<2{!t3tp}^C#Y~U zpZmNRO73kci(z06A+%M!Xlfy6MoH#-6QqPlB)U=GrK_v;cDq+K;o1yu$^PE%KmUxS z7?4`FC0v5tQrUH45@sFhL`AQ9dsA>9!Y~cAKg<)|*FIl|KHYnTmxZnWqA1*(m$BM+ zTI2T9P4f?6Hi}7^K*FJl%xsmtQ^oy$zq#J_yS=7NL=X{XO~$t-wAU9d@m+3Hzcbq4 zR^8z6>HP8d6heoxY9tOJgb=+FjzMbacg_0pN^{hH$SE7lL4lab+{#9JyzsoPWlu~P zH7sSHQ1*4k#-Pk5?hYsNs%b?iXM6hO*=Do3xVR`B@cZw-Usa*5YhhM(RR<`B$~^OJ zYjFOIqo{M7&p^cw_Emb0`^Wp+^}`8Iel4E)(tT;1-f0#r{ZOBq7dHhpQYBM&;t-=L zw)=jw-F^AxlVAMfum0}u|KZuQ7aSypI!51a_rxRBSN74jhE>VjF%|<%9FzLo_}Vci{D_I|eUr7n7N z@DGIg-ol^f-~Wjx_&=3-?7s4fadAtgGyCfQ9PRn1Ql@ob{8u@I`{#mJ?q|y+`RXgb zW%)z(|F^yS*PZ`OcX_)qp~5%iB^BUHD&it72Uh)-BnB7EtK!9n)fM) z%UO3H@YON*??1l-a7(*!Z=W1>uQ%u1(iz?P*&FF1?>ybT*S}NVrK?Scj|MaxS9IZy*9{P3UJ>!idz={*VX6l`+a@$ z-#wpSQkCAXV7--b0n_;})o`wLy6Y|d2KBk6S)0APyXCGH@)hUY>7TDZ|E2nj8d4Jp zIp?dZtKDwbw3ScVevpq!BC=bNYA1f@rk-~vP-hT`QbDFbY;I~DD8&ju28FRc&hF}9 zhk&y8+irW^495~eWLGCf!In&m0+*(!q~jB@m44~-{k<15!AJi#H9(0eEV8s6ddoRG z2?a;v3`cYbsBx)D7F;zPnjkfnr`hc)>w4qWE=JFFu1~u7%g;A|^RVq=y`l!b2a=dU z2_z64Qsoc{c?OI$!Gk-5y%KZS_WI({7r*}M8LONeH7kjsUan5g&(6-@iK}I235x7y z5=dZT?(S>~bDkounl>!wtK$zIzH?Hy6%jPUwFp6_gm1kw%T4d;CQvpLjGU1SWGW;i zEJWl+s+!c2+GexQpsb#poPzNfMAbc^0Mq1D6wm;}JY|@(C1Gm@zAK(f%A_kPmt?;WvWNO4jRAL@+kQ!AoPnx?SJ$dqEyz=cBf3O2ayQ=rATM5jh1cSdv6zBC zV-!u7`7jjE3P#a!ANuXIO?BKbvIPm9?AHP)6u6Lsuo0L^xNX~`qob44qqbR|pDjet z4|H{j$4{PKUS8(37ZKMC^O3kiCa{diiI?5%jQRxt^K7PO**wGO5F?EO1rj2X$SGBQ zzaJ=BG8;X}856%oB@(YrIpa~R5wHc|Cg;j*_JENi7r)p72bb674!^#<>i6By_4{qN zS{*Hy%jI%e)wPqCS=`K2GZA@Y5ikdU3VB?zAF&8Cn>8u>kkhWyxbJpd?z*9As#)ct^Dq*UR z;?cQRr@243uEF+mcp(@AuqQZ?mH^DzDSLutcP+8kwL@%FXI?fEEd!9QH8NqTWQ?UamB=P7{GLg`8hirZYL4Lcuoo3%l z8U`aI&8AP??PEB<@a3`c|54tkk3kMi}G=w1MW-`X#{tT?850Rb3>Oo;El|IuIn z&A$&r0_roTG%&yMlM zlD|B{S7MjYE&Dzg0$hyQ0dh7tMMiXD0ufv(bCn10HDMTRpLX4lx|FMJyILJrRn@kO zP*uVVH_L?*N+`kHiP=m5Bdc7Dl_gXSA63#fvhQ`@VUzjkZrB68=E0yOhNwc$mHEVT zjbYYZh(H)%!5z7`)MM~EaXed`w!EtRsPfY#pC8r7t7_Ruj5)9l!zDpI^SGE2f{1V= zGE!3Yez#xmwwv{CyWRFF?~^ez3rmP(3Ns;=ASoGzNKC|)dKeUg`p(1Cp}xv-ySH`k z`&1=rRhCMv)W@KjBoYTA@{&P-sBS6=#KiDaReZFpAD*9{A1{9TlRsZI)yc9sZlrO9 z2qGv455Dg3^vTt4KL72LCl|YIry!zWHUI>2H&;g?2%Sj2W`N!mS-x)n?mqGY6K-xI z#)mK%gYI^_^?JSE@2{^n0EmP+3d<1^?taxxO(*TdfO|wc9LFUljC?I)hpVw?1Nx#?phdACa!`w z+O`cv;V2#yR0IUL)~u5PNjYRt9Ucc1^}%gYz*<*NPmw?F#m;}5?5$#-QLyRPf|ebY3n z)gldgu)3%0pf`TBv-QZQl((;6z-AcQSh|-_8Mowo&j2Zd_6@Kv5Ic-YE8(Wj6L2;C zZ=4<-25^XV-=~}hiJ=PBcDwu8FFyU{r@#8;FMhSzb=RA9-zV=?#F?dSR=p*MPt>yc zG;$7ea&i1EO+-#hYPICC3Bg!;w}B`H+L+1lqCS16K0j{HPL~hP+q3hyIO_L%CwL$u zVqzh<6o9LA%UOGlPjv4nBO)Lk`t39oO!z!u<_G-Ba_8Os0p_>Y;`6VMSouct$z6Q@ z_5Jg%HTC+t++B}enm^wjPyT(L_dY!NjUqJsZhXgU`J=aO&%1obxE{^x@Uoxu^xOGZ zxXbJu;H<-!->p4I1msS8-Ysv^o_E&wukk()H}=)^gV&w@3jXMjL;B#Me%~GMuI~UQ zLH{f0rZ<_B|FxBGJb=HZ+*U^5@cnnwS^WOx6^g=174n+%=YM^@BH-)vp>KNpZQJMe zb#4iVW=HPP4&3+K-=jYNQsr&i|C{pqQn+3b>iYfT$6q~v{`|dfJp^zNoBrN~4ikdA znHe)zRYhg{Vs}hZcFKLXyY4pYwrVP=vXh&_$VmQw_TH>%mL$0jJMJElnYDcD-FuxO zfB^`CW27XAkOcBcFEq(aX8OZ?7b!i!z%gP5Gt=wsyM9}3nHk~kdWg)b`nKEm_F#ws z+3|4u>#D5G$k^Teoa4m=B7mK2&rx(wxe>W%gS0BWO%xrVtrNL02j&>-nQ=ulfix7S zA`_C@V$^0@nu(pigWO5?j#w#PnT;QQWq&HW2@Dt!5h7e8ufp2q8r(m$r`_eKj{~g3)X%VLN96(V%1q ztlL&%m`o@0!-M1FRMp;_d6p%gf8IU#Thp?GwQn#wF;SQd+Nks16r==v*nH8Nv2c zY_~z&A=5}IfDiKe8aml;QGI;Kb9=2fF~IJJL7U-HqKFJ16(fv_G%8F6XX`K!hH&su zw*f*>B+tmV9C=_b`a4oz2m5rpHwjA1(74Z(@xz3)_sQNq#s$b!;(IJ!^cfJj01?~) z*>VNkc*uTuYY`3CT$V%0d)lAd^``XmNL?Lf$LN6sRRIVz%ES|q-^gLUAMqW+WOwY# z*R(LUzo45n+`E1|{kOPjpd^mg!3=aGWE!R{ETUz*OsnVZ<(F8$1kMAs+0&i(-!6Dm zmIm@7ERlMB{P^^b{`hB~e)4&r?W-@pe)IZFV%2A3mLYFFEQCr#0CUZ%nsd%Mn;C^+ z9G97|swt(i=rMCvB`?4O10W(H@bU5SqeqWojJSTb_W?x41Dy_V_oiuPv)R_YUhpwv za0D0}i|R)3h&Vxgg6hy{nyu23?ZK$1VU(sfN2W3-7)0#K=)~8xw^M&}fNziK%TxUJ z6kpEmyP3VI^bKQW*+&cp5fK7X@rypo4zf;W z(;|FL!U3E$!L4xfnG7t%rl4#sQK(ov)asrBHW71$xvwm*b6zK3ThZAM=4!@TR$6j0 zNLjMn)qA2G%-|cgKGb0XJ(BA4$Hxbi9ZmUQDou?*$vnArlVDCgSzs7R#U-(9?qaC= zoY(8k#l_|Mf}|@uu9%0Us(NJS1+|`du)`I zC&m+wbE+mzHKY-70A^Cf zi|@Mc-kd*w{`~ChB4;&lQcI~NiEy%P?q2pF8V24!jGc1ZVg=w%A&7ZSDfNB7S$E6j za=Bb?Hk%mhffZ`D#bt9?%7REFE1Bu z+pgE^wry3_3CtWq=u#@JQBVn`KFsXHLdbxiq;~<6W7DpmJUaE{%f;IVCy)NkU;g}m z`>TKT(MOeUpeX@}OayD&E-=mKb5-T7JnQJd2e|K?1J?~n@V>>_W%ugU+w+TyHszGF zDjX1ZQgx^78pYj}sb>%~svtoq5S~4KT*bPqDrV|V1Yu%#E+;tbJZeK95e+Gl9Z-il z%wdA7MgRKE-HW7q5lrgha)_Kn|j-NaHxF2+%4=rU>iw*W>X`c|n z2r~f2Reh)=?e@sqVbu5c3;lq4mjB-Py!7M!zk1gl_Ur#o#UFC*E%yGt-p;$fIk2m_ zSrLslCK*WHh?9CAj_TR8@4D4$wOlUKx(z|d2ia#E@ovlv-6lb~)==9edOrq?>m%Xj z+PIsHyKgxL&)RENLn05%Xre%lnx=2NYI?O^uDaDSZ8o{>Ea{Ym+)(tRZO9OGyAw+$ z_HtzQea9x5I|0UAr9P)V6On|#jOB8@SS(hn<#*qG_u{)ZpMU=8lP6D(4j&Lv*CiMV z$#sO8l-9PvpS$PLz101_Js(b2PK^9K*Y!CWSF;?QN45U3!1g$s&GF#u;V945zo2)9!ihUil~HufAusziWT_uT`@@>~i0Fa^J3YE%ZBnf^iAkzuWEg z{C&!OqFxg-#5;0ji?W+&VP5M_#@u`T=#nl0N+F|?5S_xS&#SOZtfQceB74a zjo`RlpLa5V@3?;Nzjw+aKj3|D=NPzs|7$bjW_xZATldVv{X_YC z)XMK^pL@%FywW{{Cf%;Xtx<88Q}Wh5-=o~l(NYKyJ09?j@}c8%KkWBDzuLd%eU`ZW z>kEPsdsrB|bsyUMPX3T1}`tG~$ zUcY{OdU{$n(QMDLOFd{rLKV!^euLfd#B1&B&_eEG28+eWlSu?+cpxfhR|Xg!2FyD$ z*6a4_qMFX?c|~NKK8sWiGYF5HJv&?ReNef>fO;>Bwh!29F7tov?2v8da>7mHwF?D; zFpKac#M-F>1?R>k8r4dqB7WJUs!-L&l_DUueQ(rFHZ*;6sjE)Bs?Zvwqsbwg85kfZ zY}I$1guJl33|zzm6GDFcYPIUy-kGW?$B@*W$%&n%fI-bOSppzT>WMj! zdtjU%9DMTl!IKBavsjV#j67H?gzQQz%q1n^$mYCboRsXpdGEuRjdHe>a@XfJ^{KaH z9zvzW266*LBTgGCMq)Os5C)X|j2r8s@%lU9}37aQaDo&4rXbPJCH%mpjFGsSA?baXMX-^`FMKt1l1>6 z|EW|@>M&PAZ^&MO;t*@zN%?k)4oGkTB9A??zdDQy{1_YDo(c#5M-hYGTSJB$6kx_+SWy&c~7_R`|P*)zrm z!GeOZFmfLP1vH!kc{_RbGhUZ+Cv(TP`*~pl`M)>5+}g}GJi1gx9N9}+^I?$&fzVd8p>(mi{HDG565V%%P4G^^zH9N_Dn}T& zN=!_|L?8-qo=&HK^0Pnx*`NJ|BYgSAH?Llw_iA-yRU1OZAUA;rw%~4#-mIv4>RzDB zRn>{jvT7=8a*1E$oU0ItJonwCX&yd&_~glxx{gF-X6~7pB^0I9kq1U5B3a?CRTUHRxo%N%W>7<9jOo{z`a6|EGGjcKq1;Dj}9TGvZ%Y8S$50I zMd;d1+cnFkX{L44)O8(WZCM1q-_W-?_ElekIiWYi?9I*V%!%S5Z5 zHrbaZXL{IDV-l33^MtuZsKL0MsiX2d4AOH~H013Gl#=!O@KqH{-x@T+H4ah;x zC2I@06T}Ga3L>|{0fqspsqg!??c3C^R*R%L=Ul`&oJif_UUJQpRgsHIHmzP~u5s6tzRSf}7G|Es6nHB)@B9k$`S6Q5j zNX$O@&Dq^e0WuK~TtwP)1_O->9it)||5$!$;sHQMsc# z(KhEIm2d8&|6;Hrop%rcbTVfDwUGx5089{qQD$diCoW3lp$-zlG*)qX&}|m&a z^5vTsFJAoVpZ@8mpMKmljar&dXGPD4*o)VqKs9}sWjgk6X&WAVHTRC0(vN#x$oq3) zoXccD1}R{;31{59{ys&DYxz5k2dF8=6f;{Zo7}TI93>CBne%43;no*d%U}NTmw)p& zfBVH(UoID|nNOzkoGtavj4D*l)TOpfJyk{U5PC_od$7%V601v&`bHL*zDt`PzADYvJzg@3)`( zq4ADC^m0Ak_pW~YkpcW;`LX<1{+lgC!{N_2?b+GI)zwwbHlbj{L31nf^@E^A&OSoS ziAr)ZidCqa2sp@#qo)wN1}6j=+>kc?dgWbL&E4EB_ae~;&KZG*SONR@7_Ydt_p*B= zIpjJtl8J~Z07XwQnzE6AMG?&<8>tzLXnIu0bGA`rf`w2YAJnFcH;c_;)3c)1Y?Xt8 zuoeF8VBcFV4;qLPv3xyoZFkS#_NQU=A46 zD1+1?@H%bS53+ z_bIEZlR6WkIXl4zz%V;Ow(de0U|dLZaPj=)(W6O}X%m_#40Fw}-pr&L7_kaC7qz;9 zvb={UFvk#L-E_T#NURqZ7hiw<^~+ap+O`Li8$kptZl*9c5LiTR19>o*o|`S5+MGd_Ls;B_g88Qr=GCj9_rHo`o?~|IcS9Jhz@n=6hsYB@7F6aL2qHT4N9ZC~SJaq)E z-A!18V&plR`EIYCTM8k>#XDca^9p)+^i9}p0QP#eM6V>Agt*`)P zz!Zecl--rkAus*vMc@9iTb-c!ygF(_^GDU}5mg85v({?m1DENZfWI3l!*p1CZ%vIo z67U^_;8JWz{|O$r3Z!u1qPST&wgmy>3J<)ONMe{ITjJ?^mXT;NdKyQgn?~Q=;Dpp0 z?=zZnC2VawhVJ&uVG?suJ>SM`sYIlWvQq{LN|s|P=93W#VDM0sMa#cLMlxbSfUTN0 z08>Q?ycIk`i3fuN#ICo)-8en_;hXR~%I#jDtv#-wJjN9m6}2_5IG=4cFR^(6UouvN zmcV|OWjI1usE`83|CRZ{(Lej+pMCW4r_W!${OX%;*XuTf*sHnGNH|jfW~Q#HSt0|v zCHL>z!>phXO4%Z2a-SxXiM!^MLI@8ZK0G-&+8KL8>R&1$WRzpcxa_#Oh*VW2B6*D6 z+*m3rK+7oO0G@c9FcRKpV0G$ z-b9?Ut;ljtSwy5jW_w0&0Xx_-G_R!u#d z9?a+SdTPy#;jF`(85y}{XNsZD=4uJZFkzO+PK4$l99di>nRKXImDV}g+Qw`LZsN+W z!E*o@-F&Lks1N4V#}B7JeSGqh$FpZg;jpowD{%*Un0YyOkO{%FYBtYCEJ551sc+j& z|Lr&5^j+?Ab_A)S#GtCZ_7%mFC_RKKgv!8Ouj>{(J!rMQ>iM#li_VuxHrY3rbaarz zgrp*=m>Yu-#6SdQB4G*)A%sXxCAG+56CXY}{_N9dpM3i4(SyUfA-A+yE#}in6@?tD z4VG8!`PtQ*mv3I3T`jx5&u|NB+HZPy4-DFdr*4kA<=El+NQi*uU3oorft=d z0YU`kGEz%0ScVb+s9LFvJNPb-3j@bT$LrPk!Ib`||MBPl=fD5o|M-ueYHD-4q+B&s zRf)JmC@^zQ-TC?XY&IKzN&`Z)RGU4!uNL^`n{R&eo3GxSosr07IyWa!U=9VOQ|2uZ z7v+8?A_9S()Qya6wQlG0&U6+lM3F-LH7)Du-3QKX#Gqh<3c%*|o6ENstG4$LYhuxq z)TyefoU?nu1!)Od(MSQi5uMr|*h)VD1qtf_xlyc`Tmz#Dv8k%23WS{VfK4cIrh=S> z!$ED^Z#G@uWq^r9vzeL5?`6>bK1xbSDkBhTRx4-z+um66z zSced*I7y~Co2ut*W(m$B!hvSZq_?iTKaWYrM(cGr^8*Fm3V@xYkK!CrRa&tH4%4Q2 z{BZW@!RhCp%WSHlX|twm43LP#nnH5d;_GlC;ZjxJd(i%?{#br2KbCvTZNJu!<;U{7 zlyHL}ymckqH_pbL`8`e#zK^jQ1uNX|_ZQm;n6kYc?#6>gxYQtS11>RavUf6EODPVp z5?k5wl=g0T=k>I28|*NBcRXm=r|*8d8`sllN9|Omu9xe8$Kw6j$B7K*xZCx)fdmFZbN~0(=`94Wd+NV$Kwf8dUPGL1 zt$|RtVSeYs@0wo%z|5OwmfJ3+Bob9q&VF)o*i1sV?4U{^ zIvEpJp=nc(+*37mz}Ab^<=OP`sICv1APOT2PUJ*v;;zNv1TL8)%}1F3;EyhOwnqEF zOEdx@`JAgMhZ1fM?w&zrWNrpFgF~!{NHc2p%eXNoqfbA7RV#r5Oli~01} zvO>|ThEQTE>@aeI7f-MQ3}UEtswxu>v7S#qI(gjoar*4xtMk+6udkk;E!v#LNps6Y z%o1ZQ#F{wuof(nHw2JH1)igGrfBf{P&z?;J_gy;;?ydwQb8{mhVR9xjBXaU_RYxfB z(&DCcceAv0ottR}-d?b2y() z>v%Ywh-W5{_Egg3FbN0ML`)^}Yeo)Z76uk=+cZt6V&7#43k%FsR#15P`uyAHU%!6y zX1!k9pzX$HW}df!CNnDzej*o<5C-MCt#kkG2~)BJ7jjru*DS7N=6#MJXkuq_6Gi1D z4$JOHE{1_z%RVHBgqjv7;cjDcf*Dx>H|%X#3;=2Lff_-xySWIM*@(@Jm_>rSvq&Ma zJ$hKNxT>GM_SdgppP!$%?Z(}S8n~JkVPTfhI}jugoZNT_dpMPIOW@t2vORSG+W@MF z0Ku{{Q;gBI1yhNK8Q4t$W^k;UP{q2gn>6XV&1SP{+ZL$@vkk&~TmZ)~H#0KZw$DiI zDV!7LaqTM1zVhARbF{tn%1F)IcHO<)T%DgCA0Iz>czS$%T-TA9Q{Pop6+-~froKqc zhY*5@rBt#7Qz$v5p=M3fJbrTelh1zo=vG+(GgDPOKWXpDyK6~=u z;P8{v)8+sBw=cf<=3Dc5J$t(9;dKpTs92h*&tmm3)K3FF^!AyCBW$L~;u@SI5Rg|G zc~~F|9*R`BJDD1?g2_0tFhWBiSbOE8|0NNLXMqR|?n-LBa%vIaBxt|E=6QeK_0uo> zPrg9RYP z^EOP5>mn>SVyt(^818%P`_rwBEY9(;%#NC&87c3feho;gNob`#+gyItz5XRuF9^#9 z$%i-c{qsrb*$`rvy2JVLYPE8=*=*Kz-O=&M&;IP^fAX_`v0APF?!Wx1>pBXuZoBFH zP|;^|@sh(Ep4EgzBn0G~iT%yn*N-1PWcGHoj!{ydC(Weq`>U%fA`;=8a|nT4h0Tnn zb@SxmgHJztc5ra8TCI|5j4{RrfLfO|yBiVreGXFfeXlta%-tuG$*%ESLF&dR0W5U@ z0Z4=Fa?J-1;^eeLqv{BRfO2d=h6e%&+=G<8t!Oi&tC?R+@v_0U)A*vX7qz~K>806a z!m{P;pdeyOs!1~-fB=C=!gww>Ck1+XNGY4 z>@>uBGMP0^#UYkMp1MLABq0W-z#Ppqk z3DYPwkr)`x#8MNpATXl15DD9)lH;S<@qGHP|Ll(*9v>W@98`4(!6GxoU{y1zL!a>G zBE5Kd_WavdZ{J+C8#Uu(spvAe3zKM}j+gkEY@?awWL_NW*D|NxFr%)Q0@WJq-y3I` zG34*e%*=h?FBYrydj00&<#-Sm3F7W*(6Uei?wr+uG}M8GX-tT|_n#XT+xEo}=WsZP zS-=jsDl}_s!lrANtIcw=ZoAaww0Glu|J&`J-Q6L`Fe--Y%XdQRwwrAPfP_JjKl#ZY^_zCNxLhn2 z-Fl^3bf>6dvXoO&Hz)ESJnWU)0t2IWXuje{Ofgo0#Vuu3%jNLwgSw0l{&CZ`?gD|tD88TPRO-w z*L~lIz_aNj#@P4$X0xfQ>Uz)L7zsD$@AY}UW0Gy5dj;D^u%ZMd!`*K9sjj658pj-g z+}wy9PG&|-AxL(lz8Kfh;Hv7LyS_Vrd-nGH;y?U{|F~RrmzS4an?!;$s}oVoIXhT{ zM0ilSGnl!MxepOpHYXwm6GK%Uqy!QsVF%Q6Z{Exg)`lL2Do&p~I{NtO{KHe`M!9^^;P$d>v#1p{%t9r?`taDSIT}=_T{~|*t_lZQqG^lh4<`_!(DcDxPD%J z*ZJ1pRp-0L+q>HHuKnm;?RnQD88`R$JNBdf9{?CLW893#-7($<^2595%gy!EtY|de zyneeM-MD^;cifsaccqrtJCAKWfnywp?@0M^?IdvXyL$pF_kDhkOZFeE+K2uYP@Wbd)uTP>2$k&HB}9 zMU3AO2~L9(#U&6kgL~*G+Cu=q4iyI_a`v38ZS!iyh~&h8(jaU>1af9KAGj=cuWvRG z6u9in01N`uUUM}E(^-8CiuFl7ZKenF7iY`2i*DIj%~fwe-%|(`S1}R+ zVy1n2+=M45M-Pt1IvnO4Oe92{3t>nih}6+1?b@!*+V+!d zu14zOTu2WQBt^uD9IlX~7Xb;ZGznZz@bkEcQh2&QBL zA}Ky~gE`cFHakd~H_I-Y#~6ua-L_Yk%dftDbG2MuT%0XdOUosvE-8%pTB=NUC(wPT zliTG!dxl_Q0=5!$BZmyxh@Bifu$)l<2X|86_FI0NdTw_PW-3nIrfC$eh1fKAs;;>x$aW+ZLyNv&o+7Y z34w}{?I@afB~L3sNIZCOuKYacwRh5Bv)1SSO>WFfqD*=(E}3XNR+AtG-p5_f)9{^l%o0 z2?Ze~2|GliyK8xp2;rS(Q&}r>QRTleT<#rp{!WN)dEx-9f4@TRI}YwpE#Cb*Fmz=M z)52(US!~V!GQDph)==W^1EJGF0#}g00or~7FvGkoWdH*@Fe(Pq;yTCr+N%#09v~37 z{gsbR@_Q6tD)XL(H4f@9gBnl{1qPUjwJ|Ss^&&04q3*R~HWthsDG^ zO3*&VSU-ID@X@13BBH7xgcx?L#{wcOvIzkpspg#BEC%Knw}+e?OJYd}Txi%t;)oOu zD9$}hO==Pv*dPW_hGcjJR>~WvHGCPcn1}P@aB;-v2YjWQw}BR7oe)f@1!W++&V?cq zh)Jw;hi6q)5gVlXT$wV*6vMff0pCSU!y+EC95~9>qjPaljk9z<5`SW@09DVw$JCOg0(a-76yeYd(?FIS88a=l)!`ZmFtKn8V!!rWm7 zB6F0zCK#eY)MA%qmBK2Avlc52m&z+|dYNXKDOUz*s#7yl0~{f6h?Niv9Ij0a)20%( zTEc^eM?d}i^PhhF^y$&G4kVGlIZCV}Q9y6;^_$hzV*T>f)vMQ+7nhr^cSA))N(z9T zZ2)fgfY1Ji^KTH9(-swXc^U9UX&g;!)xm+$5t5v)Chk9rUA#6+e(A`O-oLUNw zaBvzionKybeZOkEP1p8$VD#GP|9bz{NJ(Q1?w)cA04PD%zM-mPBnP?X)c*W0e)ezw zmw)r@=_AXUHY<@dscOBBK5-u;So=POs)@o~QdMJ#23xNE*T4Dh%dfuu&2N6QT&<1{ zP7jYyLRD=xo2qHB^9uPOX-!sCs>uxwa|najnb~qm9j{gkQ0`-h!a<0bLl7qn_RJ_| zU<47#rs@E*6V@%x&M)7dT{;NP>HyepifxWjr~;G&->1icLUmOo$ha1wyiQ&o-waKfR;uJ~trLH|q9Js|AIEL_JCxtC zJ-_$2WmOz~?bp6ih8TLy2r@aCOI>xFX1!i_n^yY-z!@9^VhP-OA-l5_cks-JCQMyfZUtoXJEAAd;M2Ed#8M z&8GY2yXU|7#V`K;S6?g^y6JMi=~Id3ngC>G_u2AXbd#wBhl;c^!9gq~SewkUD+xGa`)>g0gtO_GqAlo-Sq*}dfKRIn1j-X2C{B;s~_%m`qjn;-vJ zek^~W|Z78lnL1p(klcVBP-!(Pu` z3sBr{PuzXw2XF1aLwjD!WVe6j-5;gD%lO8m-2SEO!56J!Z*g7J4p9F_2K%#1|Hy4%wUO3A%u_< zzWMsqFaGo2fA;A=d-CLoLs4+G4mU7skV^B-nAW=sA;JT^$PpJ)#6#c^%UQap8qi?K z3{G=)SIT`}Z8n#SiA-Z%cjX;u|DeopXJ|$)pW5(sIaLpNn|uK65&%aq2oOd!Y4$Ng zxR$(VQdUSs@s)Uv(CB7x1sUmZKWNIj`QhQ=$w_~FymwU4#ZI{_%3^j9bcd{(*&yJ6O^6}Hh zrw6mhtja}2w#YZZL1RFD$PA|pxEG<(f-VnE0+71ptg4#S+hl#4+ddnDLI5^mP(@VK zblC~aED%Fh%?<=15w3}vN)Bet!E8FMnx+ah2VwJ+2pQ}&xb>+x)`BzuIT%Cyz)TgO ztmFtGMkdbci;LCs=g+@;`ReR^)u-HbU3L#d6a?6liw1Pa=>9a=<9-KUT@+brr5hAyo&9bQj9JzAW zaj7N(8%&TRGSma5rzgkr+413Fn8x<+zgoVy{FdY)@u68nM{3NBx)I9{5RU3F*XCHe zQ)|D#>N)zaUB3k`fdpjtmMFuG$sI~w7^-Z}rUnuM5PAq41SQhw#zS^4utVXQ)P{WL z40s~`#_biYroK7o7ti|T=XvudVfHCkPq}&;0=!?oQ0c;D!@g3foZ*3yGAu#kg%z^RWYZ1b-sFZm+ z{&FjmvmX*J-+FKYi1s}ze*Knv)iAICvdekz+lSgNGD{;-dbg{O;bk9dxL-!6+4eC^ z0Of&`>==4sK#o{hC$FF9_x(cSp1%Er=-Taf<@R}RuR=r^6}D9^8z{5e*hStoSciPJ zxcsVn`&(*X6I!6pjxhXc7or{|5XcPVqS={36&rV&&u2gV=}-UsFaE`gS7+aT`*OA1 zw7De-964(*Apl&$xaF1uhLUb6gcCvAQ9nb2@fHX__pa1|M07*naRJr*e(QDh$>x9iZyV!b@ zs&$x7+h#VMPUf+$>Z;@^EPOaI1b1fl7@*plJ8V_Kh?S#Ou<)Sj`#$x?W=*Ic9v^=4 z(c_OF&z~OIv`Ujmk$SP7y%!{ihQRJ_?ha;QAqF!UZ#HdSc9-Xi%d3mcYMHekHp3Ea zF9bw#GqR$7O)-0=h`q%wRjZz_Her$Fe8Vj@Yi^RvJk%a$7AheMTv^K5GZO`tik)2D z(!p%Pq!o1!PL4kNA|#~a|m#QIx{m;Z>wdyY}1!teS3Dke)0NhvF_C> zmKqK>jT8WA0Vu&hgsB_TrT@A zWw)w|+c`Z{YM)7b%__NFhrKFnH6g|*O9?y+!PyPwfE#7EK6hF5?ZsuEQ{UxY3tR2R zEA8yxQQ=@W)yuaGgQL%wOq$eN&gpPACvr`B-c+A`{P^Gf+rR#w|MFiSPtkXsIK+s& zoYL88%npNc){>+iC>o$_xrmDdl~7r!|Ofl z{r!>i0mb*KTD%Rz9=)|#iQa7;6n^tw9jE#K!4*=wJ@y8S?Z2)l#mruxyYCOfX)bqB@w)@Q60jc3lX&|OP)GPZ!vdc9htwo6^_X08fz0~Z=G^FY`hQZ4K;3w2;*G8HW(fWQMVgNh1@ zGk9Fsw)Xd~jLKw#bwLj0(MTsW_1q^_J)Nb^x?gqc<)U4#a@+L`AP|V$1meUnbvA&9 z)Jcqj3>^gTU|Z_ma5ycGFe?0HGni=s=x~p#<@#cAb#`|4^5v_~KmY96vu8&KhfRG5 z}D75&*H&Hz0XU#*1tqV1y4EX3f$fA`;4^xV0@o6 z#wan=6ikCNyNTL>gI}%IUw-}dum1j*zy0FNSFc_z)*II*tD72#MZ{dpvYB0jxeW7& z$Po&Kdayvn-5uhdUYohbzd% ziJ|0`V~jl0=)u~p0=DzKmhT3JAMM)nUjJ?RV8{5s7Onq2(84>vy|28tKl}&!lgqDe zsEzubWppEh>FxS#?X>Os^Pcs;e*N#{PyT?P0XNrw05quAml?PF{KId5%RfJyop}4_ zt@;qKzrXK!p6|%uJE(${k9YR|-g)n?v*`PjAKaer7ccnX`@6%#HR#ZA&vC)L<5Y9! z{PjWHY5)4~i68BsO#bVP&;MS^KN_r-6nKlhHvaJgvv_wO6t zas6OHH$T7Tn%vdudih~n&fVqv+Gp?ccXFz()%M<+|5*Oe%YEZv9Je?B{X^?xkr)E2 zI+27Ro6Y98zy0DDzxcb8lLu85;NJHMWL4D=r<4+b_oHa<69(R1NkrzxEHTEa3e2p$ zzdDs$89Wi9E9JIrmy2q46sNO(3=#P#dQ#35*O#?j#fm{VMt{c(2G2v%*@3Fj2)gn$16Zc>3)0XjTU{ z1t~MBrlMLm zp#~T{({NO>Z2-mrg3)N$!)Y5eE!6UB6NHRFL?!8}Gg)>piG+dv%OnyabB_Aar=NWC z>7#jtq*yQM>ax4KxLmK-ecN@L4XH(80;#H{6hgJfdPIpKmGL*e&(_Z}NS*AT#4&!i zW6_P`C#BGUF5kLVX@4CnaQ48wmE9ILiGc)t5Y0Wz-Lt!k2+SSMPJ^&B13UQs9sPyv z`F7iP?m6d3#4%PxDW$e;&(6-)>-C$nw?!-a|7Y*by5%^MGr`Zy+#@10?}{BDS!7Wq zjZ~6atr|)5GV?I~&*!11d(P=a`^GAgRU{Sy7r?zY*9dnrn+K1`jJyj-P%O2oyPW4F z6LBLwJbX2?&pxx+YzFv{{xGn!rVPplv+08ecRzUi_};yf*}=p$yIX42-OHk7qLK-M zP`)sM2u7Zqv=ZdBbZdk7otem!D(Kyl!`XlNyQi!6?YdoOJw&)GT$8gBvV$l}^+ZCH z`XJYLa{U2ykNle&{uZ`$S^>+9l~52Q^R|SkH<-i7+1%U}q3>@N0+VNk^3Z2OARxho za<3~^RcA<=7p~{DzVP&Fy?l!JxVrZTGWk(`_@hbvqzb1karRD?+}Fw=mNGdDsLx~joreq{_wxT$73o_0#y{P*{yQmRJan+{WQ6Ole!&dH-C!xSDr4w8#Xr}UpI3W^Ev=fUDqXgLI{<+KYH}&_kaJVv)Sy$%YS(K z>{-(6PE1tAD(A7a-Q1|y!b%hY5X`LWx~}V{O(&@;LS8IM!2e z<>r=v0Erv$l5lC-I+QI>Dw)OQaeaQbx;*6bCcokKO`A3n#A#+!n>1ObZWG7c^NRJt zs1t^;3po)sd7bDceU7vL){ggMB(V7cCPvOv|cSOb$Qm*PafWTc>m7n z(QF#^D7Fo?;vmbe8J?Wo2qEyg?Yf*pRX3B`S(cmiVm`lo`O4bVZZ@0EN>$y+N@{T; zCn;`xUi<{jGu4?6TB|pSSBclDo_9Rogk`Q;nRGPC5^|V;qjL=qIpv%gsACm{LJ$Uo zGT@U)vsv@-?&$|l?tk*5C-?53#2}tF$s(9I1|r$C`SsiL=daG*yq&+fTr5}JVr>~L zQh_CB)0CtVavMik?~kfm_3QUrp=Dy10vHcvKA*R3JD)EXi^XQsnHiJRRc)i)YAbt; zgrDo5Hns%Vs(EtY6~6XU-k_E=2DxL<|?z z#LObTS}xe};NwsJ@Bi?B{@I`Y;o;0ztF98COs1AM&|a#i9_S__B8NFis5V_vHU!ir?2aTx-+2XS zD(D~WB`m!~n=FIHOw4>Rn@uKl69d6a)!Z4o@YKvq5>JmSKzT9sz0xzZbSVy z-+yBlZKv|KZCAeh%iBXE9iK*Nu(!V}w{HLC#7cvF6{S9y)^#+q`Q>HWwCm+6<WgrrSLtwV7Jk(fDpQ6rg{cCoX4+jzTL7{1z<)>HWntBT0{O#i6{IjpW zdiLQ*PyV;x{k;!A{Ge{c%orAeumr$WbIz#>JJ4w4V|2y(I#Mxj>7U!?!>!{!hA{WP zo4Mwk9YHDyl^Yb^w(Z-C%@*?D4;$NQNf7I0P+aYr15#Z*KODP@Y?x)t)IWU;cl6>dBk- z$?wx=|D*7Z_bubu^{;uJ{!r!p<&gJ#weN->efN5-w>Px^o%dg7CB9oRxWP;D zom1+D9J*u1!*xdWd)9y5Z(q z|NHf4skuC5e9t@kXX|@a)L^olJLanE)J>aaMhGvzIsgCu^M5}+y8n}(eERUw9klCB zmxYCacGJ~050=oal=-e>jL^U%+z0_sIEhGAg{lfH&}7b_V8{kAk(0A42m~X_ZCbBV zw`mA)GZG^ZL3~>|jB`(PDFU{;m8@pP@3qi!dOJ&T%&AB0%M_v5rD8|#>BcQ`9rd) zgF>ig2M5i;^zh!v{YR6dL#!5f{VJcoeY?0=tQJcKk$Lb)1gN?@D+I)zoVEaP7#&*W zNrFCg-F6R%pzVpaqe^T6;L<aG&&MZG|4oa*Zi@>Nav4%$3Xuyklu`;+Oew9`>wEX^o!q@s z5_wwcQtl3C(|h+GJbwK6!Gn9VX#-fhS=O-{OtKz1LYSQtZniWqX&^A1%^g%|e=3wJ z%GRAjeMXZ{9##)d4^F0&&%ZwZ#TT#V-7?e^>PMRv%QYBe1Va=#WeHIZrFtys$!c?e z?gcilkY595pbN!00OCw;-h0KiPN5go+JgC@%oYy-6Rf8gl_>Ve>{Proa_0b?8BCqw zEotk^6~gPzE>M4|i{EXIKdGi4$LgN(VTZ7BHkLA1-5f+DkibwiaG6ni`#Tu`x02l! z{kjsqDoDHUwz5;-G@vjHDgh=mcy-1^~V%>5aXNcYeygWftc8OaH06|%nStC*Q5ILr*}IU!RZZR8EvYxrxTwyLV8 z_T!2gUQEK937=Q~hJ2nW8@TNC)JmbGg{4Q8r?V6$=>dnX#jIj+WuK8AxcW2Mw#W_f{F{Fa6py0GfM` z1ZFnta_-cUnVr2p+iW(=#X9HA9AXU2!2tMZc@MfUG50yZ`gjJrTlki!LR;Y3-FNZ; zkrT3M&bjNlP3qR`^=h3qT?atjdfUXH-?`$0(<#havE!npRa6!z2a{(gXpQ zJiJhMgC_tbSUo7CV2xCK2pyD*K+fXKA*o-?7q4HxUai&~8&`8A>Sg5OmB@Y8`R#xJ zuGZ`4%tKg+VgB?1hl)a1;=Q;NNI1rLaL`QZ$W%h;XC^QQA}W{%ad4;QVtH}CSg%_% z3_f{OV%Y;c%+j%bZ6mtsx9aaS;sL+o{?XLmV-Q}SpYJrA7TvaodwrxVb1yA9if`^t ziFEd!%b0yf!5gpBQ3K!CzO)78cK7e}_u;t(mi~782C)E+-Xn8t-?-gAMi}vcv2PE# z=Gt}*e!IzD@$Mat;k)-Lio)(k*BQyX{@hx$cl~n%9N0UC_Q}WzeE^Ib_LGsruJwLh zL>#1~kqFeTHxy*El+<=G%a+s-Py}i1bvNIxukukW2|FGzTzUYnw8sZo3NY$1;4Mg8 zB46!Hxa1%h1dN=Oi9{$!6+$g_4AbePONi2KR_pm1x;C|rs3Hn1MC>pwd|x*}`Ve4! zM4YWRB!J>_?L8htV3BQquGi}rBQxieH?Q6H<&Qr4;Qsx44KL7IT&p!L??DbnmJUo8Xw(Z5mW;!`GvqGLW^fJ1L^m@T|ZT4Y) zEcbe9u;jp9rss_sVaWQrK;)a5U~_~rlmAODkx+`V@^ znatGIX3j!Y)f8>H{JKc7@7@8%DqPVPm{3(!(K?C>LDbtFhzpo&nl|gS+T<=F zM4)%Zw2>A&rVx(zx3STG?>c2by(cIz0B|7moCc8fJh-yAk$^-APRJxgT-bt{2$5ZY zU?qhQ*kL74PdV)i+(B@5761myBni?IXRb_Y6*fmoj0Ejgd8295&StZ^Y3dj!4-W4g zPcBcVug@1R-_9==8y7jOlv;uoXxGF|20VmHmYTsn34>9gDJS)|vo2|y z{bISX@@f)UVg{MztQtcAV9p?va8CwzD7&a8_m13}h@)9^_w?xappL>!9!TK|RWmCL zWa^c3DBP*X3;{$I0|~_0!J_V#Q_6bw^2O7aFTeWw+4;phDS!ZCRabR0brc3n&psI@ z9t~r<9p!g1fU!F@hWTIwF2-ed&+gj_$)Q`hsTkCT)T<1@APzJ1X z?IzUjyd)%5xG^)wFllBdcTVr$zkhft(^Flo{j0C(_1W3ta;|Nc+pH-w3jmm_s-=z` zRp1z_WNU{Cf>9q7jOa$8g#fo=0Q2oxGxS4G8u8sa?f<|u2(M!=c%q)-(}Uc;D-uIs z;vk`lnq%9x%w1wuO^38*_|G2?D!yN-Nsp~obB!P&8$bi&#W|niF&*zg@ zFHcTR?%cU^G@E|>(TDf$9zS~Y==k`MnawiXqA)XrWT4HFtEsxdToQU~YEUNz!-Ko3 zYb6{7$#Uv0$-6_I9nK_vT;Dx9x__X*_|^HdS6|F8UPA8GlT+2&luL3c@hPMN4p|Nk z?oPdXzFs}G)iZ1wSO8^3#~z3hS>coeo(lp^#em{ug^PU4B*Fc{V-zxSl=W>aO8V4if;Tlr_1tgU#68ddkri`j&f% z+w5CRe&H;sbGI=Tl|49RB64wMZ7D4m zZ=UJ$4SeC~2pQ#&xn`Z)n)A%O>>g#EKX~xq(@#H*vHtw?ujb1|Ns6hSlNvOe8S^%> zh?Nb=P$sz(vAcI&SLnR#q^iuk-J#vx+zO;|a(MLc;lsOk@0L*T0EpPk%8`+?=A2jS z%ZrPPw{KrBmh0K{P6-_!qX3$7F0rO}oikSF9SSj2pc>PoIGIUk)E(M3LIJC)drkg4 z^6P1n4<^&2iA;IT`O@_q?Oc5UatSl8;;JKKF$r!Hw+Yz+dk5L%*_}?8q$|pcn3t8V zTI9-X!W7`*CT^hQ=zt<54Z>x?d5HjLNAI2lplsI!08F0Sm6x4`iJ*YM&CFMe%eKv% zO&8;;t_~-&ql1GOr_<%8Z)eOayfr#p4ZAk8J0tQ+;gcZrClQv;$CJAxUjaWY@i}i&biR* zOOlGRIV9M+YZr^fa=GlfF1xvj6I4qIY1-~2S|oXn??V-(5UN5}3n7?mGYLQbtea22N^1n#4C0_9K)0E9@G zqPwegsv1HAGID^_eV1`uLK9;IXuV07mzS59m+Mv=j_&3|B7}lD4I-iggFSZmn}gxB zO)5J6>=F8HY!H#UuBX$cuA>Od)K%eDLVXPLDuQISZqLup7mG#CnVEZ>xd0v|>hKSm z#_u+L`3HQ&jfHxLHH@D{L^h%@?sFM`y=4%#_gYx~zx&*~a{bORjPx(<&zts&QvbW! zfAu1;b=ADmpFdQ4fF1jG%f}u6Zud!q0=^Oni-16Gs+}s#s=5}D7^-eM?be(1afeoHjjQ9nDZ(^XFebd-nO4U%xtg^Y-n9gC^4k6u`#8bIw~`6{O6}M9i!< z98$FZg+2Ef02I!~FlLqbaxwQR^6BB7JNJ$r-#@&6e|mg~rfwlldhaFRqfev#-C+Fvmi2h+`93J`a` z`uFSq8}N?n^?$GN{h`V}^xI$gAK0GvEw_#D4^@7s^ZJH*e$altect{c)&Itn9}WP% z9w(iy`Br?-EF;$t`|Ghc82|tv07*naR1x^GyS8U2$G&IH*hA+Q{QtK5#~v|zOvKxm zl-JC2*L@_vQz@JSc6SWdsAxk-1qh4 z7`NeCJNrkC-|M<3)H}=0tB6KC;M>b>>*dyRi=Wh3%HErww~Ws9_x+yH7jJ3L57nQy z@_?_Es|;@%du+uZZQF)0i?Pay;S^()bN=~fznV_}I>z`rzw_hCbOOro979M+hhVo` z-_PrlX7q4GH+E-2Bm$g>C4>+P{_6_bxhE456InLEgeWVp?pDi1T&-|)y!Y`-?g zq1ZgVC^;CUMlh#-S9CCl;cQ@#n8%HIXVgl_Tzjn9g;HWOD7tmF?owB)rl~?*9UdPY zL~4$k*)$#=)t9SQDNI8+p2W)3+`t94Fe8#E!^$G_?aU|&shN3JOWE2kY_hkBlT*rW zOvVC=1Xe&@%uTHY8N6^3!~g*kiMtB(q?*j?>R>9zv&q4=A2%l0!T?ISF8*r zaF+F8_^@0EW#&0M2rSHzqsAar2y3n5X4SfyTJo%Jx!B#(ERpz*B17wW&f?h0SJD z5`S&cBQi21id|_Cse$S~cmRQo1qKGYGb^PQ4p@6Ym_4lSAK$rq%76EZm%n`RYL#26 z+I1VDjc0*Jb0(|7m1>wC9#Oh0^}VjS+pZZaLE5;ljk+z39VJ^A5_uFH071>kGDw{h zqQexikEG2?WX?teR;tw}0F$d@!$=GOo!Ob<5;}J~M}C#o&(4=$#KQ+P`8ZAg)Z>Ft zS5#urnYpWPV>%ZpYb4`2O0<05{(C29ZYc*>MbFUQpFMk~nnLI)i9}?UcaxzPCESbA ztt4z9a`%){;pUQy8Q^3FQ&@3Zj zGn-Ua%R1(7*jL%IIhognsv|az%aE1XjbOw%aGr)_*)&%UTeB@fzKrQ@o#$O%R<_Ax z(No|YDECAk&oD$~>8FbK)262aLKpzFKXCeqMkz{3nW~_m?hZ3z%i5arI@5-A9dy&F z8Q1EV5LHY;VCt!3)=A_^l>2uMPfw<&#}i?5TLmH(2pf0i?xt{p5-YY-E3DR=cC%hw zzL~#$y;)wsiupAf`r$SZIlGmKCGKKYt4mUJ87cdU7pv8Z&Ua^P}oRKbG; zVp3saq=r!mLSU!Jp>AST*VXaCMDy zMXK7Rwr$(>dcIgJR_jIAbwo~tScwP&g{o`BJ|s6CF$?=StiZ5u@22*Z-DIb4TH&*z zx74d@*L9nm7HPe1+tq5d*=(#Bs>#8mhONkfV!yV*>2FZJZ#oqW<3qz4F6LP{s5;1= zJbCi7pZ)BQe){_&NLlNOCQ_&M#yV?4Wkw)1I1j-*x9^)2aJ;$P{Nq1;_LqP4w_kqs zbykh_teH+ih#)F(hy*4kBB`t9a5lSha&U5dcrdLelX^O<>WaE!hBIce_mr_ea%ta_QavdOzavnK=!fR&lcTob|$>H9^ zPuEYP;uG1+$T5cLv^hMS33qUHBeTrh1No|2_;y+K^78Wh{IYEm^$G8_huKil4fpPS z?``vBzk6$Nk$YWv*UhtX}8Pyu0kB`z@dg13aWjG2g?0$I=Y;xX9z{Lv6d3 zyf+Y19=R0~=-aB;d0h|PTEv*!>;~I*?lZ9W>~-V&eN_MG%MJF5Z+X>g{W-RTTxTTv z=*!rCB{#OGmk0VOPwqYlWxbX)ejy_emq1gl{XJZK>YTtKG&8B2Do>iau0plUo60u| zxD5{|PbsaUarWP`T6YP6O8d9X>Ic>LXDI=~UUFRcR;(yasLTd~^?Roafrz=99Mp9+ zt(&8CxJt`)yIi)*m2Nf!C)48A;7AyfgZAObdhK&(7ZnL0D*4&Xe9)j#)s?E}WbT9z zga~SC_Vn3{S7&EWpFaKIgD0PU^5K&Y9vvJUgus0W`m1@JhjF|i8|Y3O9hH%8J_!6n zh2wt~5wYjEm;Tzpw}88~ZR=p=v{)@)zPSAS%U^x=&%gTm>GS!rRd?bDlEpG*+f-FG zJ2+WfF46Zc^~MnzrN!;z194GsonRcz$x2RWW`y9O@lcWIvUNa2#E8gBwksGrj5{JycaV_~J19rS5d0aSfi+&utSp%l%{f{CB}S zez5l);~f}{6^bz|Jb~68#*xR=V6N(wf}$h@;{6L{A()z zI_{0XEx#?l$;Af5=v#B|{l@Q-Ok`abr-xNlZC0&iuV>Rx#rbOWmw)}Yo3zPhKmCIr z*G(aSn!6HPNnkQk19ovf2A!$sKm7$C1-oNVU=A$1pA@SZ0RThDt&p-H8QF5TXxA5$ zqp3K#2lA4Y7TO<`JhC!e-QR2{cQ^=6Y!tRo$%uEhf-K@K`X;;fltOQ^Q zAx@?z2b0O9KIu{hHB7Qe4r+HD^;Yg#;1~%%&T{)>x25AWlqfmZo)c=V*HGJ<(sz`^VPCT859+?UaeA6k}#P}7K;Ugn8)7V zW0A#sO^&{kMd*g(&lyIAyQ>Vv0MODda#xwjMIlrIoQ(={jDr4-rVR@hPKOi3;ZCYU z_Fn+beik-3b{%#J%+#} zfn43Z%Pk@X1R72#B$$$G)pj-|17z3E65i^HL|BB>t&&!FCS>H|WDGJW^(L2o(gH(3 zwql4WujY9>tC^UYMI=|9o2VsDk~wQ8xWnAYNUdOH-lvKlmZ5Jq7#fUa3?QY%L1KtR zEAg$qp*)WM-zt{lO`dTqpB<-p#+I8taINI(@R%505Sw1B1~gl*TO+M7Yy>cw*3sQv;pSvY?&_=#V-Adt zA!cr!uC4RjhSlWcgTsJ2NE5_acv8jFquI$}b97J(o2F&fE(&uU-L!4nST#s6wrl`7 zkraoa)UMCYUcUb3oAv6l7MjG`DW}wyQDzpR;0Wg28JUBmQq<~IXJKQqRCF2VI6PbX z1vQ;knIdRPG6B~_F@!3JN78^c01>DKF;HDsv1yJE4)5GKdHCS&qX+ly-90%tz+$nP z)KXOyQ6$KGsV`q%Jbm`^SI_1bmz(u^9b+@Cr!kUcH>aGsaySNJ4n*v#DJP{+@i=GD zjb@&aS-jt`z8hfV;27h2y}q1ZUS3|VR+l+vkcmhL48RPknp6RVP)(ZICU5s+8ZebB z@D-1)SPAvMYv*9+aw0Gj2{9Yc=5DpxEH~@3#T#{VcQ7#tO62FP#qeYVVP+=u5`uqQ z0EfL|1TrHavUqAq?1P8*|KRsN`QXuvfOgrzf-|L*B1^36WxKJme|W*Qj7rK9a55~{ z`1voN|JT3%=U@EdYj>JX4}>K!PbbyUtcj5|ui0tRRFk^?=!1uc2h-EzquE4+`Coz@AVM7=3&UUqVqK;%o(P?`1@Ybh5t2_-?8_8`5cSo#bbwt+xldh1De9U6mJ*~ei~es zsE5?iFT@=U`!}N$?%=2}U^}<9+l!3)vj{4KV6fGq34maTq2*>|gEb`dngzJ%7o$&S zz`ReMRD2VAl)VI6a<(gRYrln1aqWHg|M?v)nIUp^)2wDnu*ekZN{G9*EeH}Zg{GQB ziIa)u{PI`d6#otHmz?%auG?4)v=-o53{aZ^f80BptuAfa!5uF zF4D{n>WLp7rS)olacTTU2`P1KAUARlq)#-oKm22nlQAN5GZS->vDWQ6gcxc8kS(dA z_@=m7O8WZE<$S(;{`~nzAAR(DKl${@lSg%Ih`9t^Az}1j)OaX;9|k6;F?>Skm#xvD z-2osH+dGxYoi?DqC7J}N_$PYN%HU3u>Cw9Fo`3W7vw!}@&wugtH!sdE7hTt?gi2MN zD26J8(55b@_VThL5@z(?uFhuJvH=J(9fW}LKamuTT4ogL_~_LnqnnBZ0<%SVS(Q)E!J0( z)>r#s%XBBAfqKY5?;%@W7`>k?fUPP}{yDCv44eRkBh}lLwyiBv98vE@WtMmC!L@N2 z`@8L#t;@T}?)zSj-cdhTyzx5S5R<(;cCWRgKlH}&k;mWIZx@%V zzx>;`^VQ4C<li3uMm?8j8rdfsSs;VvZVO`zb)c|K^4$^TpGG=sX z6Ho`PS8JM9cTQ#xbNd>QfI8_q24vmT%w21d86?SCupkn;%f-_#rYDEZk~lS)b=)k`EIh6}yu4UbGm+_(sz#aBK-m}; zqnfE3NF>%17f@hN($ahpLKQPM(r*ViX+F0-Oly(42+Ez)nUGCsMVP zQm3|Bc{1dzIkQ><1q37JMVCTce!M0tYTz0)=p!gfR@Bw2)*IMA=2+x3TKdNzvC!cb20Bgq4yF6xw{#d2Yu7U zjorkIg%cnSSELTvID-s=5{a}dHi8yrg%Jal^VVZPN2f0{6NAmw3~mZ%76Qk0w+4GP zX*iI&g{qm&rVs8vIypVMd&(ldnA3|F>$hj;tJN~K^U5^3Kr_svgAkxr62z9&lprGp zGmK!?pj;`cB^=Z`fhE#zR}tS@ehUM>cNN#(OiW~+oL0m}oPny?8kyN_Gaw4a&KUTb zgZR@+5nH5B`rQvO6#6W4Q;Ah~Ts3v6-E1~(yX?Bob1G(0GPlB2W}?y(_bSGmvnGSP zNF#yWLrN(&O$mEE#5AKi#ObWrY*v+o2M_N3@xT9*KmYST|M=q{0a#tWozxIA5dvU2 z!`Ubl7#7>@TeeoPOnL|^<}3o`o`KxIDHr0iIja*1GeN4$LdQ>inNcpTfTa zoe^Dtm$261P8)S~S5O*!oCy?YCC*|1*hM-}G9vec1gEIhsX9n^(E!Nc2EQb1To&-R zSUkt#b9(d7K7B%WKdMiD6b?SHc)!K{U-oJ76Uy zr@2A7+QsHG+8H4k;9}(W{<8>{Cflq-#5;MZSfD2BO>nkaDxzmJt9?! z62U#^z@6Y*7byT^1Cb3~fgW)$(2moVp-g-6PIgOwfS?^@gPf26z(WtOI>^`+ZZI&R zbr(1+Bd<1hrdhhnufP1y=$^qY99lL3S10j8LM6a@_mKc+a06m+G=$_Gr23P;__II! z*}p%VzdgHnoxRJ*4wt|&R>UFaoRXH9qg9kTPKYF>RQg{;RGr+bW>VF4r#a^iW>r-! zFBeHSb;WHfF;pKudi>ExAK$rqn%b`IvUe&Hox-NeY16%U{&KOrTrAFW&K!t{!S1d( zwf9br9SNSuA`?G*`aFcHO-2+;_;>8Y(FhpCanRg7K5QymFTd8!tLSllc{ZyR(=NAm zdC|2Sm6#*t6b>A4uqkKjGKhsH%$>G5sb&Ho6gZNLk&&qwM|E^8LY45LRI8{PO7lur z(N?vsqg6F`fvn<<(m-EU{)uAXCdEwr*DeP9j0b z%-YngR-3kMpFe#@<}jMpQ!>fwo+E1|v~hO@vQvgD#JDo5az_c=nXEBcd%dK3#e9jG zH;0-?HHkE#2~GxFfGKhn8IdG%t|(6H$+W2_F`OJW$43YEA3S;R;NG2+yOT*^20Bcn zsROEr^#)I0yng=t#p^dOm#fWu$pBBPsQ@xT&Az*Ln|7;D5ixA7=k)l9$pg8NNskwjJFzwx^1%#2 z_8ewbAaW@Q7u?**jmaGoEets;GlvM%UP??H3HJ_<4?dpWKb*aI{_^a6NfL~MBP8{d z$&H*Nb4c2vNS@|SEkS|IgiakqBoz^nPtBc-+_j2g+L5=B_;4aehjBJ(#T1!ijKtJ= z%DHoQ4icvoTrStkSFg{{&fjjbfrSv&lsy3jx&!s;Q3iWLuk&sht2SI5X8R~->R_*6 zca)g)y`Iju=*xP8zD(ZRLmUPsBbbnrIrZnADzmv5vwH|>;Bn0d)=5H(aE4HF6^-W)Z;M)jfzR+_&3)zcipb0hOr43;+Puk{1g?W>eR-2szZP!Ma0YvI850a}h z!L6i!(rlrM%%qwDBbKab(`D6zzx(^2|JVQiH(!7KwCxNY)B{AaIhfsZ+bsbFSrjue zrJ#TtlY?Ctp=2|P#Ac?}0ickH$Vi=BJd{b2*fmy@yQjw=d@#LtXL|2`7bHo@?8-1E zBS1CKg4m=aH1V210ZkBx*^p2RgGSMZH**xHN)*R~B3tyxcke=5v@ixh)Rl8{8=s^1 zleC-d!&`guz$@IYE9qI(<$l^~1LGQYI)&jDd!y~;z$(_-aT`WmMTWr%`hpv zXqdzO%-8Uj!2~qwhY@b#qdR-NY=oW+diT~oKbnmW%3Hj{hIj^}&)!}z)WAR>?qx=% zE#Be4Ze48UB^vlOL;J?}@8lWYo1eR}U>Rd@yZ#&^23_q>eNP6dU-cRsuHSP1b>ykP zz6)iv_g=oY&s>j7v3I}IHZ|wC7zX{NzjNe|^*7e*VQ~J%4-l`hWk~pZw_K$Ej^eT%?c@D-pNO z*NbHc6%h%8AS8e@!OXnGM;o5y=qaLT>bedwYc6tUftAdONlHXwXTTLkKqgP^;-aA- z&7|_!85>|kK4|IeD0-xlvu{s+28^7%k1}mn<7v1Rq_=R6cbBOcIoO@r&3ZDOVN$IP zSS?}mM%IrG!{JLBl7QfXGN7=tDAvftZ*TQISIIf`0YtcNgpW?CqP&%gd(Orj(350jVD> ziK`Shbd?+S4mrR(oeq1yd|;y?CPUdrlwnRxy3;IZH0{}-``XN2_7td-+c1PbMJjyuSDcvIgfFpSN)$n@+2mi1xEIx0i!cNyN1RQ%K>jDA!bL86)_m4 z(63h&wUuwn{*_z3ov$uFo2{OG&t9J4b#w5=<@z_9?YEtt$Dr~g`X$(dgd%Sub&(v7 z-P~8zDHW&Mec9J1srj|p*U$@K0}4r#!H|O^xkBIIX!E3GBxWIH#(8$B``l|LQv-Id zbVsrU^@JX91O{ypx3qcP_Fr@tzryUPJNUjVKc(uaxCcoOndV9Yoeh@|XfQG;WhqOf z$(UdSzYj_?mvehh?WSQY$KNN6gb7pqor#pP*VuHr5_hK&Ql|J^Bh^h4IFDt1uRh$} zcdzYSvKdQ6d9bl_t?=aAIak}ngFV?>M#C^pZEb)!SG2V;nux0sd%1%1P{k6s-9Y-- z#-nvf`?(5+4&+fvP#v7$<_p9`3ZLLuS+}A67VS5{3cMu^1O`bKO&No7MIa;s2{Ri} z&UaePmrtHQd-UXSHJ_!F9z1&3cD8NW)oQcZY`U%kIwwU{c;{S73C5YzpNrLHkjFTv zlB3nkj)YuMrj+Ws?fbqcildXGlcVG1a^AMBh*a|#fWD90&1QAEX`1Hp^0M#y5YlL4 z6Oj-}$;A8x7o(U zoXdq&g;YFuEFuDdNwgSMHKinsNg72pL(teKf;csRohp(zaAYfmI_6oQnnLT4Hcs2l z8mG}&y>Rd>Eap|6MrgDIQev_kYfx2ib`t`ic|`<^;A8^hfv5!)kYf;Aus)oE|@V{A_u!Fhz<{Sw!gM5Os~OU)OKmynXxj&Bgh8 zv)#6R5O*+od3H-M@0gQ?xr^@DI5BecA?GugCIg%Xih!IIL`1-n)LFuB+=!+xC~ME+;<+kZbYkO_W;Ni4xl-Ce443zC6o;2mlIVBA6;*Md8enY6>Zu zlCdyL4z~3vHf^)6xAnH~x=szo0<+O0_FltF`Qy_Vu)zsCg2wcdAN}O7|J~2J7DtOY zStKZ#nlTvp#Vb%0Rp?r#Fe|)3+df1hE*Jm!pMLSrzxwUV*W0EiE=pnN$cfQnF&FJq zpN(lO_aYXaQu}T}IUG2+k`PR~*fMLyZhZyNzV$ zz16*>M5AT_Amiu8C%w{`3`i-NDVcD#HVkBm$OhohkawJSNrr~mZBSLpbwSjOn1?BZ zo$jOKOPp$9W>meg=?a1>+gx-M#REGee*^UK#~m;dyC{qpsz^H;CmHcc?|W)?Na zV21sPEekOPMPj<*ofF7t^#35nXf}8pOhH28Jc-n;p(tcFJ2;q^C&$ITlk(mvE#{4v zUdWiE5Qx*TE_D2do#4O9aee!Cd1ZOv-<}l02l#3K(!SgFj^Fz)+}xmUkWcdlK3;!VVjPkP&Uer$gxBe0h@|0CPSj_0lC?|S}D?)Z;w)A5{MF z=XIvFDBd%w*WWXUB1F)L-;GJDeqN*2@R z{1P-<`UB@&&=jnr0d=jJkHBV>J<`TZnNc+)SW@VaU{ZC!k3&g~6*K~%v$d#zK?pLy z%18~`c3VpUp5e@^7TRikSvZ={=YDa7LfXC&NMMe}HFIy(w!>vlXH9%n$G1&f1uRY~ zul?M3p{Ts`0#8OPW-%F)W*jOLkqDTPQVJTvrfZr_RaMJ_YO$Czm&pVc)ev<+E*S~4 zONN-J59mS)QTu3pA7g@X6-P7MMh2k{spP;AArf+glq^CMGm-^@R)ric=cgx!$A`)=))&bgZ?TXo}t znwn}!2R1Mfu?%#PWNHzv^krE&@8<{0`wt(SJeV&R);4r;nO=YU=Hl&n?9`H)GFwL8 zT_qeD1;)!sCw8Q9bZ0NzB!$}ZL0NZ)nC-p1m55ArY}W2hRO zLCu)CFml9D3P=pooKSk-f6F--2}D9ny3)2qcS-9vp?ORFYd3#t#bXqwWpN+=2(n1# zG9>g z1N3|^A?jGJon_FJGFa+8TER{y;p|WRu+=)%I(GPFnre50P~j5RnS#Yimo%)lmv68> z0|n9uXwK>n8XbwlpePYD6A3bHOdO?@4i67M`|Pt%KmF8uZ)Oi3JeXBSo4PqWJA3u& z)%p2l+qQ;efSKgbuYqA?re=BKkeNBoyA2bOnh{ao_kG{T7|XI;9-KUU^7#J!)7h+S z+8V?}*7yBtwLUvLySP|2P1ALqnTe2yRi7yDqh4!D}6@D6lMHk&~m~tP%7~eI=GOkr`7i z+MRL$goSd=zeGtPL_`oZ?KPnAo;_z7&g7gc%kq;?ofT&J<)05-p&rYhs z7sU*)q+lWE$rt$cb$tE$?03KW-PxPBUFZ6$vlM^Qy-(VI(=(={h-LBRbbzO((M#fq$_X~{G5Ql|5hBWdogRB8yX$(eC z_OuTX7s^b$0rHq~Jx+!hjLCqg$qehdX}Wg1>9%bX`b>BgkP#A0LA)1Mx{@#--mcl~ z!@!zqghNsCfB)D2-H(3w$?AM{da}@H7{k6fH*40vQc!`wI7CoUurJq}_RZ_p|NGzn z({H|cd$H;YKPw9^3-Qhz8yiYr9UU&7Jbn26?>&F~=v18bZ70l3IcEj!M5+$&QOBQG zdf1Rm*!&>giI^2^nej5Az2d2>YW;C zf^n{4v)ebvp6yj|1SVjq{d;16=fCD(x?A7A@-K}c(f5qZE!V&OTe5E-jiF6d!mj$D zjf0fn4bZHIm{MjO=2LR1Tvk;kGeXuL3)PI|5XO-9R{_t?2rxAyG6FF(bc84lof+n* zPDV*Bzp^2B8)ds=y5K&f_T*6Kz%bJCcaOhkFiyrZpPm2^$;4lDeKfhK%AzQi%VpO! z&9>gGimutF5OW?V)e+4>SqsvPhki#UlUb>4rgp4VNF$pl1 z!n4Y3v5fPwDt%wh`pu@Vo6t5XsAd<48Cb*%Bj-9Eawih0!Ngc?L?4pwOw9aqV5a8Z zGYHR#0^6o(+xk4F?RI;9v3m6A!P93?o;-PUe6n0D4>sE^3jlJyBoc9~W-<28xlC{- z45g7rW6@~0hM`0ZO=d_b2{Ab1hKY!U3(wrt9axAfP2uvg{`%#&zxvg$zWDNYzxm>2 zAIy}Qoxx%VDG@;i#{#aFPfp)0J0Q;ZUKBtElQ_pt5-b@d7{iQxU3p$q%afDkqlbqN z?z^LdR7lUPOqs8pWB)QZs*G4i`S~&HeHfBIz(0Shyt?Cjo1DLMZ%q8*xxLRTeusZ% zQonik=}x}o<@3IM;=12^&$D{HeMkQJcl5pYN7`C%SW#re5gX!S5^pJc_^T)AZ&(?VtaFd&zgu-iImp zfOxB5N3gnV+S=Is#$&id3u`#o+3U-pL zCxsc2xWti&!9(t#t5FFGPI|HG{edomI0$ht7?LqlvN2bQ4eBcm)dVvmHJJ*`pq$lw z8^V5*R5LCEg*Ai7GYFN2k(tdo_HF1J0vDnsF3WTw;o|TR-b*xI1q3ZgIYeEzsj>Ms z$Ym4GySVPCR^MY5O4oPfkUH(#s0W3gm0T5EFaae|0&_0A~Uvb(_BVDxAGJ-)^^? zRUO(+sBkPqY?KFKe{0&)OKc+au8+^}FAVptL-gL!zD=K*_R99C2_T}Jg`35gS%fr} zo%SK)IHOt7*T=KiE|_h!;8%kF4qU!FDJzCC;0y*%rmcmBi*iejO( zWELX@6`tJ}w~*>^arnUM2XS-1Uw?`2Tf>U59`Y|+WF8W7DZwm&qNyWdH30<13;~gV z2nDeu7^P@PraE|&0ZOLX-+4e^SUt%Y)AxFGfFu>IV`&bHCw9~aW)t=0<-L9Pc#A)Z1k|) z0-q;>qpNe@Z6;&t$03-bnShCfLS!rj(Cj(pz!T+XdoNQm{tX8jt?B{%|#>=_#k_^I!e*)a=?FtL#k z5tBPTJ^l34Pw(Bk7eZ*;c2-tZd3X@w!NI}t@$s8CZ_m!oR;yLpwryxtmD!1ih#P8q zXXn1EVyM`ys!h|x7~8g8uh-7G)6>&?_aC1=xL=lK*LB|ezVFZ17nhfpBhNU*7*k4; zFYTOKAj$zwpRrb|>O2!$-?x3=r<8_D1CvG|GX_Blx0n~+S!W#-8S>VpK#1f(QbeM4 zO4~Yc-F9AQg`Y2~sw%v9B9gOaYTH^)=QY~fB0?;xAuk#RB_e|}A%p7yg%_)s=S)4Q zR|;O+E>nf8Mc8|hT+UL8 z!Y${O5LKmLma}=~4(5x8r>9RIJ~}x$S}v^XwW&K1sVYY-ZHvow{Q3X=pI58R<>h%7 zq6ig5B}C?7lk|Fj_{tjp;9a~knId62z4OnaD7voO)Z4nQn`YZ}U5H(bk;o6lbaQnT zvy@Uw$vL-MfcriU5ERg%M$aAvc_(&sr)#x+pBIHVpQ81lZ`-bm;q2{2A2mib0y{?p zO-Ly^#;BqghE&qunc!kG=fz@R=Rg1a^B@2C$7PAjltS0ZPzcw|j35}7XS>}T9UZY@ zyIrf4el~mg<*Wbj_y6ZFzxeuc8;NK0#cWZPl~}>%C{T(I?%n^vXWx7D=)rQ~HJYZL zRDI#t#z3Mf08&Y2eQ0+$zv(*_@kExhyD~EyK^QP&Pf#KuBGM}d_b!=%nW=(^ymut@ z;`zhn#nMZ0_V!|1$7IQqmsye0E@NTNrogVI3|1O9+I&I2ic{|2^n*~8|7zNe_L1(83N!}jfgIpYphRPK6J!)%&I-&| zh%{o&e`T#wDUp$Jj`U_=Z!pU#X3UTPVjk$&Nk??rE^so2Y{!mRjxG-c^2qipV@xfM zJs~%W#1mGFVABiLf54blN!h* z13Ye;C}zfcVLW>0x9k16(La{KC|TMLRtXW4kVuyzJ6;?eF6WEb9=5AZy;^t8rft?5 zjmS7xWCAQCO_9gi-aLf*44Jn*>`l`l9+3oQX2#6U6=tTIG=;L9ZR&ROt6zWdyRRO7 z@x@<#_Wd7z_Pqy>AB3(c=hdtzjSUIO)KV6BlYrl3ghq6Y5oPCu4tQ%87&MWY8Rg;v zLgcy-NH~P}>h;;Le)X$g{p#0Wef7n~YE#XQov5+EI3+V9f{2Kjfs`~4+F<=LWtlyB z?}HF$%fKAZ3hkAWDLZIY&h9;vgXQw{baC&VJ6x*w0SJ~7k+KZ04o1d13+2x$e)7Kd z;r^Mwc*sAb-R)1lU5@>s{+~bB_UAepx39a8TV*%IBkY#r|7LU|V6uhb!{S8Oqrdr= z?>YrErFV}EH9xK)C~x?#4Vd&D!iaF23IgoV6W6dCw?_Cs1eb9w1ODB!;`;Lr(Y$L6 z(Hq(aU}Px0J3Fnoy5=6DYHtSEkU*rq~ zw#NE+ch86S$iwUX@xX`APkaobgeO05Mr`d%H=Q1TXKjxkT%T`uF5w%_zm9#onm;%7 z|IT*(`Z=NGhcI-nSD3!y0pHP|8yS8#HU*S&@j)AE2oej47gwDu7nhfpX}dv!fvoS( z&%$PP`M>?I|KVpp`^o?CKenHI^8Dc7peR|PeWN zz(fdOQb(W=!e$MU_Q8XDmSdI#Qwo}5u%v0V?PH=YASof2jwOOnR7S@B5{;qpWM&K! zBEV7zecywuD2l2qOP3B7%X=p$i$&>#7zx_LEQHQ634>X)#byX<**U4X3=%Q(P>zaV z+&ArNwYj`pUtCW^y8)L_$g- zMFVE@s+?Dg<TSaS8A>N?l)q##d7s95y}K>tZuygE zdybOvL{3hn>u$Y|`Ua+6uI#3y5w1HKt~<1gpL3P@&-H4zkCc;}p|nko?$j+~>#qI&Z5(GNfW@sED|`Sa(`4-c0y z*5bG*3nEJ?s6~)5GpxwW9Y&?(uFvAxFQxvPyVo;5Kb)->MNQa*(50?(Ru|}&^XzO@Bi1;w{Pij z8>>LaRGc=nFn9!0w@|8LF`Lci#bP1VsrXNH`@2y8+R`i7x!K#4Ol-ppVZ>49X)e!W zVsJ#1V^_J7Hj^hauo!6w0TiQg2n_RL}pF|vU7wpLqN zF=|_brexMA5P+$b6lAP>Rx3RYi^iqOd@EV`wyD6J}7M@M@M~A`5@Otp5N2 zAOJ~3K~xCZ_I(pkc4<}=MNyQMI42;Nt&kxNFo;Nm0P7j5Mu{ASQtI$@|%%!QUE^R9iF=FeLNiti|prS<1fivxfG0-ZV&kSrTs^aM0 z{b$d=_wa6eO1nxop6zy59*XWq-3sU#T>*rlx_$_ zw3ru*#iDRB^L)6N9Uso`9iE;XA08~0Wg$&l8?mokS%AncF8VLO_~z@E-@bW$7S)oP zh-c=IC^ODk^j#feukG)5#G`$Y_t2?Uztdgp>L5U5K|`)#FXD+PnZ?vMU0c`nYPH&K zw_WUVSkV;~q0I0U!I>AvR5y3lg&v9txBvwUlGfqZN;d{JGvfnBzim2zG#q(uXcC4-Wp9|M`D< z_T<546_1V%G}Z(n)0_}u5QJ&~L`q8t#*k&A;^HFx{1;#SAOG-QS}RS;s+?CSA*9&#Eb2v6bFvIoRVb;dsVHpQZ;Y<2@}05ieU*ounMIIO z3orvN5$zPJG2g7ghLFD+hI)QxrpC+4-2I~T56g;QzC6F!G^*xM7*vUANWq-bdMhBt zX>WFANlpq%Md25VMKvn`jxh-_Q$bt|@I`{Kz|i-7-L&WDmu=fKv-jSN&5V#ld`gCa z@qDA@ex27i^_<)s^t$Q0x6OoieF(dZS;GVv1G)g^dLfy#pI~aLAePeDTZ+oUc7<>EvCAuC4d#7E~*!Qk~^LXaoKM`gXQHuR`0k%{Fu)s)|A&Ho!pgs2eck zX(D1!G}<>Vb3OqhGYu57){B$$5PCoqLoFs~!YDsKaJ}Ek2)r(mK16^ya(&L45i@O}jNtbW6J)2L7WnfN$&7z9gMUpFeUK{(XpvYoGor!}ZXf-g#HZ z^ET|m-3#xA>+fCdFYV^GH?O9@f57~IN4>Za*72tr|J&}nKf7)_e)BogBY#u?lM!gh z8$vKvW(Ov5;(biy{LE&Ox)woU3MQlS)$iWa+n>LBdHLg?eEy>!eg5o|Cx?g2s&p~5 zN&<39Fl~)ZK+K{s@(>I#(_B)BSg0&Z5;4jp7R`u_+_1%@I6ga(Qm)5m64SP>FD~E; znhSGbATz>P@yIMk8U}~dh>s_Xdt3%aiz;Pm8aP1|q7Z|#QM8&FA%c_)g*E6_p}!>3 zqh;~varylC{tqAd&+og#^yWymO}nZ$?Y7g7xQYI}D{JzBX3CO0EBi!jU?r%dgqTtv zQ;aDjQv=0BWl=bWIAIxKs;b16G!YRw?@eF=vlOAxl#4t{NiC$<_o?YZi0C^Dsww%L z#T#4@2{RDXh%(rkF>s6ts+uI_fs39<9M7wAF{@4v%f-Apm{;OhV@TRDOqd}ooY{6_ znUbv8L=%N6lpstF;25p9(A4eux5uf9Bc`}Xa2yG?!QyWWc{oM%9jA|x?}Q1+_q;yiah!T_Hv^ltSKBK9*AWqHp`&_g&LzT{QXdP}N}^BO7+$ukZ~Du#RDXTaetlpoUv`dLpVnNrj#CLv zhA!34-pnK&mEqxO^}Lc7UBfTiue$Y{?ff#H5}A45xw*MHSO{uHHNy&W%Vp)ByTeZ| zU(c;S4&Aqib6BBz0j!NWrXgZCGFc1;GAMO0R&`_oW+Ki-Tb0bnnI#*7TNyEsH>6(8 zC^L?zBZA2m-3IL$Rxexk+qQb<51t<$J(Ky`&q(>uj1+7THBt3s%qB{lg{%OHM;}50 ziI9nD${sRP1!a&!o+Jj0P>*cf*=UwcWcaNcp`$Ab?trbz5Cbx%5e@`!8iOH2rRVDt z`o{TuWdaOQ&*A4TA2qJ>&%-!@GG|$kC`W(uqwO5fS2tnHkr?n!s~-FnbXRFm}wZ7>4K7^2|CkzuVM8tdVoQpBmb$xMh(RE!}7W4VM zDCe`;tg0#z2_dDF&dy%1R;%;#%k6eMK$2i)=Do+r?Ne1AGk6c-U^eF&8rrsLyBa%> z^KLpA69I5$mB@mnOrWG{0;8nblCS}B$YM=K0-iB^)X*nQoi?GXT`0@G?7S~rRTVUF z8YM+DC=(kQ+YqZGOCSbvVp&e$pn~(F4v2L<%7qMo<4i=;OXO&)BCg8jJ->-*JO^E$(%?A zT&PAzY#J?fA@psx+HN=N&1KuRZAXBLY3ap7S(El%jL8+HS*9}kWJRmoCDdBJP32{( zRvoP(+EfLp%*~1Y(k~plnH0iaK_JImu{b6VKpaHCEaLcJUL7vVVRi%&b}6%RE!V9c=vMiif50}H0bn zdGOh1-*+DC%k`6oCrz+1F-q>djwE0l9n4mn8sO@%+O+x)KmX@{{P{1=)?Ib5bguHg zAk!3E@q92}-oLl_>wovNw-@J^+qN;Y9NI}~;KEL7 zpZ|Z|Zt-^wB@=SYkjEGs08L6vDgY>%1!z`lNG)n?QV1!5Npeb7Ga@C+f^$%M7_0yj z0eh+S1VibdKmJ312aRZ_;^gQrj9^UDO5t{8B=A)=4l~AJGXvt8iNv@xazv$p)!59n z4V&gfSzrbWm_3oPI6#TPl*7OgP*_kT#+Z42kVQF~mxfGWS9U>;Jeut*chi}08w2=8 ztMK}fY#-eyC*S$T?l)X)nHji}lr?GS(*USq2TLiW7~`PdO@mvOGXq#IL#*ILqD+Z6 zG6x{SdJqadOY!hY(HK-{Qhrb zIIo9(uY9F9wdwOt73}Yt0X(#+lARF;cOxjLEWm3BqiZqc(I<6{|968|IUl(bDRV>n zSW$iplIS*^>A+R}@Vn^bvQq{muC8zIoIjrVA&k|%{#?8M4Tzh&nU~kwM~>(99PR@b zME9IlSM6@((e>-^sZGF*^K;tvS*o}RQL@*oNq=rdY)v<_ynwIlocF;xKGukx&VlRw z&;N~wi1zXRH@E#j@AOQ6b@*0>?qqsh^@sM+Sl7EanV)-?xz^9gdM6SisOGXsY%CyW z6g?5#2jhLj03hD1QU-+41CQFHl1W;JC1Z8UK`r=HAvhbct z1ET3JGKWM2xEw;OpnCY>#<+L}m?lTO%*Aqo&uUkqHSoou+vrHdxcEu||ce_969sYLl%S@XRFy1K zJUMAfM$Bfgu4^yX+s(E%QDrQas-En$b<)a;uXusxJUL7<@@o#15QlDYcr1(&? z#O*A9z_D;Ob5_pEI163dHtW7`HH8Eo9!Z09d~)yf{{7PzpPYRD`DZ`*$xlyDPt1@~ zOffRqtg5=cY3dCCUx@dTnKn60MMH_RUHpp1Qc#YJmu(Xhw(vTo*GMZt1N4lj zW9XNVhzu40m<2#IIU;f7G{K8Ef+{PVYJWw@$d$V?`yqjdM3lMjVsF|JHl~;8--Pb# zi}pUxAItIA>Q9Q|xb#OP$DqTg62N8*hMJNf<&^&xz~bO7fylrzR&|dU6WWao6&~m+ zDP0)U{wi#gAw3hF0+q!O9d3c1_~K94K>BP^uQkK83YWa zO7%vm!aH4YH~%SzbYV0EiFGJ2FkUflNLjvVVhdNylried*8|?y^tYXIadp})Yj#f) z&i}cqLpx^M?%D|?;-&FeYj_ndzd-#Gu7w5+g`W+IOx-4gCIC`o8anyz+TZSHNtSk&u~5oVXnP zU}ho%B_Q>Ezu9cswjDVK>>9uI1b39+9LY#9>m@_fZi~*yZe3J~6Hx7(w znzkv;6`L;2I?M{LO0*8OM=$6Ik<>KRj>r)Zm6Cdgsw`*oprwGMo}SC2V*iZgC^}Ys(~oL zb*MTjS}SUkCSe`R*P&eLY@OUjU57GaW|#~4UaJKaN7Ag5)lcdl-h3FG)>clw(IJ;HZvtAVb3K1vy_rr zGGw~cC?E+;8Rs-QSVuYt0Xd;X#`laE$N>-;%?1YLPRmlG&1Tzl{dT+EZns_6r5x+! zp)d=W0gEX!l3mW1&O_8@HyXouz4N3W#`xUH&mj&MLi^~!!=L@+hx3^WU0|WjX2V04 zi(I!j&o51hAg1Wr9$+VAK#cMC^oI<`r(S~F z^v}E7-hOHX&1qlCiSGryaff{ZK?MbZF^uxJQf7mZdiG%-a2dnO}Gi8&WX1>Mw< z-Ga^^@u(h+9lz!enO@;mp7cBZ5Sn=H_HK^+CPx<6E!V%+0W*K^MEWLN%>A%r>9G}#+Z8vHXDS#h+x zB8@!Y+?yN6(+1w@z^G2S@PmOwq^cIeMOpTX`F6YBZnvRh?TpL~#_EtKigq2JUY{(d zBQ_%BVoEz6@VoDKvc8OvF$bcV*NRQZ5*bn6$PS(f-3f{rthB z`>$TTdG_M@GgIgdM;L4_1lAIx*lw-hZUH|TzZ(hDW z`}u$V=htWF=NB6Vd4H6Q`aXn4XLBJ3CSi6^sH$4z{8;&sa5cXaLqQoOBvK_rMr7`p z%@qnbAXg1zMUs>A3LUng52-pL5+mKe@uR z*)1&9J^%bW&x?;3&uI-{`+)J>^SIvD|LJ(%$;91#n|5-{u8-$V5)$M(?Pzj)o%AGs zdb6gwH%d47tM|63Ye(*WlIfFv$XmD;Ke~Z!{Cnx2H(dX=*u+%hoqjr~BR6;ChW^}k z{mJ)-OrIY#Kd;{V;9~pO`FY!TPXGAW@%&fOJ|IqXLwkn={6`7^|E2w<{iS_Gd&d#; zQA_$y(r#k<{%dR`3^Ook_9TFf1mw!9B=H(j3P}9?V6Kup~&% zdS{)pAf^R2$Hn%+{lyP|@ceIn`q>X2pdwVEUmz?*6Un?dUfg@&JMJ&*%}QNzWk|ib zm}8`7$#Okk9@IDTrWO*LrqrSTf7yG}Cb^CyTkyDh#9eZ!6#xlv6(wqW>Njs}{{QD^ zV>UMPx?8PYq}D;?LxSAkhIgQinJ@Gb1q5rcW7~9j318Sz#^?0ta^{L?d<*Cvk;BSwgWG zx2Hp6a)vp(Ya&8h%^sc{9v&{MP&0CrY?h%)1SVoeNk1%bC8FZ>as`+e%)y-1&5X=l zHD6w@pMCS~*~^O;=T})R=j<#|Ds$32=9B|Zhu0WmjNIIA1{`(x@uDz zayDj!5QzPHby-!_VzB^_wNELDkVv%bG{thPIP$c-O$q=ELLA5t3{BXRLNpMF35+cE= zcP0hgGt#AA{J}1lsr!=J2ef=#Ek3O34~QNNdgM0q>Ifc*i^h-w8DemE#OW*C3yYF1 zpyXMG6HMI53)6?qDbXDv=iL^%wOOaU0JMcdCQw2lb5HAh*x61uRk;+Z$>g)y`GEJ0 ztTO*6bXU253Qfx`2l2GC*iHPE%BbF-dqs|w2~t!`Y5NtWUUH%lgd!!qH*?-Jt^TZK zxB7~B<2m?-^9yv(;A>DWz=Hj96M3GJh6~*opIlYd>FI;x<5K{A-r(a@V_nzGJPgBnz0Nr|O|xFFi73Pv zV@xUaX?*eG?3?G`_Wh>#6q(r!X2v8T1XcB|GWw2EEFvNVGB=p#aqRnHlhQCHjk~9h z1kEAG(@gWhJb4g=$w`{C5ULQE0z76TRZ`c?ECp?1dG#$0Q&(>&GPHVF(tIoz|Me~g}1Jyk@ zIkb?5nH@n;)m+CAO2S1E2|_K4tH&U-S#!8-4-c28C&$MJ%lWLSqSPTUQ65JCG4O02 zzIgWR+q0{$zIt|kem)LL!XlM{z(U3O&H{3GPia)urkVZerqn$p=Umvm1#NJ3b+uX# zMa;aMd1#mG*RrY#MP{C0Rqke1_?o;0IJ{y9-S4K^f$2(+)7)L5WY4~RkxX++DQ5?h z6p#n4yDo$vF$4}ouBtlar2VtnGFAn7^8Ul0{P;75!S(oHd2#m5(cxlJAaExVw-PWT zBV4b>P}dys)yw=3|ML5P`TbYdy&j$%jN{16kr3IN$ft*kk3M|=^B;ZcZscAhcCu>9 zuBq$$KE`n4izl!ICLzYCy}L2Hs}YA1trOV1tzD6`=A1Pbmaam%O9RKUy~aS`qMIuS zB+h_(2~hwOXlB-gl#oZ~K!-~vK24*m>e=}Q6ojC@@1jH49;mjblmcM%<$M-|0ux}w z9=+t(G4&~~=HzakQtGCBZ zyO(y7lMsQ8*v*n=7@}L_I6M@U zAA%d0Z!tZ#7(@`9V%?_XIp;L!X0!U@k5B*ZAAa@Q-+j@K)(;63Sb`dlNkOq`B<0>6 zLZq%`b&WCBvFf^RXQu-^(f^AD1UBN#$Rwj6k&MEjomGbi%lFY-gckf%HOWuh1*zGZUp5I$uiGpQ&W2@d2x4-YkVq(3y{k{j9-b3#A9pCQF^?N@H zPT{R%>QlCio6q+)o2bC!w%Db+d-EI0o1XN(8C4#9Lc8oe@9SQ{jiC?3eHDjtPyM&Y+YaY-_jz|3di!+%g~#xg<*jf}cl&L^E54>b zZ}qAHn6SLBv}%X$FFm%ysnKiNe`h@G0#vW7|1~_toAI;P+BcS4*{6K>z4!HhdGGgE zb5DE70i;nW$iz@0;vgiP+zbJ#Om(#go>lWm&R86?J-4=UO`gZmkSzc0-~I9*{_$6T z_xGQF_W7s3_{A?i_~40z2p!=}QPh+bM37iREt{L0lM?Lk=m1|n2b8PUyB_YbZBp)m zKyYY=sulVavs=ytjD3G`W`WyNjq{~&9L-4rb09}@F34JV3EF{N-Aim60y2QA+QHeO zs!#)r$X(PeH$f{KeOyt$4wR1O)$z=K@%cwT{`lmxPad4k(O8<d7oS)JYA=Et|O;T%EwN3V|4w%}rC4Ip=Xb4DBq;=drFUlB}jS zC8HIBSRvTC82tKrqg;@z46uPf>=N8y2w(xooE*k1Oq?wDduRdv-ii-YCK z>FLRXx^Cfa*Mnc2cUKoLUw(DT>g-I!mK6qZ5MX1PLT&&G3cIA-b;j#ggs(rKYZr zjt-WKwp(BK-Sxp@{^K8g{x^T~-#+>1)7iXf=LVR0mOvtLn*d(7j}$-$Gw_~~)_?emM@Jb(K1 z;zXMt5Ah?f9$0m-aY{qyl)Q;A2jcLkIeM@>`kaQV{_<&m_B*VfVt5LAVK{?d3O2w- z(Yq^$Ne9FkWSXH&aMRQ$LJU<^RTXiS&628WhK^;b6^<3drKI5X(ZH&sQwFZ7c#u(H zxb$&8Tpf?q`*Hrs?BIv<<&PG#_s>_C92STbQFJ0ep&3@IwbMWg6OYLm0F!4zW;o!1 zNSFhuGbOOWt;CM8RSqEXf+D9Pu{#2AQzIxh<`H0b5|022959>m8j?xyv~_S1wjzkd z0~IEn1prpm_3jLA7%3O234lnPiNIh=V*(4@h{$O>D=AY91|o->v#A?dWO7K2oGt5M zNX(^^lqeR@>V4DoyXN&21i|aidu1L@r-I%2$S1Bd3WmfCCFKGOV4#S6*~zkRY5nEX zf5gQfKphP$OxcD?4mt;{VBsBLrozb!F=SI!ZRTy;wm<#pPiM1P*A0v1;W&<}-nPrh zt}!P-m{1}rj?LG!{s8M9=-SI;bybxhW^`cR}w=L0uiO8%jMy6F;i7DySlns zZ~BvylXgD4-mEV!F8aRTtu{o&OvOqnvbrVuTN)5!6b?)>jNM|{8V6Msk#D~FW*oB{ zwaskPZA9QD_a;FNgb?Zn7EdxS;SSCvK`)%6K-@TIxWQcz2tg`(&SosE^D%*K?E&7mCGJ;tb^5nE*I z2OGpXMhct*YmI(JA=#CV!%X5wAAInOpMU=G2Om~#lPOS)5+VQxyCusx=_Y&6j7Ti( zutC$N+YGs1zdS#OnOY)PWXf)2PROJhi*FhN3W`ci#$0Q)T;+I~}cb4hkB$|G~rV15>s*+H`)yBjE6ZY9`c6@kvc(^<~m>(Z34-XbiQ!!CV zED@@ziZYJr#o5LA<@%p~_b;1KH|uU3N4MyX0%c$h*|e_foUN{FCR(k#<-y!?VrF+z zRb~!hN~~V8NAK*Q9sjHdSh}m3W*vbk9qe}g74qdxkzwP8MlIFN?S1p!%!8&Bq-BH2F-QB#1Q;HKbkDI>Rth)8kUv4%^ z#Lfz5u$lwz=CN+D^+Grkb4lfhDVyjGZx49wd4&O#U?&&NkG;RCY11@m?1y0}`MCkF zs$j$L@h49nJUD&u;G|!#&WFnfCnxLG<*cazVPZ^2_HuOdx~Vo@;t>D#m;d}f|DXTW zXW_UQ6Y9F1MG+rK_3?)f{>R_^?6XfFI}*UIrYW0c^W^T?Gl>|A7=RQxifqO#>sAf&gjE@fw>Pi^qu5Qj# z;Ef#QuIer#!m?VezIyiU#pQL7DkXISGuL$uu&M$Ygm$#?o1f*F`l|itZ}Nw{&feVq z`fdGV%u!3$2(W|PS>bAK5CdiBWZr4ox2>S`8PMX*IZN%m}J2j0_b3KtV7w zA5G!Td4O}o`g))jeHCSKFgrOuTr6AXT(=^GF|D&&2o$7pPeoycZwbi50iO^Kd!z0( zCz;YSuj|j}yk&prjtSy)0vKz5~UaMbOrY8rCAY+jB- zx7qYv*XfwtJ&;fkCi1LiW)3PTXiedMhe629g^fK~F0Yobw=YcnFtMbW87K^Qb0P}N z>TFHQmQA^m#qmkgwwuM}uwGw2KSNHM)m1@|k|M>tA2$+X2o-=_{^|s#xQ7JU_LZBN z+sJ|7mBGiX#riY2W<$2DI_Br!zIgG^zy9@4fBKW3|LiB9KKaaHrmk6Iq^hdm<1nU5 zxF7p$OAfUo5IM2rQFF?~aY*>$>C=Dur+@m*zy9v*>}*J;#!l=OG#A@|+>lL4glS8_ zCP-j7hBT^ckia3Rdp6DPWF#C+n38C`TY2U51Zq|#py$yH-mAn*@)1z znmvF3nsS&;U~ryRr;-_MqWap7c<_d@=XJdG>+-kV=R1zgU0~142JCmX)BF6x)B0IX z`*%nC*3#dbYem8QH4MW0+B3P>O8xiy2lmAX%6hn6-|oy`+@85x{}0`-y>zd=GwBJu z+xooAz>t~<@5S7A(BXUfbN_#K_22H#d*1Jz_7@9x=ilD7>h}BH<9$xm-(}_A zXAhR{eRZXMUHqb4xi8y(bN%brPv2|LtMQKgvcI3c?Rj9g%-Gv)Ie`kI(z2b7}dl{@EX&+yDB0q=xNQ|G!%H{H5i6?ZuDo8xMQ! zzfpsD`*L4D@3;RuZrt5|2XnJmExqpgS6AAS(ZKJ!{&nTA4B-2V?}>B%Z&=dzz1WSs4{q2{3_~Tdq-~aoo z&p!L?=Rg11C!c(@IGBxnmbg?O@-Uhvc7(cV+qu;9gM)D~YpWn*hC`hlL$<7hk_#_0 zLmaGLRG?MIK$5{ooAK(U2n9l1ER&Oi)zv|6OdyaTgelx$OqO9*)_x<_G&;rU+$0Q2 z1dF6**CFTHQ^nnEo{#47(edJRiJyFM@Z^|}LY@=m(zh~3AKCgKl8Hzofkom>;%Ozb zgM-64Z~AeyT3v6tA?MLu5LAdbyg`2*98sU1b2&9d3acFjqCt?750u#X3s;;N*DTgn8T6F-}xELLeH4 z4PXKx5J7FbXNC~WkdnfQC2(Mbmx(oI_z=LW1R8(jKE>zx-t(h`;mv^qnPykaEuB&{TyJ z4!1F%DdW)K<4ZvTOZ}ZpLJGu zCwF)SW%3$E?jR4ru+U9KIdOMbua*bx0ov1W@b$9$*XOI3n{QYBd#QOGs#)SdC~lqB zOg6^s^WY0=4yuz=ntwW+|1E`11UcI+C`Ap~pd=SH| zhh$}p1{;VQrwZ&7f6R>39D`TE)y&4Mxz8i=0F2Na+nJLQi7-SY1TN@}oO%F6PVCHH z=scOi<=}=u4l;620s#p**HV`Okri&pJL@J4#JW9?B`O3952(V8ko;beYVrtM(NQ3B zhdZQ>>OOIUr?n>o9Y_nkxlH$x37GCTy$E19KYH}ua=EOk1{g&|M0Q5|y=C9wD1k!=P17XJ zi^ZccCpN39s)}M}ntK2xhrBtut{c*Ly;*l%=k6htKpnf6S?Jq91(jwLw|EKc6?K7} zb79V1UcJ1&zAhBHVsH|{3?PVbHgjRAXC#ez%$7j{4+3HiVp$wwTTM=wxfzvw(+s!~ zc*-VU2*EbyZ00%V7;}sb4l)A6x#SvkxB>=ds?05U zgoQx0NES}Pb3kVD?5lqB&4Xt4=_eolx6eNK$%l_l4;ywQQx9r^vO*H`N}|J6k)7S@gle?9_qOYsOKYxjb*asjS1S!` z_1+`LLqh{J5?Zbfq;6xVqhQ%qHRr$%BnF~{x{ghdC#NR|v-;@h==kt(HmjRDR#8O6 zQsNjx2ryh;ufO@``O~Lge|vVZ(QZtZQb}a%;-MrxaRd;|Nj2x33qCA_Fy@3iUV|H_ z!9AtKiJ6I+3#@H>hnFE&oOi04b5_-hix(-6ecz{)Zaj?twsJcR?6z$H03*1W!I^`a zrZM$t9EPs%`>q>?G?rtCfp@OZKlusd)dwt{Q(9PH87M9ur^oL<`rz^7gT)N4QP`Ao z&PDBJ5>9~FONBY4B@BRFTpFVnUEJDl} zhva1L$=$ugWVW7Gb-<>K5l*7Urn#wzMe5LqNa1Fi*`O(pDk4#0(KaA6X4F*}DY%Qf zyP+R@)iew#<=9kp2wca&><%lr!kI|TVCAR|XReqQ^C%+y!&3nH#dS(OLKTIn1arkj zgxp|es#TDA+sxX!=zkE1y|{*_KF{VHgqgb`U0z@JeP1%5|E0+JISb6JsB@#7)Wq0b zB)RuyT^=`i?9w=7P3DHE#7a;qP%oa+0QpU@gLXhKze{|aF8Isj0Z$I~(sE|YISr$L z0*kN&hk59(HX>3>!(64_)~n&_vRkk9;xhFq3@NC$99j-7b8QYcqkS$ff?WUwr2lu+!Xin#Sbr1_SdH zx`R^j)HvV_3L!|_HbSATtF}#>uD@Ch>s1<)8WX_Gp=sScX)baB0HlOS^}ALGXOK-O zBPU@oS0aW}O8J{-&-=dr@{2z{e(=GMe)xmWKKpDwpN*-zx?acVRj8ab#yZ3r9)@Iq zM-c>JG++GTtAF^%fBe_q{ON}nMeLp7Q#jDeZng9EQ%SvG`(d6~S7z3wQ5`Ns zp`sv0VxF?-D(auf+CIxah zpk;(?!;k;=J^iocujQ}hujQ}hKel}D0B~_N?zy|CJ$%pIGex5J5eIKkT<}`R!|Pk} z&SlGxxKrqcOyIUBI8Xp;E_ct<_vDWKUJkDbXY@+=;MMxSi&6SYdB^q?gih&!w~IOK z&=zj{?~Zmqw!OXIl2`hF-$l3o)Zf!yp9H1$n|af)0=1kRdj84Rew7w_O742mL*@p#J#)W(|oV?;H}#8=N_MU4U+VA#f#rEfCN(1gQpZJL?vmG z5!i`|0%;&rY*5NzLvomwWMr$&6@ZIxuD*Wy@?U@b^pj6M`RL;hj!zFh|H+53YG?H_ z2Ds&vt=o*l%G#=Ks!BkVdZu7R6k>pb++E3u47(s1xmq?3V32i=eBNmmvOtKW?W#(*AnJ?DH_(@{&Ov*z@mIX!3(TCeOf zUF)@;NgL_~^DNW?cpzbNVF?5gLdyuKPKbutVb^c2F74&Dtvg@$sn6qRq@LjBjtm0_ zFoVb(3GM_p8wMXVwP~ESZCwZ9Ktv287B`2{hkQx%d7RujY*iOB4JZ=5NMmM>;}8H8~-IH=kGGY`R?@e8_S$%AHG+X++8-@ za^v<|=aM>Y>bGrFn#i53bORV}?ggLCY)sjapw6D*BvRM);o;%w>FM!tvzWsa*8?tI zj_2p+>-F_Gj^o(tm|CjI;3YqlmsFAr^GOA3Z&BTPAHMhcNjDSbO{H*T_ZRcm-D7)y zDsL+6H~0pHTDFXP+W+0pLTqeCWNIDYLSEIOj`5=p-uvX^4?h3l4^B@G0*hNV1mXmzmX4!l^a)2ixFfxP0K_oDD zFi}(@P^}C?RDz#k+rdnCn~LToP)k)Rn-x_2pN7`6co- zcpxvH-`%}5$t^fB0wETG3L-8}F=qbw)1)BH%$sf)h9P&l>NZ9FFQuYmq&J6iCjf=PS?;1Ods0=~ zHjZOow++F+{r1}zFJ6?$UCvg5Q-zu%5-AN%JZoCSNJ7!X%v~*KwcJ+~i<>x#G`Img z35PRdo9FLljWQ?7u9|#Eql~$#LKSL>q4G*ZA_5T=xq2cOGGV~Y&C2G_ZsZ^)qu|8u zh2f?KRu?9TRm_&mvRX3Nj7)A0KbSp1b=@u>K6?D|<0p@5N@-ZLn}=q!k|)*y4W59( zRV9Qp4*h!5Z?1;E(_xc_(KSWk66Jye?&RbMa8@!!P?zK}dE0y2S=;&iyyq)xuX4Dw zW`%0-*g4d=^0`q%p^4Q(nnl&LO;yL>i$IaQfkto@WjSjP4i4tC`pN0xvaJpd4wmyp zT}@P5a!{;>USGbvdVcou+izbye{ptsdD-<@OPX|df-vvqCEQ1Yl^g^L7m;MT%^Om% z4h2R~hROuo@*=?F=3X*5!n`L)5e=cO=!luQ6EhK+yQfjRuIsvPO#S8c#WX6N2uwsq zFrS>)+ih){X$;)9k8YV@cjCU~L()-8-9$x8+?=zid+Nra>$*+X4P!r!kbS|LIr%^6Sg>+GTz?uidmJcOOp}nb|pOQcVo1+j`#MdYDBgcg;DE zW;y4a^DtN*Q`1yJO^iY`#ggF!7?Tts3|Ej)8>x!S@zj~RA-%j>=S&;|!&6cw5~+wR z4}Ad5+u6Z#zL+(xi6=vrCZNvNx4=PE?P_&>esQ_(dM|9JTfU3^F}CladYe6_@Mdm^ zKK@qYV~^Le&#Bsaa!Thov6-n&tBi3ZA~&dGG#%8sF|EhGOXFZU1LnjGC1hqN+HXD; zOxBbS8xD}~V=o;5yAWur9X0KDQ(o6yAANuO{Vg}_cdg&|?kXn`0uZIj#c>L_dN)*v*58LTp+EkMn-uXO9>AcqB#awTi~0i?`}A7`)ISbA)2Q2c6J7`f(y** z%x1(uh7%|Q&L&&ZYU!y-;IL5rS%SJ{z(lyJDTslSyHcf0E}>q|4<0@|e(&M@!GkcL ztHdNc3MKbM=7B*1Vp0oRnw=A2%JVV_V|eKmqOyM*FlpqJ{(74*@H?+3*u8`A@Q3f6 z?R`=w7b5J>qx-J^GyCWF{T2Hc-X;*=OpSMK&-d%k>EZYN^S<>L(ViFAU%CF~ivis7 z`@v^%WzFm2H|NJ|j zZr^pje81E48{oJJgqKu=RKjB{ zBwS*ShAC+y2n+@jfe8$$$ZK|isH%dElDa9>5F%Ag3}M)efB5A;|KVT0c=-6?qsI^b z{#VDR$BU0Yc=W-OM<+*zRnt-k0kO|IZ)dZ%?K=%{Fe{W)-A1@VVVc?8+|(U_nz0&? zVL&2y8rh-NK8R8~OEeDIiGi%IWv7e! z;X(6YQO{eccnH?7&o8o!eZ~E}*5ihbmp+eGjOt7*h?RgjgI#MHnb0=AjMZUt^x&|) z>eiQ6o0nJJs!vy44+uxDDHsO_Cv`V-W|!#Gv3tD$03ZNKL_t(WS#uilkW-(yuGBmP zp(a)_hQM%gGgG&c_6Gn>DV=C%pi&6{6ZuvajNH>W1fjZ;x{hrV7xQ{KZ<{*kI81)& z;>I;1W+s4`Cs(Gq!PJX*GaD0xC74pb885C@=jZ2_*H^#)^6PHshkgW5RWp_du$xa> zf|L0%75>w$XWI>E`g~(Wzx7wRJC`6efdTVEqo$%_GmayKLsJ<`_MmRbJrQU3dR8AD zog5z?Ef3~(<<8i2c>cU!tyUN3XY2LaT|)>Ji&PB{PBt;@N_+`6F)D9bLR0kjRua+w z+~u~FyXV4qr}dEFu)2;yA&9=!L_2k-r#|Ko3t4rYsaYdVho+AWJv73Fns zx!dOr0ZLrotfaXmm^TQJ>B6tl}3l z?iw3wqsS68axQTfM=*mr)Lh|kA)YJ?a)V1bYnxkQ0$d{-x#i>zZbBEsxTtW%I66E& zde+O+7hhbTUD|nNNLDeA@RnsRp$UX_CoDw56bUipN=yUt z2A9{cj11(#%_t=^HB*i53Nr+0Wui!-LYH)xR4h~Krs88r82AMj648q0tL^~lea&{v! zNGfB}$kog;$jI5j4tc|R_3v$%xq$#E>KZg$udlzt@GY<+Pvmeg%)R*4iQvv|1Q7|u zY+Fe>cV`ZDUBCbS`*qcpU|7k&OT=a-vNuon)`ucRRjw@ccoFVU-E1~#vuT+l8rc*QF2^n)8bnFJ8WUIeoilrdx)k z6C?z|0Npr`kwQ_lR7=Pzf$1h-VgMUC2qmCe;w@ztC|bPCRN@*A*X#qin~`bK6oS`* zLSSJca-rQCTVx0oUI1?lxWEkVB`$)=o;QF(MaG`RCZ8w^gOCr8KWzQw$o%5s`kN-4 zEI5)8Q&v@T^%8G(A>%wi$JKQ|jQz0bhHjJ7;97{kN*t!R=tOoWI4Q}HNWIDwGB>>~ zHr}pmw$|pwz$-M@TCFVfh)HS}@xY2kVpF#Vv0j8`7V4@ApwPMRAEZX{DK0i7> zI6OW+oX-}u)REe{skYHyDAcf8tzKTPzxw){ub(|XySVI!M8t^I(Dx|a!lv1P(VeY? zX$c0TlpG4!X0xg5SOu2t$iaQa-5t)>j^GQxoy^LK%B!j|vvC~9aonu?^?KcP-8hZ~ z>p0O~ohK@&I~VxKo~1l_A75jb+;N!hhG;SeP|k1wsrs07)Vx|>4P);6z8jKSvT`*E zoP9#e-I|a0`YY(&k8t<8V+#3oe=-)uwix51_fAia56P|Xx>;MZn`Hh zj4k9Ksb0ID|^G#D9 z9xN8^jNF+f_3+(0ba!{65CL?5c| z4gpnWfGM()NI^^jH&88jIUG71L_!dUxp~ffe!lKI9XdYfYdi3EPB98|MU+6Y3%b##Ce<$I)toB4wL}3iDqQVhE8$*nBtgE_h#(ucIytJ&A&D6-DRKz-p zUdBz__s-M3T6P!RXh83Nv-??~hz>6>VkUQFkh^6N!%);M7PCdD>-lUv9M+fDo9orM zStlr5T!;l_53-zd8l_~vz@&{^TFVZFI&L6z+YiJ{aNcTZcr0>GB5L^U7k~Wn+1DTZ z?){(s^v6H^!Ka5ubA~gsnyYb!7-Y5DeDTE>zx(YU{^$SwOH)s#v7Lj|jm)#N>4a?O z$(VyP1*eH&O~90)092wq+0>X>0!i=~6HzuF98@=9K3^Uk9zQ%?oSrlX3vQYmLUtN} zq?$p_1Yzb-4*tbI;=E_)Zi&BCl+(6v@Rqatb{P0iI7;8CyzBaWPdop88-525abIiy zBm48uU0z)oZvXOaqDbGTXI?id{;P7?U)P_1?x(${KmUvN@V`&FS6=8(SpWA30N>K= z-uwIt;$|wZGWOo+`tfiV^zmkl2EAkb_rNo5RKmR|Ywz)Zw;J*LNR7Sco#1Z!IHOlZ zK;Mipd8I%1F$=HO|0<*U%{bO~Zcj1w_oKOQp1{RW-~NyL?eTE)aVu+SueAA9)_D2+ zI+pgE$HObQkNqeO?KpNj*W_;e>{iJ)kIz^7^UcaX_q?w+kIy&GuX_+!ue-i@d5TfU z(=pob=4b)F69e_y`d`zYS3?-@+MjQJzpvK+rtwLLRv_>$PLVhmnVSLvA|P8yc_QXT zUC3G|V|IusnM=l)Ax`E#+PLWepqfMY<=NHw#TEUgn$4?+C-e6o96x@1{OJAnPEH@z z%VVb&Mr{lgljme9+mHq`DWoeixE2|rGS>{OZb+pkBlW|Gi?L6_jW_dZK9AK*SQSDD z3gQ^t4WxigF<=m2Y3zkud<>o<^|j=ANHa+XGoOWg*!ofH%StOavSsaN(HT%p>)!l) z=!X7a**3FgK3l{l)G>w-qA2IlUAgEIMVi%eFrOWya4@SD^Xj@Ao}c-k7}Q78WTT=m zt+Nx9K_br3#Hwxsr|db8brlvfpUt?fh}a1w{caI|_N|8yWsFJS;tepjy%V6dmA6%x zFPhn`YU`@5xQ+;{1Cls|g_*$2Q``dMsAi;;0W12_PLW99Y(|@5yuMnUpP!$-ytufy z==yQfWkZN{4JI>aGS!sLi!vS@M8x~l651o_zBR)D1Q6ZYStca7cyUAA9DDWd1aXG5 zJEll4wqwd~@rfs&FHIS32Tja@*b~MQ}hD;^Ae}zd(8x z?fFbz&g7~IL(oo;0t=ZqlQNmZpu}szXvPG%1y>@AAcjuq`b6L&ba?qD#BP@FcCz z(&|#j7f4UxSI{-E0an1qNmvpr0ZJv~8V%&`nUO(~iHKlC>Rf@?w8W(dE`Y$JyV4dg zsvb)BGG%iGgDk->J+6?h@bcWRpN{eUv3Xd{9!h<*c=UeerlL7`X_%`f&9feL;JPTQ zGetsGd*e1E>-nG}9W~iF_Ib!U^w1GGV|@)(j3X?m4{Dk`ff9v(1`Un@7{RMdBPflO z0R92*H^^ z;>1MmEJO|xVux|g4uE_L0E4Uy?rfx7JI$4wgy>3S?&ct##_Y|}?#<_={ndcJ+hV;D z`=l+^X8$+4kmXjRTTM7?UZwRJbWNTaDsG^l6zX=H5#^C)c{n?UnfyNt6K z()A{vU0g5XA~uqfCf7{l1Yu`#)`UFR*k3+B&pGFuTnC1MnAkwXe2HYcC}iz6 zP?c>qc-`6ZYOF7Y<~miY+;nI*UX3nEBBUx2_&P4C*fg_QtmhIc5voWlQs#WvhKI+^ zgOkIfgXQ7z(R_K-ws96+2*L)aXX?6Pv)K%N`t9$Zt~dSF_2#-8lZk@Iq`4azk;sXp zaR1F|J2aTcnHfxKHjLf*#aYhdllLDYND0wSX{VeCRI;-9cFJrSK}2jjx;c@A$i*Tn z-0{8}H=E67vl)g#)tNcQW*56vr=n&_HwNF$_}I?T@34<{qrDUnDrB|)pS?F}k|a6O z#XeOvbN5(st);uGfd*y>KsXc%p9qB_yzs&s|MfeN2VQu1Bl6zxVFp0&-L>Qzi@Ted zs`6kSk&%^^)m`YG!Qc^gsLG7=@G!TqMVIgU)Cr}O?U1(HVMya@v&m{Y+0?;>0Fb** zU`YU=gFEjMiTAu42HpYr{vrQp=Vv)A+%3(i9w>_hIGG~Ecyx61;^PW|QD5+8yE&a<^U;O@$e;RW>e)_Z@lIz$75-Y!a{`|L}eR48yQonLnH59c# z1{gboxv~eH$q7Z##2DIzIcnRkiR*?8mAa`N`NYveki}{fAb}W5Ko3RwQ z8XJO>7%*X%os{6jm9$Uw6Q{3v`kAH)RX<$`Qv{%{qN>_|KM`p4b)%mWU)tN}A2^=x zz5fpEd-tu?{%cag+e(D}m;R?F4h-Ldot7hu_q*SG_KO#%r>9M5S-RDFeD(6;>#x84mw)+}Km76YAvfSa z%x0!Jn;DBr5Y++zI_>>TAceun#Av^z7yu*l39re{AroaaW1-ke(>CYN=Vxb6oG{m(z{JpIu4 z{DKM{gvgy>mQ2h(UP& zK5zf~*Md-+`d^FHOraXy)i{}&!D|sq0~5CZP$^R6uEjW$xu+ieKqWhi%whUzYh1&lYxKaXIIf(8j=C*hxWE%#Inv zAnfh7P0b2BRLx7*TXm?w2I=Oze?5fd5j z^xgRIs1}hLc&a*%M9Lfl{`CBK9^3h%>1Hu9!LwV=MWx0`;OqjxK~>*w&krC8LcvMQ zSj~q%ZTfV1ee>$&<(oIJR-0|fstlt*!d1XCXEiTG^v>wg&%1*ivVQkGVBiDRuTK;S z@RUDh_B#b(4&p>v%jjN6;;dbsoz0Jz$LF(dMqL9ntZ#93akIXtFur z7r%V^}1H1|fI|vj_J&i4w1?LVMO1Eiy zk#8?-bK#rs=f0j{Y-!u^x<%h<3Pmj|$ca?R4Wz*=h*wG^BD=T~5Mk_y*agZB3IZq@ zYAB7NP7DzSA(g!8`!}0(ozk~A+gopHuA%zXZMlou=*x?b)#XM7k%l#mC+9W9~jS z;)IY))S?QT)p!d#m_^`i(>|qI7Twf~p(HmWO~ZBzOP04~94N26j7SN71MS^6@D1tO z?ELNTCL@r1nWOe>!W=jE}O$-a*|XJJw^ciJ#r9 z@IA@U0FWoxIQEwqF9}=6AW(s5Ej>fyT?dKaHYHiB+^v~AwQYNLc6PKpVP+JBFfGgw zg1OS<9=~lbRi$OxC28Hgk^*xX%q-`;-ERBYylEN$w$oMx&@>H;U>r)ZoC^#5PKMX1 zW@(A41oS=!d?*B6%e`M+U0q*adr^uJ6TWKa<2Z^slYIKo)Bo^4{@u+wzq;LAuEtF% z32w$TxkTnbtw32ArAqRfir0Zf6-uu9lKUFNV1Y9n>a~n+&GDLQuz(OadI&=9TEzxI zOuQFDu%OO>5!Zu8h>eWhQtBJAHsGkGqfU-zaoIJoY0O87(e(Cub@Lj2)=?LZSh$g< zhKxwZkS8Ou;iEsW;dT*|18s1T|YvqOkTBr|DDS&69fdatgoQcC@H?E60F3_v6>N2?$` zum4T6aTlzg)&kxCjCZfv`~BG`l}Un{mQu!&hdytIezWQOF&o^f#(RaTpfbl5ciD)0 zpZiw4f@?kw_<`g6L3^jwS2OAR^;j2d+s@9;&OZJ0McYI#8Uiz{sEV+;3*Uu_&1%}j z6#n|^=J$X2{PK21&9WA|9sBKa9-o~qfBoXwFF$(HvTipw5`x4|A*RNF)w1VA<`uXm z^W~9~3}e2$zWMIEmtTDO^>^RByjpF(`F>l>av4e~gv3mZs0crQcD9%`PtTvec=5?+ zzxefw7au=)a=tieQ=fQ85SKvA4dALOEM``6?zdz8#$#-VpryD^AQcgz3K(+ag3#j0 ziI4edzfCE9-)F77Wrqs$a^5YM%Qi&z;#xSweK3@qtALY|o7;N5zP`R5hM`V2*w5*l zzD3x2>>K}}yX`Uo4v=tkXS3348nUlbS`TSk3PND$G?I<=RS@DK>&AhEayiknzsGs^5*9C#l_24w-;CAX6P@r$O7rGeBPWr zZe9QrF_EyD*TN%#NMhR@N9mS+ zR#vY=?zh|ZdhGjD3L6EXrfW+ct035Q&bztm>txG?4@6 z)PMK=tLy9QtLy7;zkTu9XP-Sge?r_`T&=$N;*0OT{${n>YzK{9HpZGHC6A-Qdo-Hs8Hdin=MbzUBC1 z!Dj>^svPS@kvvOSx}dDSqLE*y)`9xr~XxIlNW-9$W0TQrfY?t94}kpCWr_e z8J^j-!iw49>gq~}?(PbAw6mz{<{&Urlhn4GVcU;KW&T ztr}=%4k8W`nh-)62cliIo{6ms0QbuDPI$CG3vo7K_G`_^i3j}19A|*tov4&5<(dA7Ikv_&PA;OBYy0Fd9dDp6haU?Ou+t?NA}MNA$b1|#5>~ek8jg?aUUFw z$M^q798M$=?`HF}^P|(#qZnzux%uw9;mPSy6DdMqMksJ@A_Zx(nN1~}cRQg6-~geI zgOgE;k}5OTdU5~*;>unkX=^>F8y(-+_GR9_q~W&Bujlx3LF<;Ob86M1nwX16)rC<} zHj`39P9dpKu!hFS7R3Vqw+O(E4NfFZ02Q-6I!qnxjBGxp&9;XB3W;M^%C~V<9U|^wY>3I-+>RVFvv+jTdS7 z&hi|kR;)}l2H{l)ffPPjo=h5mf&ypgXhPr!08K>QlQl8|d!=}LrYh&#I4QXij6rN< z>H*0xI5v)k{3XW5%Zc}&m-eI8;zfV_tL|tM7b;!Tg;`(Ry!LLFZW9JIy)r0PVi-pz zH#TQ0vopZ5m96D$d7aCsWoUGRtFJ@8Ea@T*uaMSAH{gM60~$#cbuoLbiPnN|$iA+7 zj+0|Fkbnt9t~T-Sg+UQSpx|CNOGc#+Vdg|m0m22%giI2kMxmGh2Jc)3DwX%<5KxPF z1kBMq8JC|Po&SAz^kN>58}7FDH1k_a_5Dc6-RtB(WC_$(rd!s-l;|EtcyIC6>=2nV zX&JWbE3B{G2CBl_#Oh*1?$Oz%%4_6sxDkiA51F~6ZMxIbv!-dPp(`Rj{mI>(xMnF1 zZIb%lDG{|x3Avh@p_JsVIp^Ek+a|>0V642MnfeiTB?MZ0eH*)Kl% z-Dgj4R-3b1xmcI$tzGryc9XWL25KYe001BWNkl-Ej;)z!_#)oQaIICj}|%(m%M zpT_J=9J!gLAqlB_sS#-riEWG$2x4xf6jddLnGHGRocAK+`#|t6Nm*mK?3HRwq1jX@o4}7R3!~JM<)CH%P;=$`5&rk!#Iv@6M||NO=t$7>zbqGvTGVM zgJ}p2;FVH+zl1G@VYpeZ*6Ul<%p7V~g9Laxjk!N{9B%&cC^a*`Vhk%2+vRaw7+Tc--CM)h8`yN|jF_nY4( zoOVN1pX-tM(hocr_UZZEE04uz9)yP)6E9A zD{Mxf11)IYHO=v&Idxv7BBdxFMUQ~{RE7y7k-~{c9CE-8+}Yk>A~-wI{!2GEAq1FZ zcTHn1Lotn_p_v^mq*~vYD!K0SmWPa}!}uhCJ7&ef9>S<`h$_OcSJZp-TR42Zu8sFa zQQl6n?ytO`h^hb&r@|6IUWw~o&jA)@L~eq#F}AaA9LIj>`@Y|3%Fw#l>k**){r27S zVREg&71(jWOJ;{V)qepnoM7yrYK}7#?=cjB5V=^e?HzApdAnR@YCOO{W~N1kM;lE`_=xz5A#?RR`~Xvr&k`H zNAHdQyd&T7q2u`z&UZh&=lkc?VZP%aUv_7=&~E1Z^!a&sA{?GaKjwKq)E<5qpZ_!S zad+>1hvMlY*Y6Zo?xx>8e(+Bi&%bEfua}=akN%+v;J>C(`!m}9AlbG5#-H~G+lNlL z2PwvX`?lN8CeXP7vhx?~KI;dU-7(_+0zLg(`%2^xc z!RDRJ10pHwAiicxCDyAr<%w~&huEjYJkrefuZQQ1;rP;`K-S*ZDmb$8ficVg%XKsP=GVk)ZA6bMMOA2ON|B9J25ku z0aB9eTGZL0S^K`fcyoJwyL$QRa=YnoH`_ECGlwPsC~ibj< zF39*J=4sU;{t@YohtS#y{{OBm_7Jmt*S(2?3si+%28fNRkQXpF&GPi@?CFc6^F~^@ zL$}!6Zm-^4t#5BEGr5ULa0G~YA$8RRH7zN!h%jS6#ty*9c(<1xbdrG|^}Ih<^S$xB z>&#p6KyrYLe>4hbp9cQWRx~Y_%k%T|huzg?XDLsiMQH_ux=?4xu=**CGQ|2gy*ATh1V3C_4p!-NU}NqSeQDaT22F1!R5) zzQF@0s-|b^uf(88vGvrzk1>C--oBcD@;@A%eb#lKsJc2#Kny3n3yU~`CgNTF)&4BI z(GJ25Od8<+pQ%dW($<1Y;=2#@dhc=B$Quu_Jr8o*;#2a3e2ICtbtcb5Mqq; z`I3nyX%x;R2DO@c{SjA`PuIsvEFw{yb>wm*WgCS!&I(Aa zYCSu-F@ZtmV$N<{jFZXWoSc)(2FDkAe3`o2k#0tec{%dj!YO!e)Ja@~CdL?Nk-M&$ z&zi1{Y%MdhxDe(oo}6}{JXt(F?w+1>%a#}OwrLs!E-+&u!giB3o6Y6rzX|$qXry!W9Jf#$K_e%dIBI1%#5~Wg7h&6}7dv5Mdd+9C>{D|Gc z#KEBiG51o+X0y4yU2nHrQ?Boo*xY4*0k8GxCji>SCcLv@?uCPm;Z>A`?|Isc-FaOB zCZK8KP{Qq|-wyqH)o-`kF)I-fM-Jjnl^E}Ysf;%{PrJhp_;){rJt+?&VGmqpCs%T9 z0w2wqHXv;`gg9%vY^9hZ1lOXKg$z{Yw7MH8gTMUd&C55draLmHG;U8$Pa|kP3%~m1 zr^hD?CqO}vQi}VSO=nHb8?ggs>>y)t@Snc?>JNYX(|`KM|MI6Vz8;2DQH&=jY%!s6GW!A;Oq$Lq- z);2|l{oDZ9cgONL_T#osDb-=G_y!UAxgs}vyYYR8(@y#TaNU(8UYM&T zMlMwC@X1QA8t_vLlz8c zDX7cnBHTz^3RpL51cSh#5G7}0W@aykAt2uy6h4k{h6JZwUeXP!=F{<}MO3M1X*!La zE#@bLU^K!DlMz)uD*k$cOZN6Q3}C{r00eVqnyTYDsK61pkuJ1NNRiu!Kxr7#W_0oj z5Z{4{AP1%1-|}M^hhl7wgA_GSJ{s8$06_4_QmeYxm2U3DPDFu)Yh`#AIMm(MvX|Ln zA@f;xeB5le&2@WweKYpkT#|^WD;o=&0c4Y2{?w0sLUHO8x~4UFDXEkKVP-bfVkQt% z1wbJPs5oo3(bAV+ezm$;_1oe2_%!Ft9F(|Z6$+tgxWW*|TQg%p*LA8|SEad4Vi4p2 z#2^(xNaDmwqzok<0h1uJ#q!Csljk3uoImN7N2O^tOHLqMt#7zPHLv%y^xl-=x2Nq1__RN7@p}wh0_YrMV+;e}Q8i$;sGvGVK z++l{VvOKGR#=S`J9U3Csse1012QGlPXWY@6v@!tz_*C!%2cHG(56TBwM!)y$2NgJQ zczwEi-kmXjaJ?K{c{th!&pQQ+^{rmLBkM_W_uj+)=yZPqrrNR7I3Ii$2lt;shtpSE zh_J)@>25%1$3|rUdgvb0!T2EEp@GN`@D2w(KX{4>cUDbI4+lue>C*`g8g^fY5ewi| zITPLhR%hvMi~=gqaA)=HUO#y18mi#8GRJSt&x7%N2S4@TTjRs$x*JcoeFCh87jbVb zOzjXobnx=@ivj>oJSIuN)w(nCG=(TtejXPvlKsEn^v=V zK9To!Jm6g@2*t^W;5J@ziNE;u)06XK#Y){5i-m~97`vuv+qQ`u0!Pjbje-m+RE$x( zk{w3D45%W3fDn;;v;y61nK^{Uyu{dw1onm!MG7HPGJn0@++3|*Ef(je%ai5&Y|c%T zu8ASkaJhw$&B>A3H8fbZ@%gcAPH=gwSGTxWhrVFIkaITA4ncr3nVAO?3hL!%rQ2~- zI)2uj8V!>^wmA_+p%`LdU)`+dv*!5t?07k!bxjByn20E_k~=_d#4cW?CYgi-2V$7z zl5!6q#t@p>thZWmvf!0uFUE_IwHgV+< zPDiP@171r-q9(cFK81NE&&r96CY4JiGLRB;WmN+8oqB+C^ScExg?a?e#-=3ZDDJi1 z8+Sj0(m|66{K)BCt@Wsw*&;{KnSKrdkkFNK<;!b z_UC&=4($VhbZ`Cc_MgdKsyo%)vzP)WPtKoz@(F;xAI+>E=xUoTZ!b@;#*d!r)AN&) z#iEH&cZa%?vr8ojq5#GmnCs{AL>_b}h)9&s-dt^$C#M~G+FoNU$BizKL%zQH>OY6{ znuc#%yF3k7T{kq`2lO!|F}M>869sc0oKWc~s2L%N)Us;bFi1p^)COV?1SYBHQY`^m zyip3yjXD>ld>$3hmHeXQw#_a-r zP1v}*Ad3YD4C)T0VmtGYw0J#tD7uTGVGhKBoQMk&+zUvt&p-fPSEi#l#K0y5R1&e4 zYf!KJ2Kp7Q{t5bD2K&6r|I_jL|7!lR`m+#&F@qW@>Y;_{FetoMth8F? zv>3>YKVF|4MI+mNc86KktM~fQot; zORZDtOMoGe0^&kmjNl$7g_4Shat@_ei5Ne7@@t`IU9${A0-I-fv<|&@a+J2lbLkQY}r{ChzXi>Gh!U6@0;y*+v{cH{VJ|k z1?_xPwr!tY_nV>LJUyAcIBJ(tq84~|w1XkHZh@jnC?F$J7l#`=w?<7tSRAbDA3r-@ z&gFRC2ze9HG!bHDYuA^ruUGwdFSj?_?KqBs*la!&&P6E*MNdQ8Y;ML>U}zae@S-J; zrg^cLbzLCxO}}~h`s-)Uo;BU6d0z&sRx41w_oDz2HSn3u$`D>^u z+wNM+;2M;O>LFiB&E_&wAmK6R&1${ww-?uILsk0}4(#sg3I($WL4?!+h?@%t#N>Im zaRE@mg#IMCi}gF%LDu%6r|iI9fus5tfp!9hR5kIP-F+%iE5r_h6H&>9p;6ccU65xd zXA9w4+Irisog+7KmA1l~$29BOaXU1zV`+;LC|+Fm|M~Y9H`{J8n}=WmcPJV8;gf7 z0o!Doq;L97A#pSsqrr=tgVn0yhST1WrJ^Y6APQ1r0z2UHq*TESz$&B)EVa4?;1Vjs z&)pcKn^vuUr;7ZF&h8$a;nOKE;!3> zo$ugIhTmNyDV-1T=TN#$7C;0Z$k)gTXokCh4wj#@qE} zZ02WY?W~JqzET~#4pA)U%shwF4#v#zy60h6D#8c=)qSbP!KPX2aFFc~d?31usp60+ zd++tT80k*8ua0NA1F%wueVfd~virVjz}B%#+`_B7wnr0B)|UgR49qOVL?msP&FAr? zp<GNj3Pzfs*6-qQ1 zfn~4!N8~1e@Bu@yj+>I2wIRSNz_(U;p}Lh!UI0w1AH9pjRuueQylxj=43o^y&I|VG zQ*4TpA4W&-&Hw$3ntr}l6ZbGayz|HI?l$2vrfa9j^ZtCtgZltLEkSTEa(geHyxafx z`j=BSUhmcs)wuUTPY&a~6LO8F2*!Tj^HO(6WoKDd9a75!j5Ckev` z`!iA84Gtz>c8XW<^t_pis!Av#cUJsi&|e)4vl{N8vT>{q4-IS$J8dv^!P z!}z(}jpu{-x!<2Z`=6&R?eMR)Kf5t}>pZf<`#+XX!9k4rUQOJC@j1-4*dhG)-Se3a zYvmqb2%V~JY-YZh$?{=Y`!}a?f6JU@x7( zK(*(mONqlf?~mR60qj&)59Vj>*gZS^5H&^nr?A86aIc5&o}W7*LOZy>V>kcdHGUf^ zb`?PNR^HRzQX23_aC3Lso^Q9QZ*MVr?-7a)el>sl{rmO~PB38?13tW_e!u%yfI9&2 z0|xLz%F$yF@Dtm^584x${(ZHdt+>kH+P`9Zz`d&>d*3@G?{Mtj@$X*+RP+Du&ELJb z?lx93a<2d0e_N<%X@JS$Z16i+13ROZT)`f?dyi-7!~_R1vAMHzfVT(*X>>TOfoHNf zWpLHO0#gXXTp*|zaV;P{U?c8&II(8-w(No7JFeU!H|b=?zj)ey{EKB1+-vDiA|?*v z%!x>uoRP_TLU}mbcjpXGTrdz#039_m)oSFChzR?{NEQ(x0J&Jo+x4i+tIbWfIbOt* zljEb~MbiY9$}G!)n5fqNF(;4n*zxi4a&fYW>%QEsSL@ZV9mk?p3_gK87#xJ62X@0| zGZ0-rJ)4OLKya;0Q>Yu;$Ini?HZEuLS=+=Qwf6*b&CWzb5}19jtAl>qGqVH|360EE zwUpGSZ8Lwe>eJ=L>({Sezj=LqbF=EVDd!wQH;F9M!O2R7s>8H5(0}+e_|ba^`G+1Z zwsS7-zRXC;)F}(QX7mK6ieAy=T%_XgFhV3d@8ZZo|#Wj1a z2J0Z05wX=Ms<}H3K@9tn0ehFG_N-dJw0}b0IX3slfbI>!&j=`f=Pq%u@ZMut{ha-2 z+7KcUk-DitL4lhP_-b{#O}g4_Utivw9(7MnPEL=Pi}{QLKnjCfRx^+@3}7?cSxmKn zsH&Q0@7h>4tI_g8#*>-F@r~Ymoo>Fu_2;5*TD<9GGpAKV&$@-Cz;gxz*w3aYXh>Gk6j!gEOiM zDDy4~CYG6RI;>{sJ4y{w6NXT>5x1+$TMr*`IGcr|7@MSA43yY(mdo6&V?SXWAsnMU z!SSbl`_IVVVR-534KO$c15oR(qqs*vvBNl$5@1fHl6H)0hBv?qw?c^SY+kCrK(sTL z31)BtL+VcIWWh6eVI4Cka`s`PSF#z(qJ7@PCbY*1Va!MdG>oQ&B~(@e5jh-Uw9hU~ zX;-J<%ph?Jxd_6nml(y$>@%ER&~W27y<_9Zf&$8=mg>CA`|iHaJA(TjjR$sfask(v zpTgYj;G}pU6M?*8YATn=k=(O8$Oh*OH>CM+^F=!Ts9pY|>58BsQiH0% zNuWERArr%#3Ij&s>U+ZVk8SsbTx$VZg7I5_00T~@;wrk<{uFgP5v= zN|r}8xQP>SY+@B;G{v^xHjG(I$MgC5BA(2{vh_9~ZMUrCPAR2vq#?;R#i7Ka9LQ8v z6~#eL>H=7HxGP%t7=n-x7}OF1e9?s%d^vBPJw5vD(`PR}ns*H}=lLQCfe1Nc zb+vi*=K9T>ldfrD001BWNkleIN{YzR?RL!76S(pcJPu7H}V5|LBYHDNO&<{g_H1g`ZC!7}t| zNNKwn`o2%8m>E!uFCH$u-49bW4A{i=eESIAx%>urwLi@Y5fM4DI8@CwX)$mRgaD(_ z%Fw6vdc9t6H$!hO=9MNpwYRr~$=u!LcmFKijvwFNS%1k0WKPpIWaLhSHt=HBkgAZW zi|;%Tb^<5}*Zio$OUj^-&0fB`dinY`7cT1az~o6>K6?7>`A6q~8K9HoGXSuI-H4;A z6NmYtD<%B#%WwbjAAkQ(|NO_7Z&v-7`efNfCgO4p^I@mIO82E6*qzMkkzdU|Ez1A( zk6&Nit}kyk-@W|JKm6|RK7Kkwncc2$j^-^ph$zOW>f@lEEe09K+!}MoBB5s6E4Dl| z4cCCZp1%_|86x{)HIEG%tb{w#MVY#Z#JsFS2eHgowMSn zw6_#l4yQCd`07IlMn<~{I%Q0p$85$z(wb1Ov`T5+>soa~qQt(lOeP^`_sL;=SG#+? zcIDu*!@r2Z3FfxXGgNz?QRSyyYXE#7C;17Hy~ph2pJ+cbpsGSh#0sj#Ec)$u{pxD< z`Z`~3uu1}w05vmVkdQmUoJfhBS?ifjCYFO2L58!jfCL`BLcDo=uu(nQ9C_LG zAnqFGlO`@sjy5+d?YG<8b>3`TO^BMN6-F+-0bFrSKA}cxXqvrZ`70A0wsSBm9E9#$ zqwL^4kitm;23yTdx-qfB7;Mu+aMK6?g1R$U*o`Q-qwSVtJ^+LI5LiP)^QFw%Coet? z$IIF2Ddvk58YdVS><94AsT&V>iT%&);9c@>0%U;h#TRJ8zu%4XV{_tf?V$aoh|zx| zWdE)Gt^GI9_Hpc=`@Xx3$0T5OkO01S2EWgMe!xEbfqovCl~dN;?mqDy?ipi$XiWj- z_lMN?D1ga|et&O%sGk*&^J7fmL!J}A{raJ*`_vxm*kji}(k74d0Q>L*PyBP;|3jza z{qg*v*<2Arw9^Bu2_izR(YEi&JDy^n`km(O-Ss;}>ig%>gT=R!*Qbc*M3Vz`J zho~aF@BWXr!^QR^=I2{A@ZNs?ksH6G9in&+uYByW53peO!?TZEe|YB~lZLOgNeq}! z&%00E_tSv@IKaNs0k1*EeX?l}*P48L=Z7Vu-s(A-SJDc=gaE19Tn1+H;_7DN*~rzc z>`2%`U3)y8@`%gb%=Ez{Gb5`i--FZ59xlev zs5d(+%EQCM53|S29-CK}t2%^i(0#ps;a{#@W!m1@%*1+ltVkjyWz>-2KFTrZl< zZoApGyS5(&Ws>ZP+$4rtVlvg-?za8KTua7Gp$CisbrtIvzxwJ`3|vPJOfaHxJPiPQ z!5gU&@?f|L*qT``^F2xw+}ug58V54@?+`7_spKo$Q~7 z%#ZV8`&a4vQ|X^~kWbe*KlkM$Asmdi;^A|0VvrD`!_7?99TbRTtX{u*5n?2zZ8O~8 zY_|{VJZOMNQ&NMCg@TGpym(1~XXDxmf@CKhDgW-H&QD{~#(n9yZ;!tA$3bu>k9?{* zoQ}!UalmOTCq_TySX=iqJ@m(VZv>faW#{()vk+Jbuo%w`bA`HU2vyGce%)?1oBP@9 z;d=M_<>kd{{_6TFM3m$)l3G^xxh;ph%*9}>>KD&kL?BwAF%zW+u5(@SIc>Q6-Bx% zNCqaVs={ar%4LMSr0))u@Ik>p(lq!X#m1LPR>rX^vU0ythni0RL4-VQcCx%tYYqg7If$Le}A{U=BsZo z|BC6AxwqEE*O#l+B5MLMIEe86<(ZSuW{WNjZPV;_yUq6D z;o)JuzHi&s-J7OS^%x^l6=Q7X%`jXLxd>lgtuC)t+fDQE@R0IA3^=VHHun#A?mnAU zx3~Ad`qeLf`OTXc0w{ths|tCH5d|fek$;7m;m!;R1Qii!+xG3-x3{;q$2UA`LMB25 zy}i7efAh^RD+!h}TQ*lxwm~`AT)0|PFY1fS-mg~l(By|5-|y1>L%(s$IT09OW@f6u zWN>9j#)&6 z!jh7>BMsiQ*tV%3wC%kc;8YQ+p2MI>86=kBCCbAL1~)RJT&mLsCr*XqGYfK{cnAfZa&5P})Hu4|g6 z@B6+>swRP$IY?E449)X=J}<7^zE7&QUT;X^X0xfP*=#loA*7T5gb;#ML}JA5?nQfL zHwW2R=Yojf+g-ceHk;jU7}U%p!uB4%)A0F6_R*(sfXDWcpMF2Ra%#1~3-kMd zDP#m4N`DTzAIz1(ye~n_g2iHXb$wxQ!`^jm(>{lsv=|tD-%AzRA^qkzzxnXtLs(p@ zDs#n3LjJ2?eDlqluZkyP?EKglhI5}Y35OWf=y%`!{{Q+Pt04CG#lK4djgOCq%0cFlHucl+Vy{r7#l{ont?|NQED5#zi(Q;-lN z6QbrOrR?sz-NqI(sU!rMYLB5zBn1EoSj^?+_2rvaFI8f_Tvk;jAUB=BRm>dRNLAq> zL>Y$u=H@P?-b!uu;=3TYpZJ5Hy!V6tws+qg-sJPwA2LCSd zw@gOn28fXmb22xUo@kfyL))(VzRRAR@+k-I*d)=!YM?!uv46|QzLnp991Y+DwKxDC ziL!u+L+f<4e6jsbL}iT>62HTEKCjOo@umIvpGUC_P&a3Cch4%!fn>8;fB%oa?QhrA zb;#<(hFk&*nRHBCBw{M1YZV@xn4HN$&Q1_#g@Ki9PZ{`Gc%uRPjGxgopi)y9W;Y-1 zW2LM4V!o;bbCA2{kyVKJS^MbRc%Jmc{ZrRJMe6=}X$<2|NM+oL{&jvG2}b~XXDt!2 z2!nh+n^`rl=d*s%b#2o(ZQE>fKaA0!D5U@U^g|}6NMoT5lsv7HQ+RNuKFU~n2B-Du z_mAZe4#EJ7)L~ZFHJe^6SKW3~#o0zAH3Mljhm#{jH#0YoIZ9n;Y4(qWz?8otH9LN9T^KFVJkKcT}Kj-^- zyw~U8pNIE>(>=57Z%^^ekGJ!5JkRyPj=0CfoZ0VzH2I8U-#*`8aBe*P4Bm29zSQ3_ z*&H}n+{n!zMLsnYPkwuD-<})*r$7Jb9{G#p-1wY(m7kni(+PRJemZ(Iy=?qEi68uF z$8+DYr$2H0JiX>8UrGPEWvzIIYXV}PDd04F$*Do%vuP+zNDg+5a%)v`3HU*Ij`z%OUg=HOITwH9ntDF0W+q;MDt_7q` zYL*$`5CmlA4BM=47qhsWFG3yanJgE}tIO5pav_YsE(Ey3VV2=e@DRuxC6T#2l$p6v zJrkxtObSm!YTI_R*)(nccmMd^rfE0pW*7#hDuh53+$iUBu8vWNj!M`^HnIKwaJ=AO zEGqNyAwKF50;bUrRs*vTS0N0$wnLK!Z??Pbrq9E`5Ed@*Dxs_)#$JIcc%}Oh0HuR5 zGt~}HpMCoHQ*IOAe{<;b$z_g5SN_Y(Q}l|SoI%e%?;{z8VY}W$iB&y!1R@$z(v%j9 z1&mESYg#wWkn(!7nbq>mS8tY!+2!TsYPFbEk%^7WP1UGS)iIL@6OjmuDW&yQJ@rhY?e@GMNVQvPz2(d`D(FzWBoUw{$*c(W8poz z4`>_5z2hCQa~ROW6Ja3qpnO1G9hnG(!ASs4eVO}=;?N=^cEB`c+FL$OAR>bi#66W% zU>Jh~nBXmjyZpo7Y%EH>kX07H%n;Yw2Y_YI!BFCmN;j;K+l^f+#ny-j?lf==P|B$a z^m4u=deJvsgS2tgHaCnhgSeb8i~{TifR5*>yCZ`3)WqZt2Zj+Ddz3DF;{2HWQ+BrT znAGB6Eh%o;WrCt0LzGM3*ffb-`KFH7&s^UEu#$3 z*v}JW`54qS_R{>Yos2~zJu&*!J)qlwk|PyQ@m@tx@DVQ~BCv=sNd$<5%nU>q7Z*}R zDh1V;i71!osCL(<;r71i`+mD!H%-$IZAvNUp~NKRoMWu#^Le3=EhT$njGAHQB64|o zSyffj3@N3)Yx=$)hCxKSu6y_HUCzUhx|dhitK}>NR#mkeLU8wC7)sG!Dlm{+In7lQ z;Oq7J?c29)+cF1d_lyvNW-}nNq?AE;d42Wz^-I750RjQkvYUDm7ACgb>71(SVs(9S z+4kXn)8Eb8hh6?*^DroKhN}Y=g$NGDA>~XiMgZ8^9a0DeX^-tviN)DtUIYj-J0X+i z%t7W0zMj?Jyj(78TP@djY|U%gq*E11GFasn84w?or(cXv0pH{1L5 zrtj5UVzp{jV~8be2tJll9)@AJ+vS{9jhXAZS}Yb-oJpWGsClmIXl5c(*EN8)ZL1j# z!ypnv2ri~$vswz4U9ek*6HYWZOmD{OW-}g<^wf(SbH}2$)7$Z|4B2_oDvBvX> z-u}E*`^Z`Q_yda0uh*NlPn+F#y>0rwS4Wf>t14-lHaOKB{>9{xaq8~= z#MT>ArT2XcAuJY)>+9=svANk;fpt88osd%sOyrcZQbk?Y{pNSyrj#ycGtE5!5vl9= z>eZ{+yoMhs1P>{yMi`P-ah8>S^X)(Vpa1t?{-?kAtDA?NRP&q+LQDdvBb!bb2%mc{ zGdn)r@s)9`YJ+dK&ENm#w{E#>H~-uJ@<08XU%r9mtOKC6#2C4%s-jM`ZOcNXDmjT9 zN=!Wx3Anhp_~sX1ZMp=G?0`G_IJQLM?n6>H7m47|?YjH>`}_NQ)iF$wi1vP(PmvRd@aH@~@=dAnTkv{*WqHtp>1;{B%WX?_Z;rBmK z>f9-W5Dvg@2@D~C#y}P>q>lg$?(8n^28Xi}$ZP=7X`I~WN`V)gybzfHw%rWdt#n;A zTQG^3!#|5-=yPQsvp7MP_V)XaBIoe5a~2qLK{HM)IA%&IiST^2TrQV6UF5-aMpxsIDWIk?b;092@VKn`bjI3HB{G81_p9nD_UQFC@BBlkVI zFqM!g&q@U+B4K7CGRp~A=j3%2X7g~dm|tJdU%i;Wei>G)9D|7{yTZ~KsLhN6HSU@5 zdAzRA&Ym9;m-|`d6sJAPex8i~SHAjZw0{oIKZ|4d!Pfps3D2SzBzZ#afH05i)f}}KSw#VynmrCz*r8(M?0`o?;eIzAi2AG%J7U#o<{;z z5SZCK@o_>vb0c#wnH4f>hbub2X(>S zX{-g}#idbfW7T3tvuaWmRTdEmEFvPJ1g6-Vc5T1uyY;T$cKxpHm#g~n@^W6q`Ft)S zMD8#cyCJ{>6U~Cp;&L9Bi}~ehzHQpB&6{@D?7C!X*1BgZl%Oex`SM~BFE3Z~*=$i) ztL1z#t9H9B3{Fn2<_T~iVn*OFsJdzaI+&O^I?;BQMIy5dDc#>U@7}%p;oaN2hfSY4 z1rbqIRc>NtrN+-8XY@p)8bRuD@XAEOVHzAK%w&F!6*7*TtA}b#c=X=gK7AyetSNjX zcf+5S77P*QUGH^^1Gbk4%%$zdq8CZ`y zvbig{&^{N~#|RQqC$}+clbIpxU{z1R!=_*FhTFT{%~qQZsgOAa5(y5NnZn%+qnpgf ztlP3PP%A%be%D_{A>WZ-@1+zw6R{vOBdGyx6NntfRC1E`J_&Q61Mac=JKVQ24szMAkUgdZWaBNz1$bsdJ=nYsi~1rXbxqn}Ga%m?5?rIOBd95meIJzJC-sU- z=>c{qd<3pRn8rfwPyBO>;kc$8AW}e#z{unfE)ETYbf7JI^RJ>gTO^dynVokz!SAt5FZz^d#`?r-5OC;_Gf zrb5hT?ot>r$AU@_g1DOqvMO^h(-7t2;({3<8-~>M>$YuoO|#qWw(Yv_`_0C4&O_=8 zXL|@C#+sR%rU{`c{#wmLjBz%vFE3XYm#gh|eRFe{Qo6o+_2%oZnx=dA?p@N9Ewe~f z*XFrx+jk#sR8si8}}W z6pHLGU%p;0t~7((grvkjsG6CUq;aHNBD!6cvGtl?scGz$3X=zlXmesSnm=BTW zn(zGT!Cu_t>RziYE&BL|>#sw#;y@vUx~{7#l-%DKB?v8N^8gb{RiI@ZUR+{rv$WlA@9*yq z9^CnSesOWNSS(_UMAT5@uCbC~7(_x{&qJuXZrDTYOhkpgWk_Al1DKrxd@N|f%ueR6 zETXEZ*OXG1hPG{+T{jE^M1^CFRdEWMJF|#{QZ(dL7yzBvI1|m&ORYzr;8Wy;Y|P9g zOvEr9a_;+-vfVyxcWvJ^&5$xt2%#c~xw#J?1t=UPx$3YLd|bsE?S&`i%;(uhX11@l z_cV8>=zE#inTZ**xvVbg;-oUBF%Q_vfSAI~%peXpOE%x``nT^sh=>U1q;5K2RBv9r zxVl)uoJT@~P)-mB3``#4T$IAQcklk#T0$)1yW_<8sn0px6B431;ZtM+(Y z3I|Cc^8JF0sN;CY5%Ew zj=$q+oZ`p*9gl0;PV}X{T5`@G@kdbXb&BHt6oIX$eqI0w^u+Z$aX$Zq@~o%%Iqmdk zmQTHg$G<%{Y^UuUKmThFk~lX$=jP8BP3y@qHdW9^SHYvH{6`V-w7=*l?!|vU@`Vx2 zcK!e$XTVE9u7e3m(^o?fcG(+8#e^GAYX^u74x_VN&?md1k5b@Lj1-c@AP&qzFg3}R z(|ChKpbQd6{^SHLRaMnfsCNJl+iwj%M z=cR;U$@r-m?yhcNiM7<#;>E>maKF2Kc-SpAo9(vQ?V7Gj%0#h}tL4Ru>($q9uCJ~x zs}LOu?b}^nP$B{WE)0MIl{i@=b8}}fhrk>hoDFpy+pfRAzx!}=_x}CO?Zf?Uw;NKX zh?2h8=8A~(zZK%{vXG$l5V zEJEz+s+mWQE(1_f9>=Uf2QU`5J6Trri40(znk6Uu_T;zIQ91#_ew?xSVma5J=T_Fo z^raZ%cDLScK2QiRUN*1ayt%lz3ZYUrVg{FDybg?8!^5s?yJ54-H}?-0tJRCE%a_+z z%f&2EloIOU4%HGhM?{g}L)+bc*uDLZAKus1&QkZG+YL3(FZ|-FTC8Sa7QvzgPsa6Bd@}4r8DvZ;VhElpm=eut(19vymsK7@ZnHLN*AG8D_=Vag;R<Yi)O&-VYB8O7DDlKz|2p;2WhatOWvl4-Cd*M39X* z#!yn+i5zOCd*37xKu!W8ARnrCd2lLabdAa3=uk?AyQBMcx~sY>%tJk&*8>)=ZbV*9 z=0{6TtdnHp= z`sVH1x7+QuTxp&`o|6&~MN~6@>lcexuU^DT%yU+Ec3~p& zAY_8#$BMI{u9kP2I(Wa}xLj5*xVpN!Ubp%Ff$tu$-s-N?-Ovu2s<=oXC2^1!rbr_q z1}WSMC5n^nAyk8x5~c{Oj1+>+D_t!xuc&4Y1b5Y(&6I>$I4foIY&>KnrL0hw>@Emu z(GXGS4t&oI3nehD5Ws78GAb)K1Fnb}vA1exVe6}nFE@7eU|08Ecd-IpRP}4FUsIej zyb4@ZF;-F%f9uGBoqebxt>*D+RbO8%zk2cV>#wdZFDYIOLlmg0LWA+2rOuGj1BcAK-s80)%TtyZhms;+ByS52x(ME3bu zDEYobR8mft%Ox}CTx$2COs7nFBySfc9+44uABJJOZJMTOhd$?Q3U`lEmBw?N>*sOPL-*v-~lV+0`VweL+N&Bvk z6-}HIKaV`Rd&yD-PRC&qCdkY&N>x==tldiqW8V`46(5+X8vs>h^&r)d?Zf^3!)7BQ zg}ytbG@oDm*{^=JSkBy)$bgeFu?}{kYH|79+joEUUw-{x{_B6cU2i$go#VrH>j-xyf^Vkjjci(^b%fJ4wMEF1cvxe&g{0??o#U1ECdb} zLdePTpm8iKbJBs2Oz*v>Htpvp@VW!R$5VPVo;;ut_>h=gNLG zyqL`bs=yA9L$A$l==)H|vZaE5yz0NF<3F{(ew_Bt*=6VSu@L~-V{xP5NvP*DRqZt) zCxH`Fy;{tdix^`XhQ4XLu1me8lq_XcV+o}Q`WUGPz|W>3?XP>j|ECv@AIu9hFly9p zfWXOm&r}$hst_bBVhqdGML#@zxX=AC^sP&WoRS(l*j$)+UzYnoozDg}cXD#_k?6UM ziIsbkgPnD95p6n8S25+~0_f*7@qSHJu>e7U;1zMfrO#Q8i6b#7@G zGzMaJVPSS~c^htSMEu+dMeoZ_@cIb|-v;q#Yj6z9&1vpB}& zZ2BpN@cey$f}2g`v+(doc+qomZak-$|2cf=ss8!2g`Zbr{ORNrKOeus&-c8~%m+Ww z4gMt0%2U^`e>7wMOXZxOH$3~hkILs{z&wfdcplvG{eQst&s0mie& z;Z7F4giRTN0!;Tvuopt8F`aX)*}{j2Ee9X=DW4`8A8uj>qEe}PAHVD6JNwiCF|31f)5qltc&3DTJ`M&&&;mQuvCQ zBAicW@5lC&QZb9l{y9eVsyoK&fHwNM%hABh2_nK0T!@o z$Zq7Jyhjj3L>xf!lm`)F_XvUYj5?b`LO+ibV%?QSuvUteD@ zX4P_035jzyGj?L4Ixem2blcC=m!Z1yX4Vb1Gwn?kowhnqwTN8RQqL&zzD}Nlokrd= z0<5G#TIqpDcV`f&0-{lL_nf`!)23+O4__pm#~J+OA#kPEaYGUt7~tEaNeG5RFgz$ocF zJjS$x3C17;GIELd=7O9t%+Z@0K|L9^7^0w>FL)MXt>7N@k?Oz9q@ucd0+|!2BhWLxw%YQE+@2uB#h35A;-!pea>RwRkeOAQrAZDO~JCNW^2f}1b zV7_y?6sIyCFLqc;41(`#Cs+c}4n&Y1ruM`C+bv#PU;JByS23@;GJrzPO0YsCPbA~U zR)~Pc^+jVe^mN7T7ud0%hn_#1UgHEWM10C_({T} zym_-)t#WSG>-EjeP17{X#p?e4da<~?xVX5j@2jdJqMS3c1gQbf+3p{iZ7=FOW|uigkpm^-_Z zWi5%B%wrUk2O%+-Yc_RrMj+}V)zw^=6NU2f9l#;@*%Wy{xFTKJ-_Wro=W zq*lXB>KH;DLJWu@)RC(|b#V6ndNq6V`ugkFFJ4`(t}g5467?KS-&V7rI^5npeE;3u z?ag|(v7z^_RdoRiSd2wYvkuu(RaNc^P>i)%KMX_Lw!<(mvk1**vl1WR?rqz)ZQJ*K zsq*VaaApcj0nQ;*AymudGUuE%6CuVJV;u9^_bE|O&pCHP-*w$E3{BtleQ%?-CIDCt zu6HA1A~-bbaB8hg*CR6w5O>E|PlCslSeB#jw;UrQB9_6tJY&;r*W0FPnm*;CcM?}l zoQ>T*n;3-IO6=qFNX3}@Ym-gvGwt_Bt(~=xipFxVH^=I~q(r4q!gyH$noB2HOoB*o zVsnU=w9jI(lpIi)o5di*kXc<~)o$7kHxJvUbDj;uu$+nIVP40tzkX8*!<9kg3@Q~~ z%QIH)vfZ`6{>R___22yM@88`iF;`*8J|yKJrA7cTF-4Tq*)v0m(c!1HjR{I{8f$`% zRdvn9QZ!>FRRcj%*6)7*R&$+An&+97ZY?+8iB<%f6oK0hlro7$kZg1D?O{=+ZMH|T7ibuI<=HyeIW8B;6 zNme>d^15(xz)bYFl9gEWKfuU|PqfYbY#|5C5M1UC$*O(Ut)^}6H)&|yc3G3NN_1j( z@q9Q^FmVo@vkRss!#Vuzd3)rTk?)w~!AvfvLU}>#rCz%kJ!ik;*vox?#`Ru0IMLgE zg6d7ar$_ocP4a*-DqW>5-_vvfO038ru0mi#YKGJdZW-q6FdxXAnOR7f6oqWJ#6DpR zDFPdW04;mozN!hFL2|H_j*mEQW*>7@?0I91NSKMlHHBeF%`T+@gh+@$Byy)=GStuF zb;Z7*$9SFZ84aJoEhjViY>mw6`HQ=1%NpP7vZi z>_EL*RavWgUJt|2_2umHo?(T8!b=jZyN{z}(|olO?7|bqsp%s=HRz6`VZ;I^u)z#& zQZ^Pz3FM}3LV=ki%4}AV8i)DNcI|fCHcjq!o_fp46zql5-^d-LD1j^E-g07-W!l-1k^;WYH++?5G_9k93SluTBQz3-I|Tc*|!9ec^aMs#$yJ z?Gfq1+4*oTWB8=aX>(tQpPz02xC=ki{%7wepC!}r{G7bu$2FDrVB<;N`Sbe8>3W<# z@5v3ypH2Susi))Id2wiY&qVU*dORBWGwq+~HeWcNU+nLAaxZ_P|D5%I{cQ5o2mIs8 zAsl3CJw2v?{+E=eH}yZh4B$V>AG7={^Y%~juS>=V>wSS4qT(K=!>=7B*|F&BXBx5M z3f%KZ14LwCAdmi9a|c`jCI^BDGcyOzqGUPsfI?5sm`9a;Wuna6|!c_rC8(^olvSjF1f|RFx?kc_tTf0aE}G-9K!%g59=n zn(p#KUtC|h)1nd}GmNBoQQ(%cTUMUW*fvvlF{fKjh7>Z`$r3fAj7AW_xq{(DsQrid0#>>xa6o%+!km zexG7BrXx&eONm8#oYHap{KvNKJgYPqvAGvMULp#mAep9|vyzKQQ8FJITQ`Et3e z=Ccs0GRSUThhPQ6GHbh(Qrd3%7$|+CSCwadW&if zHMo-!tBV0<$nHUcjGTs?Ox-M-!IZ<^X}GspibvH$q5`Bi2Z$huS0Jf4W>BvU>p=V< zBC{Cgv|VC8>zhrk8sDVQCP_W*I=^haGMhnX@R(7J^O9GqS2N0Qy}9kGx2V3y_B-@% zp&x*E<}+YRzJ(9)R0tsm0P=pDW+!6oX(5b*FyL04te(oDKn5p@A#eh_Ig%l%B=rHU zdYBEfS24V(7RxGzL_v$CQ3|~uN8Z4Ish4b{10y}EoD8l+fonG>HOhXmod4VCTBp8I z$B3|UIGiO zBw`h2=RFodZUl{?C!cDPlcDt@iDS@e~ zs)B5%)aRV%^J`Vjc^HNvD=~9%46AC4k(pzRmzS3>U%p%{7OL8GyZih5&1R#jP1D@n z-HFr}7Z-J1m%^DjX8%f`^5LF^!_g0H~F95Zh}*G8r;P_Lmdq0$e#!}!3f5q&N5rnHsowsI1B4Q z>Ao9=wCTHx)qHVzv7F5+ra&>U7?=lbl6g|gZe~U$oeK(gav~!#Cs#6aBr+v8kdcdn z)d3Q#aELFSmvX0sWpDx2Cc%;)pS90OvYN@yOv zuDA|(^YZ1Z7pq@>^X98p^W_{wfFgI$oNu?=+neqCcef7@Y3P0Er0vyINSKHeZq~Uw zi`7xgG^JGXzs+nIhOX;UO0(HaL_!#2hEhtq-EOnl6tb4tY-ANUAP9%~rmDk`OVwT? ziZKQW#4xj>`E*0uw(ZT$4FG3i-qXD(%v@E?49+n|kq98A-1mJcHvB~F5r{Hf%2VZ3 z-5KJ5#Mt)j!^7r&{m|~VNsVYMjo|L;q&b@wPjNM0F35J}tUR1tKM`E=2g<|&TpoxI zuf|K=tJ44Cc7?mUNHooAPEoocKWuhGR<46;s;Ud^1`)YjE#YOh2XfmxBM%!GfB*jW zx4--0yB}_vE;+}n=8)yZ)sXcNsAg`yUT;6#+_h~BkeLx<%zisS>SOr$Pc+e7{H@>G`MM|8qp) z>J}ta9DLAWNJHNvE2@fJN!2_N(`d^10I47)>)FZ)Gm!Wmm)%AtpQh42SOwxCJF9JBu2ze4s&89zxwK; z-!>d87wHALW9ykHC)F_0F6kIQb&Rv$dsxR9hEvCeGYBKSIv_TN8|))93ONazu*aAq zCnk>)UR+;(^Y!wp*KIXV!aWB!xT_0uh%tz&mLdYc80|tv?*4OoG5#bc@^fh>=l0=0 z$)Ds;@<%H_wJr1Xd=HQQe|r0aeRcSLk1rfAIsAOC-yid4@SsOR+ZX{6O>9QI@XpR($o z>%Rdo&5yo0zuqSi!B6|Tr;K|vug3X5T}K%Gj?c7Dt_FvDQGUsYhy+CBW&pXA1xTfy zEnMrmN`sl@l7DGt?g_-i>?B}kVWOk!UK()J@=_?;F4-wIcT8Q&!v<$zBp) z*|LG`Km@%{Jvkgt&x~jB)9>3HYmuEXs(GA3_`Ep5lGoyV*c?i!HYu5D<%aGPrr zrfAup?a6spu(oIRlhLVvxZ^a^c7lG=KCgXxx_!>B{;_xT+AFE1{xBm{Rd%PhoJ{3C9~HJ`GO{=@ISoz>yR#p3HXuV25p zT+C*0>r+$L)u!pY`@4|(W$;=xxDcqjz{k?chpmpzPuVb#ihhHXkWo0Thpsm-krK zv1fOfD-l^qMrL6GBd{?L;I-xGU`Sx1zy|4wS{bj{@*p#M-LDp{b!%%j>1M5$W>@p& zH=SOld_Cl)rwUd=nR%x#A$7QTQ!jr-{fD&s&eq?0^F4OIgWtf{PHT7r^yH1BBjmCy z1rAag_hWXjLsg;bU}APBaWRNFfCN<~08k>ZLnOC(4G{WoarfUEx}3}9;_^kxt@26% z8vy+O?7dl&EID#6_PGOy$gP&M_A=WgbtRg~OeQnE=t*z->v|9+lj-V`GjnH#oME%K zvsdLB5rF%r2SjFNt*7fu4>=?UcC5NOD-wY~01n^2&%wxAnz2TI>%ldyNeUpw1}gA? z05@^KfF{m*hRH1H z9B2Gpum22?2o#_P046X%5(vS>;X#BnMG=gEy5bP+n6`NJ-!2!wd-jw6ZmJey7!rn| zFnLXRy1A_?mm?3m>4Ed>@Fy1$p^j%oMb=er?I>y}yDqTAXzaJ^_g_JKphGDLAkk;U z(9pC>K@l+4Qt+c7-Su75&bqFPVOGNutJR8R$)0m9#88uLL{npy_W;UDb-+XEulo69 zGC4m#fA;Lz$;rHJ(^voW=3==bgpk!{yV`7@J`<;$oSnYE_~58}L~_n%7J}wH%;uBz zcKiE3e6{PhKmGD2v)OFB-FiK{bgW1ng6#U;hl{s=`+xnPA&3C|uv1m1?Y7Gp)yeZ%gJnc`eL&xXeiNK`{JQFF=!DwgNV{=I)V?`L?nc0%B%&7LLY`1NS?uzB zF+G{LlQu>T!QpYT>$bZ*6wjjWrBtL&)3jq*QIm zFMe_|i}RV(;+`qMoV$Mb=G!+H7ng6}tv2hRQFhfF3wNi$9iB}P|KSf`L1WOQs_W(Ir(Zn%t6%&)g=)#y1ONaa07*na zR5AHL>CW5@-O0&W*K-)k`Pu2N$hY6U{<~lQ=KXRrKRLf#ZM!}5;FaPuZ z6eRXTKb^Fb={#G}RK%?>`SNmUW+$i9wrL5fDyZ&ohX|ucY-qEv*(lsnGofG@hHO5W z%%HK)?v`t7^*dJTxG+@RK;M)rt7z?M4+863+#7eDvoQ((I%3pWaUb)L2ubRW%n)6*IPi3bFM|RegO>u{# zgF=l! zN9@0L!ykAzG1vq8iQXRPM;`kJ_Yd5={O|IY?tgvYvPU(N^yBy%rIrHvOZ!XvOZ)R| zf9jNwe`9S7eI1U*dahiFNEOQH4kiOZmNJw=AVyk%P=H$XG3=GXk#qhBc!=(33fNT! zC;+I7E7jqks8A$mBn7Ij4$~Q6EEFrF@m3*1q6k1OO9xU#;E(_&h&k05z*uSDK$Q_| zAwngfmAPx*{&Z_5=S(fh#6n0BtcGBKP>MszY^Be;Qc6Gg^5Vnhd@`S;le5$Ld>Wew zz}-t3R0U)5tENe+c$7T!sa6LCLDs^|AOZG$NhvkWq?EGW_GZ?`)J{)^p6z5-vcG!u z>L35<58uCfU5ck>QoN&xQRqVGRTZ8a{Ma9Da$mUj-)gH*q6c3Gp#_H_B~pL^eBbmBWf-$V<=x-6m;5ebz}&q{#|#fi&z zLz;xyY&My-(`Mq*V`CX5nlA#SRQMlb>jiC}P#8q#66Doo)41u%gJqTxGd9x&a? zveiYK7Ol@_JYVg;rMy&p7WHKbo_SuSD?@~wWVRZoQKwBh(fJF_zgWF}j{X(8@6f*i zmS9Ke1?vzm$xSi(evc>^U=+il5THwC&9|%adM*-0AgqPkfl|3pwSrF+wO5 z2!lWbLD374mso$ldh@%p^Z#*n@-piwv!G35AbCHdbz|&7eSxdM0x)7$znE7K@?IX6o?}b z5Mhw<@B;v)65O*$jXeJ1id?SOWUz~mU;_T<2_uszy@a?O2m#YhBn5F55 z4Hze>X`7&~!Bt%YM=7GBi6Sn{q7E{I!ql5=)#x4~`pvfA zZnk;5DMKbf2{K|DYn(-#Fx0$`S{?Z)-?|2LE5SS_Kt?KU}Qf+?j>Q-5!_E)OE8_+WQ8dd+~Khz70UpOSss zb(_s*+YjqL@A|IKgIAC;>2mL}E8LfA`M1#I(Dv@Uy)#_sps>mXxMPeYnLFsP;(acC zHghToAOvYs)21fsn2RLvAex1x6nBBjQ0&9y<_}+edvUqx2anmDA|YuE;)F;o=u%e* z5NN%-^?gs8hyth?mS*nmO_M}K6{=e6mz!mC2t+6%Al-rD3eZI_*WK6Ozy7;l|Mtm~ zCqMc8WfS9&ORbHg5<@7YxuF!ZLNvz#*Q2H9GHo!Mw7GAyWg{y5*C`a)tk&<|eYm_> z*$d`ERn0DD06IJQ+-~cotsHHa8o$1zo;%SgQ-GFI5FC+Ls0{Yn0~rjn`>8W@NIsH#q9v&Hjg z9YeXe^vhLGqKP4jsuooWC1(y>&+EW#(5Vx>1eMlN3yeenAixaDwS@2EV8H#4xQ}`7 zBQawSQc3s^D2A#Z{QI#R?`d*GEP2cb#ftQ=3YLtHjS)HSh~^*)aKshXM#6j~fA%D^z0v>{3i&7{re z+silKGY>ZGb|q&kQ8c6`Cb1I6U<2I+inA)|`gj7MzqC(lw_oTF z2zULZ{fBNp`uYBs_OII>9{_&rQS)dD6u&QN<(~dOX+4g()m!vO*I3tY-9>JpmT%X3 zeC%)@QTesDN6zP`_y3qDd1yXyM>&G~(5QE4;Ex^uW3PYg3;WUD7ms+%aO3oqTDdj? zIN;0+M=Z#uQA8k^1Xw74;r;!P2s8xg}kg?1g0Wc2( z9bm&+U-5Q_0kE-d(LM=l%+A|C`xxN3^^AV>vl8^kJ^n9_HHBA$u29=azvBBL$ zV?YQRUUM!c( zr%#`roSd|i7-M9bq@WJvC_%(MigCT^Hrwv)`}glZtX7-tix>0d``5a8FT>jMx?mlf zEI{e0jkwaKx=-O&bN~&d(_v%2E6DS3HjPbW6bBH4xfa4C6p4A@`(^k3!|MHNHx%S7 z*~ArY_p&3%&^zBrRyLao!JWR{*$471lNBc;qK=g;ffec;zXxY&Zl8=g6SHklWw}j+ri%N?ES!Hf^i_Ej4(&#(d5`#9A$R~+Q zPiNk}&Z}>1`#pB=n3uv8{W4c+j%oE(6da@h+qQlF{P~w(etC9wW@gLfa(TJgZ3i=w$OH4h8t|LV z=Cj$nZQGo4MPaH4;4Yp$m%a>^o6EFVEK}6kB&ljCCB`Tkw(E6Fy4$S&-~Z?TzI^|o zFC937{=NDl9Zi%zb3PA0{n;0%r;G8$)1VP5wX$Xkqv&q{xAHIA2=H2CocJY&*!I5(=nPv!H>o+!vpkQ#KP^y4Y zNQ%+DuoQH;>4wWqm`zfXgn4LE2;#fVZoOXheIHetb`BYwnKbv}aCes=^w1aSz3nlZ z>a0k!wXm^vZBM`7oo%q_ot;Z&V_~B0RGUVksb&>Xm57iuG%2QF4RUCFKAk>$a{iOg zpTB(m{QMM?R>XWdgF?C<-@SSN{rBI#e*JoR+2>x(lX-AVB?M<+P}Ry??GPhe;gHH# z9?YoHs0b*f3_15^7D6z~?!_#d1*bzwh!mBkRlsV9x3V|aRs&a+;CC2?y7nfMN!N8< z*R9vRBc)0(&?}by0Ns#+s^CBb;VOUr8gI&x;r%K05l3y|)9j<$cNx1^k&1T=!cdF1 zfJ)>lEo-3rfHR1fpHk(gV3=o*W;TBVJLn#9hLkPQm`}KF< z{^6g#-E1=;r5GtOR_dJ+V}y|Aq8hZO$R=}$d)tng0V-((B9mR$l~QsZJUe{kIRK$j z$*V!HP(LYf6%OFL_ZR>5?|*fEc5-%p`uy364Ml_$Xp~4b<6whkndXT*YRp?jk24+s z1i`coT?)f6xHHD+qNSAWwtMyV&Fi=C`yt1e5EN9YC&)bu^B(loA)#}e`HvV$lCf7u z1ZoaZA;b`?;4;PF)@5JshRskex*>}gtUz4BniK|6st|z?Y9IsmxV_Qzs5!vb>ONZD9g1h0BQMmVNZs1>v}_$0o?`_4$LF;$yKQtydmw+=rtMG6u*A zA>9ykasK4$cM@HLwa zUNZ~#H}XS%`CX%`et`ODN7_;4h;qkXg<=I-k5==a+F$q3+q!1IU$c^q<>!$UOWt=T^J{Zj!5FvOz_a7eBO0l@Wv+} zJ>Rdi_eZok14rRV9uO*rPmZ3H3Rdgj`dy?RJjYRw!v%jyZn&e}q=5cQ`y<=kR2vVq z|5ynX*VWM5&n`E9{<$sBJ7izgoF6&RJH_a+yATh^T=|!qpMNdvV(w zO+^3`AI)8opb~~*3o2qFjkG;WNo_iEdf^Z!!*z<4AJFd0S5)zO7*)~=k&z)jwCaT_ zYMDjogIFRB1~5ZJd>~Zzw8PK|WB|kHGupRM(^f~voVe6ibv5`K?vKZ=&pQ_<0ie)H z2P=ZvTv9YsxWuR_1l6djLUYPs(y#hm&-Jc+SZ+?w7U$<@XXo?zq?MpbH8U>*T~#%x z#+ZP?={#1gs3c>IxwsD{#%9tkvfFyI*}Pr8e!c$g)vNEm`*s+H>2x|jJzKBW%Zugw zCVg;v_?Rxe6v!@ksL$;xk zS|g|k&7mQPGv{5m+w8XQS05JNXq(ojyqMcgxhvjzGKr8NsOEF5QAs3&3WAL#Dtb5O z%aZ%)$)cG}Chg25=8}iZUFL4+)|>wQhxO%hFdK`UAELk6#Q~}a#KplH4gzTq#+U-> z?#0LGmsAGHF_c{&2hb=Yfe|vJB*F-%dgX&1eQl#lDkxL{rz#OSh-4xJc1gNMn;Dw9 zEYHuLuF7z^+b!*K%S+Suz{?!Y`*_lOEV&*EYD}GIL6k)sr%#*t7v8_ko44Ki6)xY( z@EtusrcgqAdgts4cFF>lql6pySf4_qfU%Oq@5{(nxN{}>cZ2uf8oRG{A6jX2Hb2*d zX*kOW26K-}8Ujq9R@YLke^!liD#uP~3KuF7CNTd1`u`ycRV`dlYMAb)>${ra^C#4pi-M0~}vabNj z>d6!-rL=AP;>C-f{`9BMo;_35<#Ks(ak1O&YJ{&|T;ablMiHIQ=ab1~v)P!93Xf4J zVl~X}WxZa%d;h*^ROGZx9-s4Jo1(;Hwmh1mTGD7ZCL*9R-_+R$_1nTwtIFxKn+%35acMo}A8p z_H4F$9^O3X>-YKhuljXYHoI+~iKrn>5LydyFuFuTG|_^_04E$2r;2C_%4lBJyJ59i ztCykQO`DVgZOGkj>+Z9*k;E8;0;1w(f+2t+s)NjXne{kZb5<;^hOjK{66YVviycmi z&=d$Uv?)y|F*WXpiWt!d8quh+4KW5x7ku{Q^z+YNzIguhY~D;8wk<c!!?gFwrxwn>({SKDRr4u#IS*-l(81;Aj%Uw^nd({ZRVB ztPM$=fV&Gqq??m8(-<_y*rX7XE5#imt|2z9i+6_J;Y|wj>E!8)biPE%99^)kpJGiWdGjV zy@&E6&-Z^T?Y{N-SpDk9YWI)lPuo6$0{V6h(T8&=j&Jcp5Ps!|EM7mJSHfG5@R1z4 zTiI>LIUrS&yTSn+P}EUt2%7-}UYO@5$o1xBuJk>zajd5UB@C4FLCLK1m+uD(*97j`Q5_ zTc1baifb7$kKMn2^z%NvA8(K6BRN@K2}MP?H_aV1jaPZ}Fn1RCzJPQI5WiN`4+E>po-wVDtcw7WkMB3?ONsfT9Q@8h{2Cg~m*XOL3wF3o+(% zjufO0iklRJ#c|CX_MJg$;YOuEaAnXQJ?sNda9_atju{XzY9NhOLK>V>kVQh@ZBq(O zGijO_LJA5&aCk^f@95XtRlmDjZ&usQW_NnBn4O)Sq#!A(R1buY+;rv?p;S4*1SqL= zXlhiPu;SWn^Tp-r)vH%;-+lP{n-6AQiUN~eUyu!=i_^1;BN0~@mkRG4*Hv@hlim*d zkz-Bn>+|{0bOQ0{45$H+hrh6wcvqQg$APU^Etdqt;erYv7gB&>yOkJJgDWI>0F@56-1PuL zNT3>nhy=tCwG?$oo0`x}l#%fDu5?2`o%SJdh5$6i$jYGBFq;rH1qDf51dTxi!G!`2 z$gb|46`2xgKJTpC6u;aK%U!u#=jC?TZc8yq0i!Gu)(|C4tn#D@K!^~qgJ)i(-$R0d zTGL!ah$w+7f&d8u!ULq{c~lrENpp45silJNN9P(;sNx}1u^a#aLH@paN+Dv9tjK|J zB4LWH$Kga*C)}*!W|Ox=xfuNWL7olz#g6kKgu+l{Mr|Ca_eOLQ!f8s+!|aPN`=Hae zyY?-+@3H%X@PgK1Sb~?1rDH9!5%!SbKu|XN(kKh?x-(1{l3HCr&dK@9K?jW5- zL^QZ6R6)`U57Hp#{OsAYpa1;lUw--JbUGb|VYAt6x7%)TV}P^(jm+l7=@1E_olYmS zgbj0iN-6#0KmP7-|MqWpLsvym6cv{O zBOwA2l;Sbr+4J+W^Lc8d3`L+S4CpJ0T@;WS@~Bd9bnXgp_y?-$tb%Mft_X^BiO_&a z(>4thooAfSrR&`bagL_d}kfP6U^J4%2AOJ~3K~!oXxdv*m z)DB^>#%w6FzNCvTT;|1!XI*$&!d!ziNs&Tmv`H~Fp=n}(1X969ecs4?*0#;$um9?^ zlauu1bg`HrM2L$zF<^5!eD~d}KYaD|#d1Xi%G4ZPuV5>P6l5>Ov%?UI#xccX1Xojq zp%N9)14S!zyp~5LO@xHU6jGyvZ#Jvd`cj~i$*h#Flu}9$08&H)0C%4@&6v8duRPr} zP1kj$>j9{0N=ah^;H9{`#w*8qO$5W$`E{lC)U1F9wjgzLz{2gL1Ga2{3{|B+-MLxT(8WJQ!UuB0lN#P+vLgHs`L-LpDL6i&EN{=JWY< zI@JI&i;A%enjl7+YOBG!e)IO-tD(1)re-$eTqz37C=zI1lPujG?kR<{`C>kwo;{tn zZJJDGF-Ce|&HfNMJ3H(9{_^tt?c2BSKfKv&Htt0b2J5eYgF+yvs*qjjC)3$#xBm5S zfA{mh`{|1pPhUKLngm9Rq7onhHK(C3xy!>mw1)}XD|EG}9Rd&&ny3X*ysX#jSFc`w z_;A_vSwcu{qpD^GaScj_oBH)f^ux#5vy@CRkthTt5Nc2tb%xDQmVLkJ`b`H$h~8PB`DjqgX69e_PJm`D2OmH+KvCOka;f<2hB{xea( zTHV4*jku0D(Tc34o@jIi5p8wRoJ{6vvueBTZo6L6 z>TTn2$i?5VWH1j_fs%53kQ^560v2@XDhMZ|u`Dq!#R@qp~1)K%~$`soG8#lhnq^ ze0KV*TVHN2FV@Q?b{i9^b*w@XPzB*Y`z@M86D2uIaR$+%u#g70g(z)mPS0k~&Sy`a z>ueIwPF=Kz=i&|#i9tl69C_Vbh+aG0_5>cll?Cxb&#$sXn$R} zr7zt3zFcs9)#2#(+g{=y;GaMC%#WWu(x3V1{@yDW$>aL}k^TQi8qwIp-W@R}J^*l% z9c%~PcSK+T(5mq_|St&r+ zA2vtf_T#mB&-3a*CAdCMhX@c!$Cd4osT6@ILKH+1hbDz13g9#+OzDuZ45nLv(@Lm} zlocLF7`5iEjxmV(PGs-MK8)eUV19VJo$5srU<@P$<0HA#U|#L9QUoX@W0V+G#YKXq zmQZ>&E4J+hE1S)xZNiHe&rTMzCufWKY!YK|cQ~&H>GhzJQUGdbBC{{on>TOXeEZ$2 zw{PFBwwqn25>tpVyOrMDJw(PB52d@b0*P*Wf{vaQhgW@j66D93&p)$vL)WbQ=)gEp zH|FA@BkE5rAMWU1Zhn64z1$-akE8q8zgZrU@XJvxtE)bbKEbW^aBV=qQ9r!aL#0X_ zLt9jMMSG#vl68SoQV3#A66fF^%rXG=AQCh-0-Y`905mWJgs7r)&mi4x$S6Y)G%78< zCyQ2kK@~xxgnAck540!hZ7(Mp&oa&_$wKP| zndmu9GH;qidh)C}`B|{l`r@ZHye*q|SbvNDdmsXV62O%}ObTctcjG=5wue?=pC8Y? zmuajnPZ`7u^G;T}e)|tmPG|8nhDC(c6UhS9#A8kO0RR_QaYs0Camk*J)!|e@8p&DR zw3kJkPNv~3w$CnCU4PMXl>tN9l#(e1hrkuGhZsA(h!&?@ynl6UV;`3KJ=N=UM0}Bu z3Dls15%AH0U?P9d4LkTua@tBHU0b-lhfzf9D|MwnBykdZ|gbNfvRM74#K7^~#=5hbkQ*wmJ909(lZwh*J98@@? z>}d%r7PGSQzI^%ei!Z)7IXNLY3`5`dyWMUWhEhu1Ks8)vW)-p5w(VlEsByb}WR9YN z74sJYz->RQ*W0#9^JzPoOmepyO26H7zy9?v|MB;~tLYZCZVWiXwi^WT#`#P4ISpIGJ{WcL%Yh8OF!*&0iA@@ zq?AGvVr)Xv7&OouSAj>ACgE%mpPtWOK7V?8GW+T03lU5cCM^Ku0q@`LK76?R=Wo8d zT&|bvow-VCi7*tHGf5y=YBgMOC?r6Gc&(KV1w^Q1-B{IwOze?+vTu{gL_~JGUDtJQ z-@fg-?qqS=G_e*5KB$_tiAZIEu1R$owAKSIr8G@*SgSVDx#IvAzOn3aU7xJ&aId@e zB1_H`*AO)ZF!V#eTCdle&Bbz?t>kRQtVWz_y<5eo(AL1@__PX+8ATO$?zOnM0Q;42 z>|^?K)Woh5dXL^qeNzSq$Kna3$NkYUenErLhGEF%Dk>jBn6{I)O;Hra0Cj-$L%g;W z-)uIQ7t1~uA{Dc;FGfyhjFsjdA`&$;DV;19PtMLyPZyJU)F@-beLqY96%<}el{am8 z_wL!!%DWk z?`LguP_*Rm>_mu2f=Oz2v23@y%gyf9>o>38zIPzTsM?sBWh2>y7*iUC;m-NLPd~h^ zonF({ZZ$I#rKl*yH8`aLdY7y9I+tbFZF3oDu7R-)g26IupOi#sy`x;A`09cNP^u}4 zD@F4@Bjvh&`?$tRgH)NH1rCgyFh|~lnpjaw0{g?>+PnI{5hD75n*VLT#~s(yonj85 zs%Ei)22C<+&rjz6dD6ak@$CKA-(Gz6)$-f#;T^=IZ6clSw(D$o-|arQb?_lR`Du#h z3Wzo);zo5<(ynV9SAnj3t)4^hBOHGsM@?1tk_?9owLh}m>yN!>vhT6qKN$fmH~)Ne zi^JHIfQADz^D%l%_SV+1s44WAq78Y-IcjKAn9LSUGbtziYTD$k+io_y^~&f1gjfqj z9q>W&@XkGcBq0S-^DU(6w!VKnLXV!6Fw~@oN;|Fs6_^aP7*l%^r?dHNF>Pj3olb|< zvRuA*hr5eYL=+0qn$tj0qZmEA8C@kHq>TdYbh0>|K0P~m`XZe#*iI~jE^09vph4Tv zsHzgiVnQCGO5+(w?8Csvx!>a}{gM31_wDP)h6NtX7W)s>{@mg$cixxxSbaZM|M>IN z)&A1%KQHz!!P|1+UuWI^Snbbk{P*scKkHofV)xTWt|C8r){|+CXPaI`+U8|{ltgy<_NbXw?*Ivod_4nni-0tTi2-I6wKKxv_ z*5^^KvZUB;5RH=~g*1macZF3ryjt zrB|-y#|c0uAxHaEq>dk2={ytQ&3v)4s6=-C|c__5GdeL%l!qzt?`y6~6g$9pe(#P|8 z-;7d^`ma~=Q;zX#r`VA!y{}#EQ#sm4vOhzK11j^7EKu(=MszSnP!6Cx9ME_V%iG)X z?cx1?TmBp$5jX_j}K(18}OQaQeiD4QQ;v}uO#2BFxQfw!4(uhL3c@1l+$fOjm zc4(GmmK&8banLscQ!2bwMv_Vd?;@E*Dl%1VEXX@Jx~|Vd{_ef6GBz1G!i28DC8|bu zfN;VEQrAYs)58yssn=nf3aEk+K_$dCr71K9Z750?1FWz(&9cCWU4U3+FAzY2Xe87? zfsT7g2)bf$AsZH`ngk;&5(f+zVCF0kFQIG0rj@ppW>(fI=Z$w8Ow_l1abwJ3;xd&O z>7X?OvxiBmCv9sH!%2K*{ri6MYS%u+?hO5$_PrpoWR7T^Fgmu7NE1C;GZotf0aPV{ z1f!@3ijSoPCwTq)A}_n<#bkEY=ouWnfCkZrPgMwmutlwWD0DN3prvHVoE8afJdaKD z?8Rk{`c8{)Kv`2=u@<8c>P1CKp*Xa-4mE~%q?jGMYpTq-F`hAaD&smfKf2WY7VueGyw4+ zrZ8I1VGGHT=JZMt&7f3@)dA-_dL6x%k+hsG59SVmj@3O!l1d{)B!~z()B}sGZfi+R zXqxo-XJ7v8XFq%T^r?u{pzkmY%jGf;UNTihRb{MGpn$r2+qRVjdcEG(VblwZMMN8+ zin{wSbU9B%=w6yOU0$w#^Q&L}@|VBdY&LBSmI^5vIbR!^fU zK#xJJ^h$>Y0%Qb*5?CcCP^H{xAXR{mObix8NybnbMN*AYlKLd@bS^KR%w9Y>olaUW zn_>B8GWQo#|9mPz8|bv}&p)hAKWyZ`{I~D^@T&XOH!EIrD>rd>nmH480w;wuA^@aB z5oQaZKvFGa>8`n?qESJC_wYeDP=#ueoK4Y0pZU-N)2+1~&T{)g;;d~nCZrf+Y=SmH z+JF#6B$vsAXN&aYN&D<+dj5Rz?8#z2nI9SD=x1A0lz}DxEBEXu$hX8D!Xo5%COmNmdmAx zKu$tb^HM7Ta$iPP15z_8^C=}&bxKMp#yAXvj;9dZ&FWqb8d5NG+-=F+r_bMUtqY1} z1e&>L?|WOW*UR;0v)gsOI|wRORpVHS+H#P}>+DKG>oRkWi7Iw=XhHSXDTETFmN@Fa$piSsHDs{oSk{Tw&Pxz8^W*+-29;FX>)*K6I~tDifnm8RlQs8qfv?n@oj z6WBQx6}sP_cCUZw0Gu6p%O3P!)rGMCiXYy>ouO?Zf{NEVr6H)&;Ti6V58dYU?Bug& zPyIjrr#HWS`A`4f-@p3(SLO0uv`(xiDH<#r@@`+w69`+z+%74o|A8a#Rt6Dgid_G^b{EG7l$<#nY#gC#Pw?@RSCX z3>fIDDh!f>ghUl{p_|h6%GIpbs4vF<`u+t9t8#Jp+YgWrJWyTA4g39e3>b%T9N%7k zxPSGJ@F(9s&40Lm{+d_$k@1Vi`b)2#SFWE&kM+<0;Qjuo{`rGvW7K~>;$S-R$zStx z-ad~W9{=s?|Aq`uI+d}k9v6YdVB1AUfV)fSIRZd z)v+J!=K21S@!Z+}$8hj>w4-PLh$fH2_($&EdiAj_PzUq>v-f6gvK+^i;4w3gC6`+6 z3h)911**kv^-MqXJj~3){QY^*rx|_SO;PG@Q4kkwcdIRzSlrEQ9y}s5va0glx*#|r zC>Zc10+~@B9=@6%J7)GEed*tpe1{OwKgy5tXD8p0H1NlgLzU}?B=@Goy`Kg+$vb%O za-1!*w+bXvrwo-DdCb`v-PKHC21{m%kl|Pu!`RX1^GfE+JF!o;v5B2**o==6S*C2+ zyxC;UZUlX@QD6u$VTUI!#sJ@r_nU(W3Rp&i$jHqAa&~eCk*FIHkqA`Wa_YgcW%lQ5 zHi8d!yL;sO9!0F0v5Oq&$;Pdn)S{W0GLcJC)v_#D1Y{5?Ttvu)15qLlPPSTiP19}G z-FB0nJ~=x-KVQ_92sws0#Ri6pBPg*Ny}i2n=H<)Z{r1bZSJ%muq<|wj(q=PYOJMUZ zD=9@$jDW%|SKZ;PbodQVJ`cq2_`kfbJ$Z6rLl$bVk?zKclhgi*eB4laf9W=XVuon6 zbo-Ttn?2Xx0e4KYT#tXfe@zgOp$hnSP}Tkf?f#-R-O)=+J~bJjHngj3&}It(1j?AR-KwvIrqi5D5h{3*0T5=iq@{1c}=#Ay6O#MKgd{ zsG!idytz#6jg?{ceDU-w%-C*9Z9zlKR<{mn*=66zxnecMUfqamXE2<5m5YsCY_SEZ zIf{DD!rmjAmLf*#JD3t6SK6&U0}=!H(6*8tI|(8vLQz(AS=K?yWDJlRRJA9MstGB= zO#u=>2|^$yD2SP(j`J7D_5nDQ;1Y5uLvw>>#K}Q6tAfJ%w5HSw-_%r>GCPs}>@n8u z=DI7dy5+`K4YsXyEj?Cw)T45Cpl}Y6ETLyBLp_u7NilyaC(rur$KA~ntk1mv8Z?8i z-8VoBO618MMC@WY-ZPnJp9eDc95>#H$eDs!LXP7aoUXsb{DrNbN%5#CA4#ay(A((7 z3LY$%G!4w2_pgD=FoZAe8q@`-a3)f;o&!ys%@;qX)N#DA)S!I}T^j&LfIFhO18lCI zbZ|Zrf`bO8%Q#((jvSM8M2p;IT(~l}9Ry}%LVdt;H z>?8J*iHVtU2;a?m*TcGEgfI{;vEEdXXyu{HV&pmEY6V#a=^CXmC&F}E*l#~N{W zS4}A;cPHT;K1cvKv$2TCZOqq8=IjvWQbHAqpMCn%pFIC)Hk)-_mka6p{_5u1GdT$$ zau$}rW#B?cRm&jrx~$6(2q|Z>Wp;uaDY=0I30ZU)$YPAERXknJ)~oAZ{_4Md@x>RN z#-MH}C>x$Y3}!|~UuP%s;>C++PoBEF5mK@b*zb^iZ`f{(#!$fI7<_49AS8-; zmnql+TP0MBm82g%IeoOKAD_+Z!cE(Ldli`HmG*jFNGicW3v^Ogm{;LhRetino&LkW zXh@DeeiLoOfNOGcSAvTKr(jCalE!FesxBhTM1jmwHdYA}Sx;{6oUCdQ%pG1CRh>!H zd8FEX*7;K95fzWhdNwO#2qsJ-6hIcQNtUBms&k@YmvxP1t|5dxYWWbUAv1bqjBc)xx={x1tO)EQuV_ck{8Ky;-3Lyw!`#_f;c!+WbyA3VP9p0$;O^kgMS!zW~#W|xpmJ&ntlyT+7EXH^|F!8}w&U7a#>-!-X^ZQGl>I}8q|oE_I4L3p)U%_^y? zaCN=@?eD*R_4?w;2H{zL=Q)c0Ef@tXvs^5R!QlZQFFK)|zOo zQi3Rn%Mi&txg|}@qJl>#%!#g2n=SwHfBpBT z^V%)`_LpDI(G+Rr)`O`cU2AD}<;|6LE1X}5t;>_=63z@Iyi_mE*hzrkL~sI=djOLU z0QaHomH=kJau6Rj5GQy75{XiF)?^1e!HJAmf7pSdzKdjnMfQT-pRC;(WQ4#u-pF8> zMKqNlv$6tU$)onY8pCGwd{%^_Dy!vuyI!r=>t?g+yHtV!2$A}Dx^@^rKs&r>`kC`b z=P}QoY5M!R-ZS7OM{;J28nC&WSy7fSPp<6F49u#!3>0To9lF)EU0$Wtb!r@@*#Zt` zFG?$mRF;X@SZujKRh_)}NjP0DPS2<=Bc%0|6vh;ainB|DX^hE10fTa&08hwa_t*z1 zo30rn12SKealZDWpM#x$NP#?l`Y!d+&iFH8TYsu@6ao8D?v=aC^#da}{3!nh<%esJ z_@PT)b*G>2mV50l?~pK!$gzLw1jn3qyu0rVBs50$*gbku>;3hC%00P0NTs;H-$3QP zcDTb#A(N`g#3Zw~Cymyb9B2vR7*uAS+Pnwv0|l_lB#~)h1KkQBo;-JWce(vC*gto? zCxcu2ZTo;PGkBg&@4wxie$WULu>ME~@32B2Fv#J5#f$sz-!peGLgCZ$Gboi&v*`{z!wK8)ibw`bZv@rVI0bLz(@ zPPx@GzOYZtMZ57vM4+_q7d^(An2yhVfAJnk#B>ad1#jQBJIej*Tx`1ILy5< zJv2_-R;J^P?u^f&$HU}K+TFhk3paUIo<|dp$pg7N{xfEM*NujKx=;`?d^q+GPv0T8 zX;)7|0k|eIcW4PFLc!!EwqyxpX31PF_GaA>(~)*lIDkx@UBO631SS#j5R@pUU_`_P z0YC>LCxbXB!Wk;G_XZ9CIMd{Yah3M%lU*mRP_iLR@nH57kdMf44p3$WCpUM%#vHWj zKtJ>W!Jrck**KdWAzyx?^hcf_31l&A0+;S8%1OT1^Vldpa=Qdi;tpm&D(!{)AusFknO%a%x zS%G%dZJM_?TU}oEPoF$`@#3*++4U)eqAX@=NJgvm_M4Zl|LZURzKf~rVsBC1Od~r$ z?5x8eW*S(H5CF-hxk(aeSapZorTg`Ed~x!@7k2pH;V%j0uq4uf@z4+E6kvu6h{@wvOUfCQ?%U;Q=n-c^M;^_Rdthc`r~`_Oeh*ANOAZi> zM4|IB1K42VHB5PY1~P&Xjcg2)``H>u*oThWp-|A#SNpa;aAdssF@nVb6lc43-WhB6 zpVRfz1K>kmv0>dKk>G@s5?~M}@}x6OX&wfGzCm zmiNK@O$F?>$^D)<-f!*z>EJs~Ruo-XFed;2AOJ~3K~&ZC>PCWVvc69_IJql|YT@q5 zh*^v&x<^>W(ssP0f~_SYD!7R^n~R%AvG~c11nQ~krEYzhAQdr6P9Ayw3=-CK^>x^o zTs=;gb9;MMca=4TZ42r-M0SFE1X@ibp_ z{yaTd_ph(pmsic#tN7HbpSC#b`6Tk(C?q1wV~Hv%=3Jjv%a6b+_N5g~vGed~0AZ~t!H>ip;R?8zgw zK)R>{QU-aX21Qtevy*`tZaFT3(vVGXm5Kn#`nZ1kTf^6{ zky=278deV=hZx9EfMKjU1O{M7PJ=eivcVl0qy#cI*-de00~1WK3lKmtPhSU|;TU&g z0&{ttl1Omg(Dt<#z}Nq?slIseAOEu}_YMT00ur!=X5D|7RhHxQVHbm8Ki~IC>fnl_ z@WR35Mx4AbazfMufV6fF+IEDv@XO83Kf$khwAp?ECM1QmK5@DlCN3GgBc!I)r%#`* zZnjlb5?AK^+ly~Me(_N#yfE~pF-Ftu%4TL(NU5C>d5}PE40&|&=#x)A`T6HRW#+C~ zITNvN+Us?5mCzZPl+FxIJvkLjOcwhF<{^Z$)5Xbh_APpHlm+)~uU5_GkJ@dsS*PlB z79>~<1=X9?_AfvG>1uuPH-Gatzx?~ZQ*_nLyDq_U&# z5>XL6P-N-n_3UI>fA;CqXHOqJe=22xV!(sBS2T(@7wN07e*gOQ>&3*1k&E9ASt=ozA5UN zd7`40kY-C^#I9d2ilXm(A!@dLIXiD6j2DLR)wfNurF#?8#>@?#+C)S}QKpoLh#+-c zo}WKHJ9|`>bvDF88N>pZ!&7uZV6ecoFN@$wyLMw7s-k-K__-;4{mt*Yt}~@jRLn(+ z3P@R&U9&C1sjzq3SS;nMuP*=Yzx?Vy{NgXG@+5WZUfsPAlB7*<1d>gY7K=j7RJE*_ z#MF8caW9h*5p~g5*D5bye!+Hyu+YGvl9kDrwDg^~dt`)yH%UZdadEHwg6Q?G6S_5e?>$^FcG z)n$r*+K7JwnBsK@IQ~6&U54X!`W`vDJ2fEyDGh%`M1T_IfNDIfbNX>mPMa|RZ9_B% z+g&FYPyhzAt_-t|eByyeq!>vgiV`%o5?NLZ0K~WM;iJ)GcJ+xu4Lp;F%W~zEgRlxh<=s~#$bc(P2zCLOq9K$e$eCt`#=vN zFf3;rGs2OTm(wEt|*eBUIu(ai8K#llzDN+-}b?c=ON> z7#vad`1bAl?Uueo`Ar=?a0o#iuxs-VQ;fG5Ds-qXjgP%;@1Udhi2L#L{eurZQ)%RG z+!}9s1YbHJHywC^Pw@Gv{pg6jV@we^t>^SJUrx|mPlU(ib~fCRQF!p3-&!JX zFQeIjm$zY(Aq5zbS?t8kk>C#RksW_s4>x9DccAeDR*WO-nZv1RFz#kE*qzw0Jf4Ym z^uhxzX#cW232r~0V-H_AJJ#@CAv`L#TF-K3rtIeHJcP^wJGlW)Io+oXVK<%qfLZfL z5T}t(bMW=J;7m<@PDI;g9YQFRXikLaL5ctl1~3OWHPP&5yKYl5lDd3!G7Cjr*K?3u zT->~R_4cc;Uw!%Y%f3%BS)ZVmot~lJ$yaqktl23vS^2xatXtjj04f|0WsXF9BZcpr zza8L_nEbto(NOfQnvG;(dzX$d)RVs7Dt$Nk!)b=@ZZ@P%awg%RW~x?HB~j<#G3uZZ zyLq}#fg73Be}L>46EbA?U&_|3$y$_AOJs+7cCdlf$Usak?&g$k+OKwCG%*W__oX56+i7e%@yj#?>X8~n+3m_PIVgPOdMs^dp zG`gwerY=_tx;ib^8(pp9&DtMr{JgW%-cLZY#KAc@1qZ83gIQHpWpRFT@^PUz>o;F$ z`;D%?jGHgeyoA0n2v7kAw1C3TD27)tj& za>x)-3@I3lh|Da;*mWIT%d%{{2sI)qSk%p3nJIPsVsTOy(zdOuou8h4{@Kqy`|PtI zV(vNeM;a^&>lmYv468RGIT~*a~yERLJB`Kw7?i3`5hydA1^wHVL z#l@R1zWDFI{q4W3*XtNN7Pupbn3+4wlt5}xxHvzZ|Kb<_?)?0;@B6-41&MVbp%9TG zB^uDh!RgFYBa%S^K{$u4X9cMcoRkbfFe`ArTs~cfrziE(IxI^R-U?}e5vg!6s5+dK z;nw%q_C+ETHMHmL+wH|yY+c#SPx?>Jcs37Pq%eR}&CVO%N?w*)4aFhSB0XPNxaDSn3lg$_7 z8O?U;6b+oznKOr~nuVY_@oh?dzR2Ma zGFi=qle3L*-mpu!@22KmKKt<)(EnO;2hPjiGP{$(L1ON0*KfP7iK!%ISODkX5ScY% zF;WoE9=$Wv(`_%T;n5!Q2y`A znD8{8zq4m03}S>B`!bYN1|v9XeR>? zDZnuO8i1y_|AyVi>)5N2XGSy}fD#E{QdWQw0?6Hk$Q{7}4{-OQF2Z6lJ3rlCUfo>0 zZB{o}t!%NVo;*4G>8G>v$1eNO=J+wwgcfF}o`2R;72```6$(=zX}eJABitTa>J;`>Z56JF9oLIEEf zGA4DKs5SQl=y|vtEB~kr4V-#^OG&eLxW{_|kj9We1AMdxk~(Ltu|c|UmZFqwAA!`pKoRnU!y*!Jh!UCjZ& zQv?xFK|};~0(qhwJj~3Iai#2UM|Z8ilOdEXyy}QRA}Es*$SnuO1v3onIvsRF*W6ud z{hl|y(|Ti&%m=i|oeJN{LgB7}5jn^l>OR_&K6F~Xd%h3r)gOWa7}1W0XoD>V6r-xD zCC*2+vMk|dW+4P30*R__x7)UDg?KivUpzl=8oR#PUSF+$^SiHKy?S%AT3@Z!OhFx* z!_Nt48=d<*?A;$YKHsQR0esIMhj&g@0_YBNkVlgp0X}J} z4`0(ibU*s=`)Le+N7Lzibp1T`3hYiv%@kZnb|)fG-|KeMr=&!I5Hb>OdZY{-*I}ml zw(r~J_gLF-u><#at?&04>xarGh(d@}G{b4Hsvwv{zO*I*4S+8L^ol4b$dU5u%VDjlgg zO14>55Tek)!T~`tkeXo$O2iqu6=D$i$$ZJ=%p52X5e*?&oXJ5lkP!xR0+_iVW~0DG zuZh{BIvmNJUNquw9&ex7{MVMfJCLNI5h5?n-@d8pM-_@jA9Kc(i=e)W^)>R){I75cY`E7%I! zf_ixGY>ur^Pa}PMVA<#B{sct_?+C4L!}{$>EYIrag)b@>h7~Y^=IyK`c8+Rh9>#r$ z3F>4%olWGoRvx30V+RVSr%!(oC0_MCB6)gAe%aGn0Coe^@-pRM&E)hw13I5H3LS7` zA{v4VK%7OY^PIU77+CG>MvkuQgq%5$L)BAu=|+m=?wt=%c#HP!cJtfq%@^VM^O7I; zxeSU_Msj8KU7mLNGpMLu3r=LE4{MgyM*ykt4m~L)X>s6DY z66GinMC8oE%*5_cqTudDQJkHfEtkt|ZWJlWTrC0?h*cw8>xzl6Sj_(MAAj|?fBU!p z{LlZ~wmrrS$Us+B(zXdekdPF_@h2}n{ps^mGm3%Ns`lZB4NNVo_pbwX`C zlWG=1m@m%E*-=;ZqMlV{RT9XpuS#}n06SftKL6;WkDfh#{P^^ANwa#`K9iwuakJ{a z{r1~eZ!W)mvudKn7|o1@n8n?F&v7|8b-q(<=dI$M zy8s(pRbz}@pSrH=`#zeclyaWv9B4XEglv{Jv$0lVJaZ;C9()A`Q~I%;@xAgrosSLx zl<$7_B#0@@jG4`>ZTt0lyWO;>OE#E7DF;~xnQ2N%s9+~!c9?l$Hzr~SfpZpNGY6P* z(rZsFoY(+!WLMs(8dK^4P&P2^p^w~OR+iObFYDL8W+exWFQEfaykV!P{A;V*zk6q-Pv;%43Makvm3F2&Ad17 zonEijy&ISo+=8nsQSqxzJAJK^UYVk`Sq(6w(;tw*FnW{QT}#)^Lv?pqqC3d zr=NL!R?p7LYF?Hz=h~z&E}Ym61a?vaM6%99eel2}-WQt6ZEBlsA6xCKlPAmb$4?(W zDa%@ux57rw(chu9Oc9R{Z2yD2mG8noKSc5fl<|6pmp<@(y?Y(IbIZZojsE9@(Q-`2 zaXZ~CAt%*RcOQ(rMd`D7Ik$Gb4%gSK)vE7%GgD?F^1%~s`W87S{r(k3P6h!$Sq%R} zd8r`)&a^zO#?yUvw(}f7zAP$Yzy&a(0@-7hiA3C8Je5SjQor5YTwJVI*Q=Y&)924V z{_Lkue)5yBJT>OTti(f#kTK)tzFmAW-+j`a(_FU0H#}+Fhs$)FO#b$v_%PkB#%&oo z+uezHq5*wh_|jy5->sI8<1cVze%(F4e@D4B?>+<{{!shKgYdfVHs2qP03WH(F@5Pn z9jlJw)epS?JGcJ?F`KH8A1wEc&j;4$9(?|L9iQK&J@-F+Soz0tb$@899*irWR^y01 z^X~SX)a^%_$VC2ZJ%GnU_8^0diS0`$m;mL%e&v=7LD#Z5GC$uhaDO4hb(tj z4LTBT^$#om9-HC!BL7P5|A%O72QnRyQ+0nh?e3h*fZ;PUzz3|^+}zaF6>4hHp{_O{ zSv)yOwzj^)b+l%YB zZ!W)n`KoJED2uYF+qTb%40kAxyStejsqKd@eTV&Z@C)u6w;xpakMdqQwmu)5Gza}P zxgHRCV>7j6fF{+xPZuxWUS3|WR-5d4LL?%VLHxUQ$&Wu)(fvKRz2*&wT#G=8t*xh*u}l%tBdtN<9io3add>Xdw5XRXkV8#y1 z-mgYr&OY7laB@MJJ8;*ebmST!xRfZ|SzQ%t&_va`b$j!TcNe(&l6>vH1zLD(K4Qm6X3tV%1#bSy+b_siWeZB|Aa#KVi&_upNLvJk@D8wE0T3l87AS-TVng%- z$@g>i-hcrpSeS$|K<4b03`{^Ejy8nF2f6DFR$tv*esTKrFN;9EROGof&L(Cwgjm1l zHK#LuSQ#d3!)->?U;+_%1PgJprdjU;NCcV-xqZ;SR9Pnwq31OP16js-VFpIVG7J+oDYJkhO#_4 zIaw~}uU?U=76q8uEW3B5c9Y5yWmp8Eo12?o|MNfn<3IlD`sQjRV?h{Z&d6qFgaSz+ z!jGRluId`DQWo>#w5q6Yw#~L-cb3veI|30&_EH&QpgEE`fk8|hin1g-U!Ke>IbBqb zP8a7j)eKnYsVxhF=g`3sV7Q9ASS(YVGeeD5>+aRt%d0nCykKvPlxr_pN?|59OR6y` z5O_4kJ3u}LCREE@32|~YC3py-p3U7z%Bq~#^)E_s&KFfx6-B`uLYRkg9zx-8 z)85gXE?KxfT`oWV`1vO}L|Bk@ zo4r=>V8vjkLfpC74`XJos;a80zVGuG%TBb+T$W`~6hI!F%#=OUJzE@U=VNrRm(hNW zG|&Bb>%e%oK4zdym}O#6a?APP`xMQr@B6;*yFT@Oud2xnOf=c}aB<|5-f)qrgW-u2K5!pGh=As63 z<6!L@qhFevo0+LaQ>B5NGnh7Z4N62sQPg!^mL)TrMRFHmKjKiJs?1Epx&C=vm1TK$ zcD8A@H><|R7~pWIs(Kp6iL<+^* zqdZjh8Wb7P5HOj@LBoNMhSJ`6XXkn+lKl4y_aPDTxDkzyzgLdo12j2T;@&$Z;shP)KM+lf272k< z`b)#buKb;K{IDiJ2qCbHIiAVE1KkHC%;YLCsHfN^(pliAXN&)3VNc?>ba^vx*DvPu z*;)9fuTo4&aH(DrgupPh)mFD#!q@Hfm#EIV#aXpDEf!~GeNt34m$RrwBt#-P1-Us~ z4aOmosczP7+iqjKy1s!WIy?ROi~r;N?9tg7E2lp8Bp?p1_B}!<_saK(02M*%zB6Dv z;qJD8dk^)0xa_cq-Q#YZuQ6^M8L-I|qP)FwT~^`bY*yBfPV?@QX-`ElH2{yVLnw=x zjrQH?$j=1yQO4Dhz*Ow+$264jP{J6jc>G>MX=bFoFlr_te-Zl_dsUONkgArlip&7vR`cB*aafBbHJ@3X0zq6`;R5^<0{41?~$L$Lrc>j^< z_@U$Eeb4=KlVjuIPwjONaV=o-pLgE>r!M#5b-;J93m?M?e<1RwR@?900DQN=cW)Vo z_q)9(tmi>i-N`pJd6rMu98-A+FN5y*1ic%6yBl$yB7l25gzk}t@G|a}|E{;legnWh zrpkNN!FwX+A8XIMTj@iTfxA9d?|$pM_1Wj6J>+8F)4}hp4WZbpUk~B?4AJVR_r3G2 zkG1E67+e4UjL&yJC6{)|Pn+Zb03ZNKL_t(%mVH3^?;3HQ{rsG>DbEOQVXT!8Atj*z zgtBXZ!OcuFWgMoIN%1z0%mM83AxGVvwT23+A3_*% ze1QOWa~PoS4N;X%1yjc2yVt|%_@5MT-x(FSufMXJ`xnCP^?4}gLB0Y2OiN}iLPfAH zHQP;lvs$fIn{QvgTHUO#E^o$;V3ES#ZxFh>5>9(?%G31x#RO8%vvP1p#O?it_M^fn z8#xRFu9VA!o-LWD;5tKG&~_d-C$3vklxE^SREa>*BM zc-$73ZFjQuYU_)(eb)0?3a1f|Q)LL}R@7#t_lP!&v*VrjU#s=)re53mg_dukj1l#!(vmP;I(=GJ7}+x$c)I~Bu)+{ z$dntaL-O*xjEfr)kw+&e!yPLg@0`w^a>y-|?LB0>fXpZr!mb(AN))kuwY~W5N&8I^ zLM^AQXD6SM+*Ko?8rrl77=nIgT)x7sOoyYT%J}{)wI1SF~QlG;HFX2d_J4cYZ3a@ zuYURK|M@@OynO?pEX$PoY^WQ-bAZ9(&PEc5!*9O)s;Y}3&~jFzV2_TeJxtV3> zS|Tu$2O#yWLj+O)MIm)n%;vHz@w2BdW)&}IQkTNqk~Qv$*@dAg!XkMJ#60M234KHt z{bohqTwJ|;v))`&+0Et@0zBumG(uu1xiF8J+VPM6EsY*yE^vZ%|dDua+0MUb)p+`R+3dM0)7C#Thmk3Rb3lTS|1s%*dtg0e>6 z;d;}(diCb(ufKlv>eXi55FllxiQFm2p2;??fs;oi?S?`ZG^Gk61iF)LXc3T{%HN(U4luD*yFt$nfvmjuC9b7({Lk^#}N07k;N#bq{tjXgau12WSJz_^-@&2n&Y=P9>pctnQ!;K&K$0rwx^OZlF= zC5&j#kbZllxQ+fv46B&g)HSk2VG~c{sp9n0v*r1l7}wX(_EAAk>v}dj*xuYnFtgV-Y~b)C;@mlwBc->vO6J6}SdlC-(BHni-yxYH=$rg9~ zfNvW(^Jc^Fd&cCrr4l0ybY6E=GgBpHA)Z&WMO|k+!OY#uvIK6UVV+I7cS1lx;*cwf z$N}Pf^w0Q}-f0BdnYo4-`sOgTq(;#Y3B=4f&=DEH;K8v0M-_;Jc`ah;;jNG=d* zZkmRRKqw>-0FOqHjQzShjU(p)?>l`*066Ala#)&AFK?NCf9NaWpQhZiQy&>rSq{G6 zUvr9DmVuZwrPXTl_RZzDuU=kVU9Y#>?Y8Zsi-e3C-eraFo}Zt+zdkTK-Ti(;}ylZJ(BwtONplLs$tx9jZzOas+V=fvGf=PHF;k zzfJH6stlF06O$0J7c~bc6AFS5GaEd*!HnSq=%jg#Xvj3VYpxvxLx=zfE=-cmo=yo& zJcK4B^ZggkOv|#K&FJgyC$R>x(ptr?|I#E*u=%U z>o>OE>eZ&bHr=3nPT`r$5(OhN#UgRoRP)*VQK)|s`pe?%sW)#ntBcLeOWVHj<`s39 z?r)u1U<2Q%w~8(2Xvqd5u%Qgv(FWa@e!1xDGp7(1;$X)ql-*$lW@3@S8u~zS1`CJ6 z9Gx=pyq=#fIY=Ql@fxdyO#?OcNbXE(?g{J&}{-^ZESK z7oYt6=RZF`KTj#aEQFBVhygTBvs$g%wsm)AaU(Z!BIfJ?A26;YIeacNFBXfFlar)3 zQIk2tDF~T)5IH+t)>V0Pb@BiHKY#n>SHAN=3D5`+xlBFV4=+ z7V~Pcn4O)>nGnj;@?_D)mMysnd4xF=v2&)(luWfqRm!q1PL}1#X}PTE*d6{A2cz$HB>N; z`-hCHyVpD58$kA#EsA2fT#Crz^h88*WQCa0Xh7AXs74Ijv+J*_scN>l?k20MGZTs@&%l2pIMa?9^$&w?e3kksL76wmW2=TlwtGbBW9)lJ= zPy|LtPgaAu>lmLV&w6HHNcoDL8E3!M=KDs$QT+$I@AF$=T#M8_>*}1B1m{s#A_>7= znT4GRWTs8ityZfTBNt#I)BH^G!KDvoppYLlo@>B>W>)X$$Ucx4iD*QteblUM%u_k= zB6qAoqTz4|S00IvZt8%!4a{Pqyh3`8mLFsjyQ@ue(==V@5oVe4Bckpu2VXt0gnS{pdqvR%P9)dhgzc2G9W830@THMMXwL#^%S5yK``o>zC!${MoI< z0Usjs_q{Id7htgdZh}AWJoi5L>K~d=0tCvizE2ZMVHKjK&Mnu931ajdC{56Ac^jGQ zN#m50+0n^#ax%G{E@6U}#XOS?8OS0^f%t+9=oB5Wh@>J;M5BA~pt%Z=00-!jTQWfx zKqqZ~no|ShL?)-FN2@w6-RA^Es9Fg`CG$N7v)_4q4tM~6Ftjy36n;;WWQ;|u+j)m$ zy@m)1;bVwwQE4rrVBt)$1mdVRp#ruIzyhqg*1eAkppFgQ-!|0$fKVd3IaEUAnl(`Z zT9C!7zWAO~pvAOI05HoTgir-X$mGhiB)}xbNYa&%pb`;O5cFN^asBm{pY1koa|pxP z9oxI|hg|PJguUg5(1x)b#D@=@8xO^k58+++GP515XZ+kB)_6Wt4z>S>cIDi&pKseN z4wSzu-=k^cdyxZp9Uh8^|Eb?+erW6K_hSIQPmY1Tb#f@!YQS-i!(PoyT)e zj)5IU;r)X9^$cRHd3^VoZx5P0*y`gz8wRk=*c!Ee2y%4q`X4x+yD{)xO)6%Uv?>~PIMNlZ;?6OTCxZX=vPC`V?N)+g!?!o$NW+I{z>3x9c5^k=U z9&4N$6D*Jvl^A2wsJlCz9w<-*0Rq(FKzc_z_C$<$u*WBP$o=>3uhySsw9Di{%j;eY&tgB#fwGy&zVaWo-XD5i-@}i5%<}8^&oU>+W~$xOQvs!G z>bU9_uV26Y=H*v!-dtW?UoV%ffjJ?BSjDExW|;_4?zzQn-Dh@I$FQHvI;*0Dk$GS} z{=Kzwz3uK?02GWS>Ije^5>%w3M{k?FIIWkDRaW9>ayxON>sD9YVzFrR4JIem>?#~T z(&jOnnN*XY61{1eTb?heORuid;@DSbxcQ{!xr9@x&%@+Isv0Xumk?YHn(5*qSz-z` z;}ndsN{Wu++1Vw_R0Fg5$*fjkgoi+tV#Uf%k`W@>Gw(~tR*)dNg6H&@rzl_|9yDkH z*rtup>KBEE!fqE7sbM&bwJgOrlG_oji8E6V4_eli4t5~ z;;l>P@j5|I!_leS2uQb&BbkZ&2(vU&gKbp!YTqGQ{jAiC%Eneo28qSuukS#EAj(94md&oc?V3;_Z?d?JdkHH^No`iaBQ^c2XJF0AS-b z0Rbu?0};Z6T+BNC_yd5GYZ`jF$&gyA7lTz2K~az*haj0Ck9M+c~6))$Q%= zx8HvIH-G(i$0tX}x5wAFHz~2wpj8Y(t4a0o$1nc!XMg$V(IXK_DJeiQXA4!N%W~P? zT;FzW@*ZY%!hk3uswfA232#bfvlK!-o6XM7&Q@(|ujeY65TOL|$)r9$o-UU+|MJU! z`uy{My`5hIt|~d_K4XOd%GP?LQJW>qX0x*=E7$hzDxtYqFtJ5c7aJ~aAMWw z+qvJ~`0Jbe@{PZ~(Zp$tRtqRWSqU;pcX1J^R4SE95LGf!3>rbyyxh2yAhRbJVyup) zvqu*fA3uM7{^ZH&qo*NGnyPMs2G!sQ%mSa)RTaFdy{hWjQMh z_lcAJK|m7H+kMM5NkmGll%{E_N#pKamshKmIoz`u-96L*TvY*g=5lDNZX2Yw?(^&~ zDCNdWZrvz)-`}2v-~bd(g3RWr>sD>sb$u$2Vy&hM3Nfg+Uyinu5pA)D@(B?MA&O`S zG19Zq=w`{xyf+e-Iu7Z8_mT0jejlHk`{+k^##7#_AH^6|V$N9=s=8XW-+c4x`u5{G z9L=hlE^tc@3e7S^NON;is%A26CQUV2umcq?q_`_Rh*ScC=42m9TOdLWUPZ5hwNgR? z_r{f-vx2G!fnLnXo)1Aly#d45nc(~X^m)pQDY>MqmmnfShj6qUm~(F1&deAUC53cv zxG`sT&!lZxI~W8(#QWe-LQyLZEeR*2_nh0-OvaYZa{JP9Y&bwI5s4%_Toe>>pEy)i z37AVJI%gu=)pFi;SIgDB?UDtmh*k_DRF^`8!Vur0Jg)fuj^N09>F?X#<#Toz^lKXZ(Tu9e-Q9vn5YYCaq=kLa7ZI98?O>-WsAB|e|f#uhV|2-AfHJ;$w z+x*pu7zA{I2bDkya}dTDZ|1(r)l?>`O*8T1(~qaeH?nFS(M5@lgo7E$gF{y8s|X=9 zL!1RVt4W0s26X*c4~dmCs}{_JsVG$7$`Fob-Njj8$l2zijjAd{JPJYP_Yct_{O~^I z--&;Y#t`>AkNO9Uw(;Yx#gU5 z$q*bufY~}*_NJ!}#H!FfrTi_1TM>j>DG;iY!V)-xB5DPRD4Bn$PLvP_sABjpkd34a;acJDOw%7NI{0`%J2w&PdKTCgqujBb3xpNi_PdSv6{zLBb>!0`I zx&J=1+n(OGvNKCJ!U1u(|9JlS$e*nT@PADC6QV-=api|bkohx_ySEd)v#Z`Up%t%= zAjs_co6e=wG+?EZ#LfSc1WsamWCab5_-;v1z7@d6zm0su=3* z$;^_coVyq!-3!R!Kmnn`dtw5AZ*ti5`=k6`$_P>V=r%1oW5z?{iU&k>=n8Z|}=PzzKtnL$DV ziv!PK@^;S-LX3bTps?s^1^J0u><|XJLrD(|3P@EMRp9~X2%(8W=*b;i6H0Q~4~jm~ z59ij9J9X)RumS`g=}NEY(p0s(m>AeHv=ncIb(l@0n#7CK$z4ecr~F1zdNe6pCo zWb*{|BgW&*DjTv%>mkLXSjB4cB%FQ}^P*b5>TX}z^4spa&(XbQ`x2`w;tgy8noH_n zL?W^<5JYz?uYX0K#rkPDnpNS*L+z+KfkC{FQqlLu<^7~V4a_S65F+TfX}johI(>5d z_-|LY*SvWxD^gS~4bYPB=zBZQkPhf=x)24NAXEy+r=P>-)B&`TFmO$rE*inCgh5yZ zbhboy$(ygRysC5RsFl@-J#hblB6+WVE<(_PAc!NcAejdPY8{l4n%CVxpsH5O`Ssg3 zvC`S3nM|Ace4c<1LWogSUp#&G>8GE*c=4iX8k$cg6S$|8+)=5zdE2(j(7-3*I;L3?vRn^haQPbQgZYVI%CD(ElwT}Ag)$3pU;-9W>E=4?q0Awp^q=Tqx z&Y2maks1Ir)AOU#rwG&J?AYW^(=yGwb~;0|@T=SO{K?6*mO3;|gIUyy7CZ;Dv+2=M zjK|aFXj;u0pG;6UUaP5)d1cm#rWkWn7bfN|unX)!V@|R%T)thrdey$YvNyNWm7h3O zbe_%3C1Mh)5ZJ1UhmwKM#YxNN8sO5~Tb$4yzm=+PIyb7E9v{7U{``{{A3cBm?DXOy zIVqu-jw?tN5f}t$0-HvTXZ7i6eer1a=<&(<#nJIp+Z&tJu~ytJ{mtduS1;du`Sr_J zuil7;E+fc{2&>L=at+h-i}TxCsuqLmmTPAD=7VMIbX#nt>kP6@)6{j{S?;=Su~;n@ zi?-{XZtJ>9-Obwnskhi6l>GMlCv*8P5q;-M=mSJ!a4R&lIdyHCui9?8N-0%UCB+^n zCFDbYyBp#AeS3N66VY~ORW0o1Xa~K#yV_haGOg76)=h#v#~@$auJsJ0b6e007iH6!Dk(PF}J~o zZoh;Oim!K}Z|Z>KZ*2L%x?v(xvh;-L^ugW&85YP8W}FmJfQ9rqv@q?i^lsEW|z}5-Az4y$>IvCQ87F)@+rnrN6nJx6VZIP$NbcaZ}5=#NZg_ z?Iz>Q?^PM#s1wDCyCy?g$?rQ*3OOn>{{E2sX=yRuGX>YLSxfRK6-3co=!Aq>lAKLV zButLa%Emc_8)03m~No)))nFV#Z@jD>O&Q|~gofhMrsL?Y6d?6mRs?A-@SpZ_8 zs%r4m%>@X61c*q2KupzVN6j)gv$0}O4G7`@f0sMWe;`@wP3sTaC#=X265!_MI>s1d z3?Y=lItYMW1F*AO^Pe5;IWa`Zr&4kZ_m~n%p{Rzkxj-O@A^^hh3zT4WWmgpuqK;Kc zsp~q3gh{1U6D2Zd_8b{C_S_65cJBzgjFuneNBL2Hlpp0j@~3s5`2kAYJA&`PF^9x6 zca^l^0G83;!er#$@>{O%{iAfF==8bbcJ2H{_s|hLER8DU$n$1b3MRGR+j8BW(Q`}r zu($n#?DqHGKtLa+XsiBr8hFOcns<&THhxrt@yORY*q-tn`6+VDNE$g}?3pLy3J1Mx)BjnjKM_*Ykf=Qtr;5ees#=n6aY#iaGDLmr!?NAoKlki!r6qlqy>a^w&82tkpZ)xl4Y#+HFG28Z1NVqX zf4-EMnK@@bVyuK{+cs9yE;*rX>PQPAq}fmuc?n1E=RQ9I|wzKyg1YWLo6 z3lqQZ*Ma?iYdfIyOBq|hpN79MvjOMi%LAoSqf zMAJ;VBUpeQVKtLU!<;2WsHFr;X|?QbUt#*XIX<7BJgufjGM!mnqp4ca)M{pT5>%VsbzTzA(FZ! z5tWD#iNQkvBqPjMDbt4_tfFP|i#Xgs(um@01eE|}uUe&>H{e8E6;nk63A7;aD2YhG z(zSym=pvv|%qLP$WqN|M$Khl(xme)ro6E14e7xu$w|17oxyrHC6W6NElQtfO5Gpaz zEczJL$JNR8c{KOW>)^+oa}u6iJpC^Va`jz>t3{SM zv8o7xQEY9mEidBE^zZLTZvCug0D>slTjB?J)^%v7_Rgp3(O1dmz2(PYyn!h67GM3+ zKKeUfUdDKQ(#+5o6Fg3mQo6k|MYi% z_sPefRaJ1$W*W*d?HfR|>(XMrY}+Iff>!QM}JInw4R)p)bkdtg_PX8H;+!5a6YXWIN|Z}s;2Uw zD{@J!KsPoFCc#9E(i%HWOU+ARh8x;Wt}mD0y}W(>I?w0Y*(7O9&@2d2Q&;Zd&{(x; z$yzhfB{R_I*{!Z;op*(cC-fi+A%$*q=8LoQr%#`L^y2xm$4}2rPpYbd$aEUJt`q7s zhDof%ED)8jlJ3dr>5Grfo;*1|f7DE80IXXrk0&SX3YXXO@4ox)>#yIweS5WR6TQxv zKoqFu-T>glVr3;p_i!6m742_OTii$OZ>NBU^*39ZSJ!m~wGJT^*Gc#6?(hl{L>NOT z4>CH*x0hEbrLN6p-g{vp00^O4PvAnfD=k?Yq&MeUfBqKlWG885?^RhN=`O*{EE`l} zHEHU4Y0JfYetUDXSj|0?;#83sa>>$C@(B00M+K-QI*#$(Qv*`lgtcB?i(|MTDfr+@!H{?FOTsQ@&; zy1FvM+1YVgUPZ*9>XO>F4RHdM80749Mo)!%rG0ALK$YyCQkvBhl7)Q|SV1h7F<};w zbr#I^oRPr~&&*=f5P~W)oz!+^f@(Uc+T>=YvBxn;E5`nkI$aRJ=wS=FS3U{MDU1gKmIK)E&@Zpql|S788rqxSBX%{&xW zLKupVF))~yWq>3EU?^|07{v^51OmN(Aa!l@73k>PEL&#Ddc38--{FNwf1fYA$5tlb z{dm!izQd8Ox7*DvDeGlmpp-(J&wGRdW&%Lq`WGS)2vSNxHH1j-L_$?H0d2QRDZ5LI zv9fL%p`Si`_UYqi|KsbMGsGKokEiv|{_3amZt=@sfAOYk2?P-kPGp*w{N@56TIza7 zYVnfz+)T{9o>bi`X%$q}ATUVVo}4|7)kH!gF-EB&L2~iXcTpWk%kPyv`svPi_95lp zt9gwG7F&4cdjGsT)_e59a;{atVf}Zf{ljC+Z#QrD0A92QPac;n2gsm#35eO`q%ZGK zghKhG^&a_maIFADt@e+oC5AcPR&xmJmxF@=+svjd_9Zh|;L zstcSYR2)l`7a=)TsMq!Du(svScpkvRhqkb%esI9S_8g$VHeM~`@jry0Y;g5{{q8Tn z#wXY98zLE$oY2FNjsC}u7y%7q?Dze`eyr}|xBGCNo$=g9>%W744(_#gtLyI%9FJ%D z#`l&VprFm`D|AmDC_nyTKmPrg^y4{d=b`~wHGu!>$tTpSuxob_> zw_e6L4-eem#`x#h-f{Q-whj@$uD-vC^&ZuCpT4L5e*f8T@7N~=v%3HMEcpC8?FCy> z>^0^7jL|-SNcy|?yXxOscjLSFyW6v|UkrDWgZSs&^}_ug?S}}mL-}{#mt?&Uqo1D# z@!Qe78e=27XzK1$9+;o|gXGW)-FH6rKlmP>yM|kVem(w~djKCC)*t0Z`B8qqq6e<^ zzBV^K0FueuMUtbu=fyppISoM94$1VgNYJK9BG0uBZ5m1I2b_b^XK)c zePw;Sl=pF~f0Pf9eOiia-v&wyH@}|>`lI~NWvs#Op3b}1qps^jq^|1%nVFecE@X(3 zJ-WcG^ZESd=4QEUZ!Wo5td`5AnGKbd+)c%-)vFC8OEU2xvD~J4-_wn2cys|nC6vT= z>#i3>Z-6XE*sHr(79CQH(*!xtYIGH|Q5$rT8dwFoAuDnOiR7%X6!@}jZ@YRrJA2IO zF^*0`J%di6L1IYKCA*%pxwh-uc5%z)MP8j$)ifljPnK0&#YHPkhbnQBwTarS%myDk z3&>HjAtffyUB{eYt;wvCNyREO3WF!o4TX9DK!QLOZtE})C6`_S5=v+X_hQf^`WykU zP|^W27@?qn;!vSQ$)LNN!`&Q8Hxd$bI4p!E)SC!|lw|56s-}?O+9^XZC@Bd^jt=M) z321|4@NFXtXJ}X%UK)=QPggiOIeB#D*O&S2m7mXf(S~!^ldR{9rUIf-%_1;Wna27; zt5)h&HNBlof6j|HHhncn z^!J~z_dbJFP*%N=$Y2H%4rr&lvQ{JA0eFetPY{-~cIfc+m%sh#Pk(xPd~|kx+P3Y* z#l_j#*|TTQX0w?pRFs2zs6bSe6feYQ$@$sE>FN1oGNXp7 znTQ*pW@z0t00Iw4i*8}9wzqjE&Bbwb98RZ`(@8vvGO27@vC@v5JLX^qajnG6+&Z-+ z(nVM$Ifx=BTwSkTy5agxOj;51~)6?hA z&YnIweSD!>!Msb$6rxw5`qi($ySYtoUcG+v_G*5cyKI1pMiMT=#Fnyo5%fFP+6PUi z@rSyuNdoTfEY6rLvt<)8CFk6>?Xq2^l#=B_cq+(oDgV%BtQ(*zR8jBqDg#i}u4MC# z@#tjc_az0dImTzJsosr}j9-wL8cpl5BCo~|9N zOXVfi{JOy$Ldd-LL4SB0V12z=(STh&vSGdVsw90YXv)E-nLqY0K-kL>vatFRdZkv-D2DI-tw_zYd|OIX=cw5+HrZ ze)R(qaZo96L2!qN4#C8+>8ZNF0f$Ny&8U)6sIc=&K0BNK?NtA5nMCk6Pmlh$|Ml-Y z@c)|0fBly)UN0z+448o2%+C_7WD}iLHU^253@XWl$xt<@YQ%|YZD_~}tN|5Q0Rkb8 ze1HFiALSl$$fbJE{yr!J>oa@LU!u?cJH!)^;WO8N9lrj%U4!)dClx4B;-%yw8y1`b zWkUga^7(*c3#PQMC|V+TL#`8(t1 zf7p%h{`HTavddn1M|nc*?kMfn|1cH)&eL}}6ua#Bb$hTc|G{qiKWLllpSUyMcIVHS zZM0Q>^zdE9uP5p5jQ@D%4_u`WX@4Ije>|S!cJBGX-S&)>mhDlE`{(v%VvI>rgOv28 zyYuI6#sVD-c1Fx3==>`%x0lpWg^@DR}w=bI?38PXRx^c}HiY6N1 zLhR0d}E=&uXlkT58td~lYF-T5{i-3_NzH@2dO)qi(> zu7L$|pkL$Q{`oF>*Z#R~dHJT;WyT}p#n1-$VA*BQ>n=8if=daUCaRExAx(~egGGKI zyl+;hVC=z$jlpkU&&KOw^v{QKMfCOWoOioB?cm!89M0BxP{!xZh{3n{&bOb>QD;Z{ z|C+VeXQeG5sT9v7k^ATs`_3a7&d2h^tv+gROue(U?2M;uwwK|3^yP3Orv(oZg!Tt6ptK}snm^P2A#2}VQq z>aePASB8X1lFDV`GBwFk%o4~d9^o0Ol5FhS)V9_x6PFdIl{SskA=g2pBn6}p^WlUB z3bh~GvXsJ@j!M;?ZM}F57k@@N1r$MmOB1rwoyj~KvztTAsagr8n9;oCm?w%c#g!C? zbioAb)GSn#n35$UK<@&p02H^tB0@!q-_OL+bU1$0JUz41({TRA&aZhfm$R0~3wt8r z(^eW#Tm&YRDqCfoP6ZMXVhYVXHrHWxRV}VlzFo9$B)#SGJIueq@;l@kS_Ue~seAeM zRsCgCU1&V=*%S&Sfecy8FtF*%d=9z>EX(^x$z&$3#gZO!@#ArX>{w<@}C6rx}<|%|wQqif#x{fEOM~@z#uNL#uG(^Fd#><=pHxA;RkVttLMG1wm#A8WP{-=*fbJ}Z_>@>e6ebQ7-AiC0z`V^IUj5J*GeKbW?id&iKLX;@Y0@bKd z0o5Qzo3EB{-doC5To*i{-CaJ^NfCfQl63u!x9K1i~=#j~Uf`=Z?0<0n|qed;{J0`p95RdiVGp z8rF4>dXky;zF5U~igfqv(67FH_2n1eef0F>7$@E8Hi$G;^lT!5bciTKh!Dcr@ySQe zU;O&Zm$2S5I;CWu`kR7>vSVb2D(gDVX0z#Zdc919D5ZZnph_KMOsUPu+qO%|NC_c; zF!P{2#X&?ciYDbwKvkkhF)GtbA_sFb4)ZpYFivh3bO`9O9!J%xssy$4vvTuR_TN7l zA&de?q);`AgpyQSR9sv<@42E7-8Zg9GwVd{zPoa~Rb?N;xMaqjN~k-gbG}u5MS$ zMM|AB1JvNX@2?QO`*g`oA+k9c21Q})S#n5xP=wdBy+5-E+FDCUq^F~K%ahLTl3m+l-c;4_5a&Pc*yAPO#y_vc->a{vFzvz{Yqc!3!{tw zgJiwCZiZ2YUK3O=TsMkKa8bu?z$#)MZ7yz~O!>e32y-t`kS)R0X84 zFp!nOMiYOhd-uop*5$V~uMZYAV;ec%kgsz)xEamljpst&|hDD^; zJ6*+l1#oP^?)Bd>OkK{z^?Mlu;13$uU3`B0-15cNU4<;?BZyI|^@F)Hcgi2kwfSLq za;aw*Pu5M9GVa0-p2nSV?zi#vPjA0z8CX+ z$b8s?*NxuSZYH%o?ZKwx9?QbWGdUw1z?^pk*wY%l_*b6Xxe*pg+eEo+p`5o5# zZa(j=F&x`p-eIrd=vI#pz0dzgk?+j|c&zwsUnah%?(o5jh}<&EZCR8bBuZvd2nxZT8*g-g z1bcS^a}g%67WQab0h>gmBsz4bs`z?W8<|i4R2bH>bv*)x@jo1SV*lKGU-{j??`hI_ z!zAERFdgsB!w`s*HiX71g~y-YRrv;e82)~MRrb$A3RL<-pbd`S`xv<%eb}6s1#V6$ zty2t^(5xg^tJTfTO)>q>=kvC0-2tD9gc1}wnVDI?$TtD*$~dfphLwl*4O{yg?arKG z{yey|B0*J41A2vP>}TA^Y!^U%hmeDk`F?Ad4_CWWZ@bq7Z94Ymd%QWmu4F0zL%_ zr-TyBIYC(pRR!)85qFUgrC7R@!Yp)=#NpBCRVSzP zCI)&|xC%pwKCN@Is&L!o`B^xxE*J4iuxflMtr_m)anzig>}j5Yq)oYf9mP0pdatLR^KQnRT%Ijtf;e(#H;k<)1MWpMx+uPg4Vqw-3WyjNq4`{6LPq`cPkH-q7f0(G+My2WC#SS-40z9ee+$Krg#YIF795ka=3t?lORJC!LVpomzS^KUS7`Ut2WuHYs+jb=D+M! z5CvSDW<9a{=mc9Q_}w-fx{r+vvJyfFA&|uc-p2}F+ki>ZNpl3f|25_y4)6z&@~lDy zarX>f-!6ai+b=)+?6Xfldd^UHIVnWkVvORX^tmachO^U?pM3nuZ@+q-%+sn}tyXQ@ z<}`&l=s^%PQjl}5$fgb_$Fqymv)7k%FT58~bC{WcngS~e! zZs+5 zOE)+k<3sa*d;M-dup^ltJ_+x%J*FfEG&zMJZCu_69Xk6KQkmEKlje z40IQD^#OGwR~sd{~bT;h8@)*>2T` zxA4%qlke$#If$43kp^`@w|*$?`E!+r8-UkW%e9PoOyk$nvkwlG-_P*!5r^WAM^_Q= z?*PLwIkF6`tqxmC%bgE_B@)n#_1qzlZT0bFa1;RRXZtP>1@O%dNVH8_0E1 z)Do!h)(YC(*R~$a(Em3J@-KZ=l6TJ01F`$5fQtuV=<_1>=m62PnTqe2L4;NT0u#%s zF~k_P3aW6>EEh~&1)#g2I5G7b6vO5P^AnJ_yLP9_^E%h7FT$Tz-d9NZmMvkNaD=*gdE^ z-Ye?0k5T_G`ffAuJLZo-bg<#9H`RyDw_@-(w4e0BXjvSm3L69NECErgDgsE!N-DeS z>+4sqUR_;X6^}X*6-cZFM0N+VvvYPVIkSh?ALt5CB!d#6>7d zs3UlY5*rPbp*99@Q;^$8)K2x}^`z69Q4wlaCTQktW$lz*o!e|@DO4^_(c~~hL7);) zl1c}V#3Je_S%PM7g4UTSVYzaPDa8)(c3SzQs;gL40!pf&BIa(|n;S&LHX8^HFz+>O zT~B_J4)48VM5SQH0?=zw)1cyxpaJI55ZaW5C7-^s!Mg643>Ib|HId!%(>(txEWg3k7w~I1;R$&u$%qb?i3~W9 zAtTO{B7dfRZ>c%4v6?wkPSKpMY>9w{4Mt|(}b3Owppv?S1h2-a9x_jbO#S>jx@ z7KubhAVCgmB_r$au80g9os`d6L;!;%_a$rv=|&U;++~`}X6GbHn7hUxB0-@95(qIF z001BWNklgz9m z`{mbH*RQ+8#iG;L#4rKG5>j@{8Pph+D(l;3?-2(;($)ZvrsjdqPI#Z6Zxire3PWX` zEYQr&k~@}*W$LW$mP52&4V8uva_R~#NmXUYqvr1W^v!pkM-rTt&8#>%1}zX$@|@ak zx#-?pUA}#DbGw-5M5qL9=n9`SYir|MqLr%RE5{mNOW@5JJqk?OLDTu5O!^h)k;( zL*rg-RDpw4cFjq^V7eCR^Wuo;?ai`lNv{S&McHcMRx&|LaR?6~OeV9F<8wiU@+Djm zi;DD)=;dz3w@gB)LJ*W}%AkvfP>E`p4>3v%F$9ITfCE*jlq47-3K17^jTuZiuR5Q1 zxlOrUwnk=$0TzM>(GXqKC9|lXTss<;?%mbjb!0IbB53>Q^XRhPI}?tGh9$87+7Fn8 zxB};zh}K^?=;GomtmA>aSmIHQCgx_9ZB~r{1Gx=?Z4F`_f2$Xf0F+dvLyw9V`ayhS zc;W^>IfRFl2dwpl_3|IDrh9nj+>NgwfKb$XLaPQuM>O#ymQ|OqPHBROjNC!(@yYbK zI{o>Ji|hF{q@B*Mz}07Gv%h)%_`m(~>z5gKXkR@YkR_OJ`Pv8ofd!VxD?(5;rGqlP zc=Gg9vLPFj2nLtrB!c(EgpJN_{pj88-97NVjfWhu6|rC!UwXH`$(=I0{(qzA-V^`1 zi>G1dSBGRg0=r0>-}!=DIoEfv#JipIt={d-|J~kE=;De#^a@q9C=}Ay)qfT!974w? zrkxT_4@9{@f}nUIaF{y!oa>>So@-2OXj|EB`rZw@Yq=_q2VCAWs(bL&5&pUBp<7O2 z`pC9)0Lknt>%SQ+a6@^H-Uvo-O?O)RUVKTmSN#^AJere44})yfXl#0V5Cz(}XZL?c zzujjq*qQ&k_KrOf!uFQuro3R_(Y^~m8PpkFn}J8#%Ag*8&v@NC@f=`NlE3?XX{Y{O zy!v4I9vCS1x55eA{Py7fIch^+=7IS9L3@Xc>KvcBA3C0E&fI8zZkc{%v;*JY9U#uw+HZ!AK3TBPh!1u$D;oh+M zrstF$D1T_bdSCh7zX#jX<9);59tQ+iyudN!{T)K;mB)aw_mpB7^r-#ykJ`KW`=_>+ zeplK19>;DUe_+{Cv9_4z8{K`(el_dUVa6Cmq;1=)tDEBZyI3sd^LfrWgb-t41Hj$s z%$AGi5Y|(RciYe_uG%NUlR@!4=&STW48-#E60^D>*4RRv)+T{c+AHyjP&Y+1s8K}g zSkGeJ1kEDm4tJ0O4XP0uATVf#619g)>nXydswUJ3t(6S9)fS4@y4stwY!j^`t107@ zm>HHGT3=m8LPG=1?(RaT6sKAMq!>IvT%3T5krq`dz@#!rV9t!u<;{F?6gh1;t)!`9 z6+}w}eRhOvNlZF;I-)lTbGFWwTsKjj;t0K$*0)vWrrGc8MMj?Yy1!4{_!KVRI z0;4+=4!FRJ8CZwPydVgoJ+1_*7$AaRaPMb=5h>IlZq1V9%SI-(OdiF$tFN9m-F3db zT{c&#xoOX+j~Jd=c%+kOL8mf}B4UEpkqGyk>kxI)=u8mcs@5SV^~ITV3CRSgr&^y- z>qK}btk>t43T@yQ1;7ymUd(VH16;r)+A4&cy2Q0IS)ioslC_GHlji8BM`tf``&Z~L zLwY4Xx13XIbGP(v30uKCv!ft^MFo=s~z^NH<#(ujVQRYPi^c7G+ zjv)dkWC<>j6fyxDx$bV?-cC+X#X2b@7;Lu-|M$QB>R-&-rl|yW zcT*aI3J5$vfAVbh*PlIp^86@Nk|B=T$S!l)wQZZat}|E@tMl`dr>94M|I^1md3^lw z^V9RAIMJ?Vr_6#j(n(WhKtzLynG4Kd8Mkx3eRKQfO?!D`H*?;unElALDiI3|))RDu zA(~W<26t6Dj`Ky=TJb(4_)x~1D22m&~q1qS*6G<_VsyeQ`_u3)1 z3QFK!AOU*UtA|py>g~jH^qDR41rf>RS(|1fVmHf3aKz@EbFKhj&}<1F!ZJIaq25fl zd&=J*DWa;1sWONZ*0!+-g&A`Ezi47+$HvSs@!p#c z-h0<=K~Pn8+X&#@;J~}j(*Ym2)$P9eY!?>XtwCioG3r7{9}*KYjL`VbvBl?)L&K5y|I?3tz|5-2dv6+5)sZuXiW;S=EYHu+-+S^j#rfs&igrqimINygQb zI|j?Oemm*OET-5*Su7T9+vd$GB|$%fz3SG1uwLJ+S8caBXG_UW1TbYoJ9}?tF{O>jCf2LAUDvC+P3)!$20_^y zDTrG&wWNLd+$@j`eI@JM^oGw}De*1%VFcX{9AdqMv$f9{x>)4wtgM7S(#Oo;={8h) zOS8L`q@bVN(Qgj)e3<<^*Y6?PS=XcQht}8b^*5|R8$5=$E~hj&d|S4QaL)D3MjR=$ zZraK$`nGgyph24eDai%3+5AZ1>$uUD&*$@}r)S5-*FG6p?@HTwhxBQ(hl&&(!Y=?w zyS@|-ZQFv&XV2a{K0XC`&0d%cK#7xDVp81)pudxJ$No(3qA%}q*S>!D2lOW!&30LN zxITFPZOQW9Gyt#{2Iw1OHpoAw1+yWluRo z?{E&{F3Ip+_lMgpf7j61L%8T4CO?d&-*2a%hf%LT4bh=}{!i1LKU?}1rIWE2+xYq+ zZTZgo_2B(Go)Mkm3=zo*Tc8(dE4>q+8n>{p4ZhLWvia4c1f+Y1sIY*GT`zA-@El8 z*EZ|Ds{49}E*oz92OZ+`k$;vMnGuPDF=>Brnq^fYr)7m{r!{L0nVP1gNhCT?&KGdZ z%rNCnF+f*}H75##>lgko7k|ilANwli>%Mn<=C=hO_uHqeGmkwAw=8S@)8FZk-RH)w zU!mRhh}>?)y8W-ikF-;=$qb^f{?Tp zNa3o$jip8qiA;$BC?}Ab65x!Sg9#Ck%%Z>)g@Bdd5Is9)pVB63Lc=L)!?6mc!KtG_ z1zQe=1A}`fAyc2DD>$p>IXGL1hVzJM*rmuWB#|DNNGRiwSKpEjxW-=2)$bmRYP&0s>V>5%)4x2)jOs-(3_UgP`t=x2h zaN(vG?dd|!7kVW)Z{s5QGjpf#6LC%<6vbSEgHT!9gp}Z*2yievEvE2Jt00aU<|M&K zNC|Ny+-IxKb>;GaQCAVz%*-6+#G7!Gt2ru@?WWu|03H?+d#0Jea{x3JlNP9hNYJR# zK%=D%S&Ho%Dwd+AI<--xF=-)*WW^c{IVF373D6=bVhsp10ZIb12qhzdEdfS5CpAkE zc0;x_ZK-^0_Sp2KUb;Ev2(ue$jXc;O!*UxRcDI3d8Yc4~u4iEF%m_(#s^lJ`{z%M* z2O}~IrpRS$t%v8By(+F3H=lq0`N!Y;^yuig2$h+7@5K@*=k@Gb$%5v3y;^TpO}kM| zW>7VwV5Urgz(jfOwgwVWan7;pA}B;8NldAI_3GtMKl}U7KKpFFUQcH;l^A369=qs= z=53kC-aq9ZfBg6-pFAn1Rg)TWo;@d!Dq3+VwW=jEAI)Y@pFVx>(a9%IXD215B?YY6 zY9=XI$)y~PW=2G8f+VtOTen$F7GK-d_07dqeRUo0%*&6mG_zOK#rg8Ydn>ejd*Gl@B? zEtSrD$DWu~bLw>=QkW3s)aYB37Qn$8bvrzmttnfx%HaBwP5Uv%rrk766JwK-iV#yy zc}rPZQ!`cNz&RYVFRYulMe8RzH>)GL?rzG5W|jn0rD@W7y??AVoKgu z?7cCFEu}<`*?9mAH8U~Qq$-VbE`<<6D4ciBQ5Q?pfn0gnjh5^9Jl*nY@7J+4K2axG zb=K`{2`>q!5c5?dc{M0O4`e;autf~+=R~*geKl!Uq>sa4hzg{k{7R#$m z^Vquy;0P>|h>V$4Ns^Vt*aFOHcDX5!J{CUX95tpV_IV7qA2F``PtbSk%x+Pem&fs zR~?t$q02CP&9w`Nyf3P9LX|5g)$Dk7{`hnPT`0S*WUIxik-i%U)t#Js{N~@(+BwO8r|0> zWguplH)E!9GCMteRASw@F0B{1H#1YeFX?VKiNMwegIY@hJ9_$)AO5H;%QiPaPzaM6 znW-2Nl-W`xBAmt*}MDq>)by;dif7S|0eEf<4l|5Q=xNKRAeu$+oImL z+J!%zFVA1-PeHxPhQ1C*hd5LJS9{Ze@n=cj<|2kE{KKJi;Aio0w-BT~}0 z7JUCWqy#=7@v=d7XNyN^w)5*}cH+LB%-Kq#U97);rx=xQqdgY;Zj8;_lhN?5-cw4c zY2spWd3m|Ky1H1e>y%o@B|B#F29acHF&nnob(Sw<%Gj}JHjZs~`yMza#W1QQusl<2 zs>E!nguK6X-$zAihtKW4Gzh+$#EzY)Dp-jrTZoK}SU`?)I2B;x zECr2)#nL(EDv>52q85XgDU&!?3t+*yDT)$d;=_zW>3rqACpJ%3uz5-(t;GhZsbd44 za;S7VD|JqVS2B@QxPr-<`9v(rASF1ap(Y(bM(|4FKt|3v$3`j?%~XA07C44Xs#8sE zt-6V|Gc6;g9#x=|Y2hHwk~1?BhQN%F2CJ}{X->F6V06ezK3lpIhK!6{AN-ar!_G{R z46gDn8aXi!iz=cpGa*VKGY1$9q}>i_7TSrDvC&HS{L@lXCXfjP^;uvJfB#B0diioPR zCetftK%AJU#a83Brd85(y=>tgAwCjR<|pi6wdG`@AOks=kq&71cy9oJ>>-ff%qbFk zk`5d-0+h%((k5sV^rp1y#;#%QFw6H4(XfIIP$N|kn`xF9nW^8jQ%bL1z4-FWFFyL{ zgR`^8qRQsH_h!x{X-=-1^UV`CP180pX@sZ&rXWhxpKe`zBS7RbIGCa`vm;XHU}loE zZDU*i!~gsrzxw4rUA}tB%tlt%HNhs6(6(_jO4e0$2HyK{`n?YyJ$*V?)%B)jC!z2u zCGx_|Wi_d)vZ^NY`RvJ)r_UZ87jhHOny#U>v6wf3SZdgLHX>0|qO>WRjjXS+yuSF& zKl{~svq{>(DI6nsDw#Ot0@X(BP=v_bnk~6}#YdaS(b6KeE78f+onjK{q$;~Mi%67|+O}?+wr$$B6-}xr%PEZ2a^c%VL`K$!3!`%==tSiV3l3A>@0N#=HvRJN>(`eT%jNQ7apipByeH;1sWlCAD2gJs%0%AhBHLahshOH3iL8=?L^UA5 z0+&NKx5F}M`W@ctcC>!Lxi0(hPMFJXPzVv_im(7yP*RboMwX8W27^f-Ow#5o{PyJovZZDxIeoE<*9N6{GFHRuih?y0kV88gg?hfLRG zS%L!qBUboC7P-8Re68V>C#9PgK0=gWs;Qg@m_Sh~HOai#(WH9+>ACyzYY&)df&q4G zc)N68y-2_Y4|t#j)X2ykJ^kR>_kVy;8WWLqzU-t5BqleQk`EVFy3Ie|?&kDoNVd(p zzC{f3xtevx9&OI&0~Eu~c59a#e-5jqTZl?s1|sUN?0@ECjIyVQ=6`2Ljhuo;`PLd_ zHuQ#~yg%$2#k*I~Kf*b6A3eyV^atGkKpK`_hnMZ@+QXT?cip<(VE_KTU*#EpBYoHG z1#fih`wRU?pg+>O`wRWMrtx0)wpK0QTQzL=yg79I=%|hY^|4$dQ%(1H4|FoJxd>8N zuGHuOg*kK?cKRcnGfWi$>y?pChqUfl7;2wn)psxuW z2X64&?>4G$LEAR9pD*j<8v1Gzqe!gIYmWg?Zf7T2G^;Lmw@(P8J`2!~>Nqog*S-fp zEZgfN|AW4LY)7LTle=>Q(oQ7bXl#4P#=4-5!9B{s2<8n63x>XWmXp3z4`AiC=R5d? z-2HvbV>%i!+s;=nZP4hi4D=~&_u8Z!K~CdwR$xe8$V7b|5jX(Wzb_F1eiTG91}4U9 z;ZTmnQM$;yzPfhXq0idE?)}UXTZgQ7s{=5g9f4BB1~L!Qv~EE;U!Q>@b@Dn)y&_Ts2p3y$Y&I}D%W457OvX=pP&0@b9<;W^605!kq z-o3vGUI4$U8n_IE`YN5K3ErmjNfYa4 zv*y6QoJJAj(j0QF*38I4Y!>R8&HJN?n-poid|lO-N3JeX@U!!z^BY^<#2B?ka8l6P z5sr?@PdJqDfgE#zvV<=r1coXU&dicUNo^BT8=*sHjjWfi9L`O(qQWLk!*Y}-~9 z-uqCNsw&C^apqZ47N3ZOn3$ExR9YZ8fVdzn6b92)^S3grtlGY001BWNklT~?K z`7H8#B!YmcYNbwSVoAlkE|tUz$8BoJu|Xj%)DtBJk%O@%Appdsv5~MT$dEI4s~~{Q zBN@;TvK+VO%KP)`W6egOz z0X#@9FJFK5v;T2?GXJmt=l^wja(cD6Cdb}Y0*JIZ5-z58d403EUM`l`^``aS2l7o6 z7>5vU){FUkURIM3+;lphOs246b<@r!rFUK}Iu++F#`^bP{PVAV@w5N-|NXyhtV6Jr zn%E#XZ-k~5HH1KI>ipZ-!B6z@5&q`C{P_4dH1X0gmtG2%icn6;u`4`JrtWA~&X0=O z%$Ji@DQnlpKt{pLiBgj&YDghSYGYxFHqyGWt0i8&vX_@}v84(MRGz-DO z6Oo813Z8_596?h9g)2RodBS{JJw1Q){s)iGP75DQlNCk5j#O;5(u<3iFJ8QO`RelK zX5F+<5VVx;kR;C@rY0@Jvo|wStjr7!-f5=~b}ppO3|U#`tSjv4N1X!ENfEjDbQb1H z)j?|(z@paKH(=8?&AQn%jbz?N$v&?mP`Qqwo(Y6f{5eLx@E%(`S0k&kG1(qacxsHh)BY?og z)XYSZ2-;YO;6f1RsqmV^QYn|S&BBriP+B%@<+{bxg$#Ig1mr4iz*fJeTk^aiM`%r} znZhKsF{KonC{f~CM2k>}DKwj!ef9!TRpWM02w~X-n{}DKeL}8u-f6FLccfa**51<~ zOS4)7poi?Y^0xOyw`E$VznF0XQmV<7zM8yVuKxQ!d{)ippMLzwCf3FVSJkODjgAu& zR1&G5gp*G``r)gu7cai~>R*2O&HGP&aB}p4m=jCn3XmAUz7}iQWInI{^Z)wSH|xLq z=9?GZdw9EEZp1L3oz`{BW@2!rOr@zUuIihs=S`I9?CALDsH{pR6G>4-OgU6V@C4t+ zc)7T_xVpT$Slp~O5s3>IMYL5jXJ%0aa77U`wyCKZVkw@?&OiD1k>gs8;d13>s3y^5 zq;SOEu_G`fky8+Z;fWAqniSq(A~(~j{_wqU`snD%lP6_adZ*6ly+>~9K02My?|%E` z%gwUFQB;?_+eEvTYb(myHm@!(R+}cLa!r9$s{|4WFvp#qqGnsA+R*3K0F20t^769| z6zU8)+Gz@TZDbfliAbq4*f2Eb5CLTkrpxSO3ax;SON#@Wz*JbG+9dj9K2Xlzd7b0~sHnLFoCPuH_CY&j`%rx){ zZ%|)t8i)D$M}PCb7f;^P*(7oT%qbk3DwL@)&w$s&#sGr}R%R0dSVVMs+TU^Bj$9K*rHia`}m@FK7J0n;EDXaT<+! zGQOz8mdG9dU=-n(Ut-4;I{aMs_01iG({}j8VAPNS@I(gn#0GO&n;faDdGb;g;xN3P zsbivU5FG&oCVju|oSSDPPmZ;QZJMi{^|c+&d_HWqhkm_xPDQl)+uQbtTj%fa+#ayX z@7v2H7@RN0Du=_HVB~Dwm%+|1NM%cn#7~CK>MVR+w&;%#*Wj> z$UddR^(==2<2T(S?lKW#q<7@kYwx`OZSC%3@6~ts`9O!fRrVdlx{7v$EVYiDX!Dvf z>k;YxuS9)5#vm_@oxyua z2|2=S_@!AVgM$f5$Wf%$FAO#_fyd@Nw zbLT1B#u%MvE4Ey)eRO8>@7i`RBH4J|+33vjl@N+tsZ-TV6MD()x4->jy{8Fg-Niarj~I(2kA0y`RBPvaVC)L*&%3A2nPXH}P!0qfI@ZDT}836$$2_Ks`l z{ft3SHdZF*T&T)wHf3g26){r_MM!E!FePY$NfZ&0q9`0$Qq*lLX~UeVf_*W)PU_9w zfKt);SzEeUGdpvB8YYjx1vz%?;n)RV6oqr_nAJp8o3_z5#Tj&0Y&FB`f&B;%6SFF`UR z@`Xz=hg6!fk|MiCx^W(490gY(1u=Sr7DfbTrVLk_3K1Dp03k;PW^aSG zphd6GP&D2efT5j=@vqJ7%7Zl z3Sl!NXC~R>L@Ys735)BiFTVKgvu97f|NT!V)1$T#5fL!}DQQaUoWHk;ZIU=(vSi7W zh4I0A&+4{OO=UTqPN&W}Rb}r0q?8B=q|Lhi=K0tE^wWR%>}P+MVk4G1y3+3_TJ($p+f#lx4A@~H4dprct;1e#5X+0<7R%0e91tWtzvNT$MM z_*rHcsPNuCSKqhRGU2;mVWwr6;%eMKV zbw69#SM6*=kCHEgN}XmwPnn-FPMT0zaXfWL?9Y;)sX8HmQE=@@hFr25BlRWS1o42m; zuE2S>e%jYcNA_Gn=dlMhHwtgf6@ODoX}MmDNQ$bepwO-Gys}2ZT;2+F$gj4`y@o8W z_Fx$SxxxUbDnfpcnK65IOok|S(>ANRSzKQ(7K@vk>ljm(uk4^WJ!s{9X{7PrI#AQ1 zsG?Q?=+z50xZ(mzqJ#~9kDUG z&2ATq`BtMS-WseZ%2E_bR245S7Qg!ZceClqM;|_`S62)zd?>w#tea*-6pJ#z`Lm;= zAAI~tv%2~6%P+tA=J^kQ@PpO5olOg{D%7By z4P;==IWLUJpk!nuWY1r`s;Zmiayg&RC)2Vh3h%w=UQVzFG^Z0eSL zP=gVhs=z>+1K?sEtJ1?*+NKKSv!{=qJ$dXypUa0jgxc;^Q?l!%2t=fC{P_GxbvB<* zk7k~k%oNH6)A1~%$H%EYs{+4zxriDBMS^b>>pESx^`dFXIkRp@QX--3Jjy-vnLj%T zZ|Ky>jjy}04>BG72;0xQI6#NSM&E}UImc?K83RgCV(I+PdJ|}VZZ_|YbcsF_CF%Sm!6#3U$s13^gML z+m=^)3$5L^S?nl{e@6623t1an8Tz$*JK+R|xduSoovmYK`3}8rur!X)hwW;<<2&mZ zTBNOW2955|Ve9?p8&{?7F7iK1zPOJ%VQZ^p?_Ig|R|BATT;FRA=;P%6LVuyZ(0_Qc zw?qTJv$U1OHTxmCzsF|d2R-F&+duT!F~0r~ z>(0oOwUb!vZTs`^H^sP3>UA*6{xt`m@{a9qfBTNMt}(pwfGIhcc&%gUA(bD|z3co? zEzd*L&HLybZRh_U-2S1*jC_%HZh2d*VLXLz$)BTVWp~K^J59EpVnm(615gI#3U{Uo zRfw7zEFFB^ykQwI0?tM~KhVz(irQaI`|S_r!{IIN8;y*_ZQ-y4@@6Ee+66ZCFVZ>V z9^|b1*L!XvzsnnDCqHz=!#wiB;gPAZ_sApksxpsw=n#Jzu=Ss!Y%f22`>sFixaaq6 z7NfxQTZUK$xT}f^ci+}=aJ?VuPv5P+v|6u=jy><**l~>Js|O%(|1RBC>gyk1{eOqs zw}GEApulf^EM*tx{L2SHKlk$I!#H!>&KNBQrBqi*duujte4c8!VU0 ztEl?~$_5V|C5*HlXvwCh-eaJfske|kZuK<39T8>23IPV{Ba_fa zWB}}XTLJ(cpglGyX)*&*S(eAg$FV3=N~w))+r}6fWFQJGTEKDX;he12S4ALSgy7W5 zz_Vj5ttqDqjRCgtQyfobh1UK^izAS)rYEKZCT1q@oXchZU}}~uZr06ao$97-HmPYX zwUAAYNC7lOPHn8$YcMxWGn*fuoj*Nh20H-Gxgt2kL@rxs1w=|l#5r5Df*o~9V8qmc zj9};zpIII`QZ+KTsI8i{svD7wa2dD=zJyJjv8Em`V*+uGzscd{Is7dbQZo#G+(5rg z<(M@yB91i=qrhlbIeY?1Cg-+aE{mjb}Hz?bu#wRd59z1(|h>6KOFM=`RoZUrVK7%4hUxG zylce(kW&I+1%}<*0ET7*tK|j4IZ>sV89cfYq}_&KW~6LZ_Gueny2a6h199m*07ya- zh#Ay@0~D-q2F~8%(MSzm00plAFnbbm2q0G{iz1?tDFvtO+JfVR(mb}!)$f+Ce%)UF z^ZMfFdijDRnRAds8Bj(v+AYkwjPRWUEqXHrLsd1V>&vTO|N56j;X`nr{_wAeoQM)p zRaM^m7@O5<)ih0A*CGN^W-xIG&Wy=%+twoK2$qtvNXa%+uqbYTRg3kFTrXBHU#%~%(z=GIS4@DT z%#zeNaEZ2H0OX}-Nh-xpH*WGOxqn@z-`?nN7R|y{NOKX#7F|6(sgGvyq;SXLXBtl6 zPrW}enkfnZMG%$7!7+0BTudg_wDKQ+^xl-nCl9QD3P&x=bR55LU4|lnX=dAkP4~W-3Az8 zkmq-6TOJ@)FtcMOBIg{lch2Qf%Hu)kGNhPkUsZ85K6!-4lFtL=oc*}8{tx~2TL$vG zMGhrRDKWEm?qYHE^I!hrWIlUze(YUHsYOggj>#!88H+MIIXNkQ@{^BmuD|*Fzx&yj zU;NAFZ~nTPc$k9%Brq{1CNCCMaB_0?(FY%X_07x8@4i@VqIZs+i;@UBNWuzb69EX+ ztlLe~ELW@Y>S{8XR8$QelNWgN8+kFb;pwH z);HfEYwzn{Jo?8S9qR9)kr}w_U6=8QE$h9>=_>eF7N4n|`D#+k!e*o5K*1NTjtCai zQ4CDtr^U$+-~aTOzx2=vC=^x$i)flq6h+%6-G;t(p@qt}Q6mZp2Uk7$^e0a~`H@bJ z>$(94AuyB;&T<0bEGfj^eoW&xrT)a|pc4b{c#8kw_~(J29meajf^25v1LZK?!k2D8 zZZQ3JUmmW%zu~dg-{0%YZ_w~~%g^lYz4PAo57M`UC%-NJd3(L@pKHDT`-b&6$TK$f zS2)~PPM{DyYkQeJwqy@N(l(|r%#w(y{yAHvTc+|M`QZ`9xaKz=wxd;7*49=p|@ zch~z{&hOjWBM!<-fAsbbavlwtNr`$ zdte;?YrV- z{~^>b{O>I?&Wjnf0*Gv%n?A>uRhb57LUwr$fi z%j@R#>({Sdy{x^afkmq18{EbTU?Td&XJrJdiZDm#i57ejZBEmBxfF0 zjl}Gnn@lEEC^U&kOewW>om7oDnWm^o#iWhRjjJkOPL57zXLIjTL8sHHwlVO!ZM>oZ zJlkA+>t^DnPz$7H0w(8NuBRAd6H}Yo7@JkSS~r^;siVdXl0jQ0g-W-p_ldk!i-utFNeiQdA{cfQgL|099kCGBcnI&6ALG{<38squlAOpO67W8>K5@Q}!y zIyx%L$;Ti6B!Jqsjj;jLc}@~9E?%uStESoHxOOHjO3zey?`Oxe$z*nRc5-@p%A|F@ zHi0BQKRsKmm#T2fhyz3_8(0a>CA^MrT}qy>Gv} z!ptNhZEQ13v~AnOI;G@%S8~WX*Y7#d!Q8TUbZ6_GjXIF8P|hpepNWI*vu#@=_#!Z~ zimle`#bR-_T3uXUZ`!798vx#WB1%bOjNac31#F!^c1K{0XmlnLkP|}5lKl!q$@sU`2-+(8~o+ll9~?b z*L7VJbscW%`sM4(Uw{6aYEu05|MFJ`u9GyeE(1bQLTS@BOvR)qCg+pyfB)mJzWn;- zi*J7WyU+jjZ~wDd-ky`0Ij`O`abaRA@#*77pMLz&)z#Hz^IVOXh0KuiZui+^9P|jN^^*v3F zdA+HbZ`2x-P?e^XB|@|8-2n#a){pk~=Z-ScOMUmu<4|`kn_4=MrSl@W{ifEjVCO%m z*-Mv(D)tBYXZ+`_CipgVkN&m2J{prD|LL`hpW6*EBCg)-z9NwSyV5ieoyd$ ztDK*+U6Te11ky+jUQahor7q<3W6gRuS} zI>i5XKEmz`6uGbcTe%kg4ZyU!@XsAAbT~D3U-O~-d8mEbKd|rJH~!cF)?et|=ud_B z-m@OxeE*Kd_jc{S?S66yAO5b{3=YYSf1&&7AfNo{`g8Yr^eye5V>N2$%eVBx2ReUn z-TkTdpLa?DZ90lAyX9dt_GK_+ad+_QeZvWuRn0>lYI_6MS0x$UbK6^Uhx)Ag2io87 z&I7zob}G@1+B`(Gm+-2q`TF4g9Q63R;|Bn`gnPX(H^c$oHB9%nzyFwR`@6nNheqHb z{!04{d2foa{R+Wd%!(TMb*1$zwjj%WQ z==E<+y$9C5zt48uh9P2D|KCpg+PPDaC3~6Q!>3>%(nLck|}~kE-1_ z&tugk`rSVv@^0z3yjvP)*j9I?G0L9)LL3~w5r zp_2WUMc*LM?8n26YXjf!=X;Ca?&P9O+ZIGjL{z)#zsw917>Z)DTrOX|y12NwSYB`1 zwiS`8Dh<(K0IO;SkySf`F>Zlk-O}dKf3$u7J3LL^yoQPV=p32y>WYP$!f8otWkFRyQAy->Lll{FbxMsfY8zu+-z*ogt>b2;^%_aYqM1P?mxx6E zCwp?9$%DA4rfn;W#ln|GRaK$%s#4d@#5ty59nuLSC8${xGJ&N z&RC6$VhT*E-VMF&~^p|uxxY2U$+Gqvt~7~am3}5 zL^Gv{x>8(W&a?B%0saW&!3+m;o*2a9j3lTq2t;gfoohQW$R#5pRb#RqS5$y=fwLTV zHSE}qyMsNSGw{$(ZkPOu+z&bRG0xO)WYjI8%-Yt)2oidKnC_0ghEuO!4eQYi03$)% zz6{Qwc*jKDuBAu}Rxq68fPW&W0|l4@!b(mhC`bjiVQQF`RKJ$>%jV{*xcJ&`Uh3-7 zmanmX4J<)5*#;0x@+PV2_FiYA*`F=@pyb#}GlLq`*nvn>T)lkp<bgLl)(v57YA>ecIS ze)Y?r|NI|+`upGi>*d8O6#-D!wJ4Ye!@tkAb5ek~DuUGlvm=L(9?d^Gc{~>mo14>V z`Q-Fyb~>LN&yG(f^P^BrgL6z|oW&j^*PY0u1V>x}w5hSU&{vmwv7nn(^ZS=hg`p)8 zs1Qa{m`MxC7b|zHzgwH2HGnK3}BYu1{Xcu}r^j{)l`i%c7e2>3q&- zPh$DFEza4O#-&kdRuDX)^oVTrq>#yEGMmj#PEO9x&(F?|=hKdB020FLMxH-^{>5*9 z^UaHwr1LhJD##Vi1ygRC*t97Gmt)(Bh$wa230YsWDvxJ(-Z7KvKA+sjIlZKj)3s;s za%X0B-Nu;ex@nq5a+-h3_Oi;l*jYj!eVDzV?rgtTRyy(9hP)#GaT;HrOFE1C1#k$_Co9s%GtG=0vnh}xP<@~XveYgIS?TAF6{68WyG7}hyXwGgO zV=M|O3ZI>m^7w4!txgZM?L#vHe=rRU18~mgNB7%_^PY*w`y$5yr<5d-s;Y{bI^w)B zb>}s*I(l;L#(UPSXb-@e7M2yskp1*w2{#`wtPM$q|bTpsGX5FNkgJ&j@ zXk1s-RFZ!9;rZYG&0qcWv%ml8Km7MkfAGPh(_>~Bx=>x`98qwP*vi?->5o7C;o^F= zsoSfYO;qE)>avXrUNqcp%+h}qbgnJS5yXEu;Aqx1bjGKBynWM;&J9>+u=b%eTE zdM{7jfB)l;KRP`<%>u~?v$L@(-pl{UVdVgUl7UPD6O+$L(UGF%su=_$IA*9?jJY}; zP3Pq&KX~t|4f6R{H=8Ae5=e0G9+05*9CfBNl9?8I*!!haM% zw`goz)A|i~NN#XP-#pO%A^mF~7`0x*?S9*@-9FiGKCniPFV-3_%j$VkzErvP;VDlY z&yY6IHl`?CDFw#`84+Bm;c+$jfBx(LM%uL3|Km67ELnmpf75EK(GUQ5p3TV`k7jGriQBOGLPvnI1eMGqN(Xx~kC) z41l&Xr=~h9(!+Om`^-Kwv8>3qzN0Mp;o_Gv6Qy#iv6I+oA_tXC9r!7 zuh5chcwN?|miqFIcv0py_Ef=Dy}OU4Z0@et>F?{Zj#m&~#jsq>&(4jhpTqUG>aOyy-4(CkpKFld zR@v-r-__@p5f1wH2(-`B?pE85_FiB9jqnz%O5WL@yY~NUWfM<+#i4YKy@PtUrfmh$ zmHCNRS!Axq&v%_i{W5!R*>WEB*ZXp1?Vb-eS?{hz}}f36JR4d0O4THtqj#O#;y!1Gk~wKcD6ma*;iM8{-HcF{!p@YJ{#J&vK<)Q zZl(++5R;i1S;nx`)If}s6@U(6rUZ51WftC>_Ug|0`Id*pT8tm98JIHauauH8lNAId zBV}HiX5X&p)mOaPnYpxYE#=KJNBd05{u}!*+O{M8uCk_r_TT%4UeX_h6{u!ti2>_+ z@9%+(+h+`1>DWJrY~dNe05B0Vw_Hi*%uGa6N>87DGn>uM&Mv0YX>78&)H&yp#9o26 zGQ+ftqPDBw_;$U1jP>MRPh$#ox8{P?i@`9V-ADBVUSX4szO~!VcyiSt~?7hiIVp!PRtWRX~Le_DnKns z6JtG_E@soFn$OS9w5bp)XpL-NgHg5|SyIheN|F1NiK_Y3nzV>a@6 z#B42ek^=-6mecB)!g9=K6=RqX3Xn2c4k+tP6Vw@*7%>?a1{jk7N>JmM(^>7bC~RaX zJO|GXU^b+h0RkHdn^6~Xp*?|e-ahKs!0r6%AXen$v_=4tnu&lMnIrO!l}U(W5(Ozp zp$Y<$7?;MRn zGbrcLo!7-h<)>*hjb9cR*Sc3@BsNkS8V!sK3VWcS%;17OnJ?Kna?S;0Xc(oM@ruQWKImn_K;L zaC3{N)x}qfv)|zCw>bS8ix;p6%n6C0o)aU9Hqxd^y@jY6pgC?qtCGS1OA<|&hBTee z=U;sB#l^*RKDGb+-~Yp3{pc@`?;cgvoS8!);K9++fr#V)wjq>dS!Na>pe}evOhm(B z$wXg&{p71Je*Itn?f-rH^vO3*e>PL@`9^achc=T{|XF{d(!w`nvd2`MHb!?6-7#J3e3Cd#7he7iBJ9tlpGlDb%N$`Op59e+?)x8t)C(QHV0O9Uv^oe(S zp)4ko$z(DdjYi|WJ>HwljXcW0131q@s%9ygE$-~Oqy6FW@$vrQ!T#i6xEF$h8G=Vl zxV+To&!0bi`t;iu&*#&NCV?%fcr#`uQ!^OIwmYcIjwqt9}Oqn3?;} zsA`UKadELoDK$+kBH3u+oa^X}txFRzoO47>L{Y_hRanyJyZ5ei6V8G8$-0!`1ej>{ zS1|92I>p)i^6dQl^z{5mOa$MeU3d0W=}assok(0dUtyKalziDzrS(GX5jpLA~!8Yr8X~` z=9%bS6o+mU+#WECNt`P)FE@msNh!%BFfsneAAEGj)BpMJKl^{axIBePoxEWL22ysh z10a;tC;f1D$u}JbF{}(6*I%)m`a# zkp9`%f6J@Z>GpEop1c+V7}%C$vM+s4LtABD*~!r5tKV8_yUWk}U(>7K>fO4wc{Hpp z0XJZ*Qs-}Yy+1`y)?&C{>#>E+H@>nySZnVt#`D@lS?kZGGb^F*>CoRI`~EUJ%3nJg zH^!^~$maO2m3b4n`IB4fM$2r+9S?XzHs()T&s^9Bqj9rm+9&&dH+>{2AIx-Z`Tgqe zD8KK=)Z3GHcl0jlzwsu1N!C8urO;UFHPmS=W~wG+Y^pgB85@hG&VLFZ$ryQ?1-zvi z0bR#*)2i3@B@g&&>-zIQ_pP>fZ+c~plRlld;{~n|3F*pjJ&Vn{^lM9p>&*OPWO~JI zeYRG0Zby@Pt-ktP_ftDVM*e4}Q+IAqln<(nHn#IBwM49CX}0M%cXj?-&ZR`Fd^v0L zq@Pb^SI&mD`FVB!Tp|d|{bx-Xv)+HNkX}!=AMC78+bF;w9s8vF?iSz4Yxg%pr|b1* z#j1H%`m^hK0$|j#2|IgJ_5rtT-&$jk?AV`QB}8oo>#m1yu-^N~gzo6i-qW`~AM=oB z&-aiw1sIwpE*6W6i;MYu{^gfnwj?INd!G%%O%p?*L~SU67CNJr-@No)Fyj_mBbfEL z{?^@3R)e+UciJq!j)WFTfh9g%0}*^J0L8U#Nq zs3;}}`$zX5+&wxz9^V=7?Hvq8<>}c|1Xm@gnpihx8i@Cls#L;MML9;Ks3z>m2XY)o zPPlI7i>kW3IG;~17V}GKYMswWl4*n~%s5AGR>>AO1`!jO$Wg|)Qmhcd-ei1dZ_ha= z8civ%({}13o9l=O>deHzYB{8^Fif+3m=#nCP-KFw0iMGfrr@cizsp6d|dr3x#$~q1ryebSq;ot}6N^_3Nff1Q! za!|*VQ>de`Ffa=sXO5XcM8=LXU6P^Msfj@jWFFnMF(0JFxkZW&rzT@`6fF=kJlWE? z4QQ=U;N@5>b0T)$V(g(U25zU=U@JHf*q3p!s{MP$Oel3es>~_-5{7 z<(tas>0bIx;Vzo$Wd7opc=>Bo&(TcDYJ&jAFh}ByK|;n1lIs~2t@Mp~s%9hrk!6FE z0YFk=W`e*JB&Jx*E~kXJ!c62avRv&+TF>Fnf1 zeSW6XOIxTH8x{g93GZOhxdo$QSe4& zbwkx6s?p`;?CWozKY8-x#fz79Y|0SI!MI-doEKRIl=HGNbfk-vwGVC)WnQh=4E?U?z%?z zPP&$t#$A2d(=Stb^TJSr8G~|CbrmIzhL{YEbIyAU0p1f66FFki*3hV32EwiySMIlH zZ$S(PSZ8fFA~H3!sVmuW;NZ=hhv)b~rxV``aJ?)h~bXn_vCnr=NWE z_~77RG#WYQM3mYT>>9j_&BBv^|IwpHM9k?|U!7mhViF-z$$PLVjJun^F%vmam6Wn& z9YA(XV3w7&o`|6Y11W1Zrsj3zK*pfMy9b|s{P@#PKR&*Dn6Geons0@$I%f+dMtdvn z^{Q!mr~<_7nUQmb09bCMMBD(g2rfK_Q8Y4j$@!?xS>Yfsux0Ns%|{dgXmdU699e1| z-MYNFy}LJO6ZrbvVImk4h)fwUV*+V=L)LCax0gaN8K7j@JbiVV?3DgZ^(H2YtGW!e z0c^7VwF!}L;y+mRLu>4Rr9OB?-@G2L+tj~y;#a)~R_iOfpSSI5?fRz9CAxDN=y{y} zR;xo4T#m=6Tx@{Bz*{nCY#b~wsEO>zk^ZL--~WqGKlzIveEPrt-~aaSUp{>~Yfh(i zie?J#oO{eU=gHWPA3b&lkB)!v<2#?eKcmJFt>n2Z7zE1814f+lWVe%#^2{M4>H)eg z@0Wzt>{7t8gF!~Uv+}wH?YRm5**ir*y|2^iyS;+5vfSYSE%W%s*2*;;cqje$YW;h4 zzE0o7miFfFtT8NmMQod&%afh3c_7@R{C*94<=+~wzKQgoyvcoa6T3hMb1fP3J=wP2 zJH)9AGq%NmeJ%d8_HZ8`=;NQ8t3H>o(VzX2H+hX~`07ohD`ADYTr0FOKY?y%qgT~u ziGMEpe{oD-#1FwPa@2*E5_x?`GpB)4E&r{w8N9wyQe{Su4%d&)H0ceiz z3=^oBszD&hR7J@M2)WzalxraAE_{C+!_lghyng*MF{Nx#0I)-=c_+7)D?RzfJN6B_ zblvi$?eD8g%!E|+HN~Xti{81{R(b<5C6_}h6E}Mbxec8d1p{AJeMJS|9d~Uvp2ba z|NgxP_d{^g#r*POcJ};4WRB#aWQ{-_yF$$xk5mw;sfjp+MIsBNq3~u5BNMF_v+2dz z<;8ibX3$8I3^h~$a}ZJyF-@^aMr6dEy>moh5Rn3hhlhK24({H6aOdC%6rw}2H;HQGy_Q0Jb~0e5F;20C35hF7{F}IFb7p==?iG1CJ-C3l`tQt)hqs3yss>f0GBFggywNf1|CMQZt1JD3mBzSWS zE)WzxzyU;{p@fm5Bo53B_QamJP-f>!V?wt2GiP(Yu?1gb4*(-2wk73Ii2znJC1zu@ z)@#alL6loKBBAZ(ZgDIvRo!y&W*Or*Gmq^0JrfijyL|U;X zj*XK##058Jp}KI@rE6wBy}Wnlg6;f#{;WCwMRWdzp#eqqPDC6r0jkLi1oDJrH*(Ls zBBnr&gxdG{A#$z_NeaLRHZzS8q50Q;{V%`y;^#m7;Saz6{qNnsfB*1se=?aYNs3E) zXw#&oX)dQ{vy1byv$Gd3Ui{`aUw-+;ucy;#2#!orid9vo6diF{1QCf*2!Y@=E5&U% zbYa%Q(Lk^l=;KHD;ipI6|7id5{i6>b9Zp8|pdbo9QF6|6Fml2s0qTJOawK1 z)%fO{=H==6%V&%8OG;XL1cn1NX3G(~5EuiHH+2;TPp$ZEy|{e2peh~}cyu^=uzzPV z9L*}5V|d{v)!>-N4+gS7;v-icDUHbw2BYC%G$c<75u#`aqk%Ug5=S!d{$NtvJ={OM zQyw43JCjfhOTbbj5u44L*`oUL%io?|T%Mg>EUJchFdB|TDP64j{k^qa4z^ZCW}ypD+(t_=AsvzU!rIlu;)nMjH;_8H7KkzDy) z?fgmJAX03I$T?!>wk;-RHk-}7_eD|U^VECarq;e?Kj$7}cHO^n6|^&0vU4t{9Cl8< z_!#R=XZ$~)#26b%&V_O`bfBhbpj!CQMES|jemPq#5a{#IK4tGxN)D_kK@!=28bT<`lGy{AGfA81-f%FTPQf@nx)X};RaG@#Oo`~_={d5&jE!~a zJ_mv2@B>T9kymnm=CNxXPXV(WC3@vtm?tkALgDV+yZ6b*A3uEXU|0?unQ2O?o%A=n z=bM>xFoOuptaIFKN$z=xIhTWeLj)?Q7cd5x7Ink(%1TynS(Mr=+DJS=MrpGb^IGEJ zO;hNrYIsFjsD2%m%ooG#{A|YA`%MAMF1+ll=h*Qk;l{Th^lAs|?~oXL!nk&P>h0^K z$6-+ViBR&|42%bX(A14og%dIZHIP_{%@H4?p|(!wa$Jm-A=OPgTfNEhSiV z&J`sWgM!1z!cfNd>Ag?B;k|!5t)ia;dl#1rKbqv^3`W#$;;g&S{MJQxX^j2j>ERp7 zA4KoIi7ee3-pM<8C-3B)yc2w9w1eNj>@)x`6}*1eP7w{ix+r^;gh}c)BYM>W=k=HY)>NouAz!y>@{Cu)x=kf0(L~vZ>}2iYbyQLCJ)2@IYcEi0BIaZN0b&P~Os?0cg3}E5HA4 zymqbkWo*^%4YqTr4WI4U9>ug)| z5L`O!=XtoCZ&&8$u9drOeLs^mOO1R`2e4Kjd7lu;fwQ?u2dHqM~ld~TC!_2*B2 zwr_9mDt8_&r`fLkfdO>Q%Cl|b*64bjm#{igwCLt+e>f;%3sf0eplL# z4TTg?)tqdvYjB>Xs-9iHhGv$-up8(7kbCXjCEC4Zi|jfth(j(`RV^ENGLIZ9ba-i? zRnFM+5&reTJ7mJ0N4a$)u1Blt>PRrc|hc7) zvI2j%w7Z?3xqvJEv%=L1Q9FEIbHC8i#}O-tpZ> z@7+H-IQ;N~_jBb_J&%=$Bu^0zfr}(65dmJnb<~)|D1TN_F7D{rks<_wGM@^nNiI zmBUd|%;puR=sZzQ!VAreXDAVq=Iz0G%056XFN^^(m{}koz^Osa%o5bRiH9(pr{pNd z(u0_>qETjekS7u-M3N+7YmB(`HVobeCI^@#Nhyl=K10q-#t>CAQ8V+N4PavdnYF}a z?ovf(j)Ivo0UC|i8G)Gds%1E^8s&_$YNVD0u$dWqM>(`KnJF8Qb6|(q2zN1{iL<>|4LKnz2o6Mqkd4Yj&`1Q==E=79 z$TC2aV+w4l5-o|DdLm{QlQL0Z^I!`v=V&fbpIW>qY{vB^)i293nWoW}FYv$H1glK=o907*naRP*YBW0#1GL4l!7Re+ftL@|#zJw1Q^ zGM=96v*)g^TuggP4sa2z%MBq$O2!ll=Z49`qK;qH{C~~$H#3rXQAD{{knSH32KO58 zbsT0W=X@{=2eG&t{QaRjHY%CDFN#nG7oa3WaL$~Qaaou)PGoObJiK@C;lqcA`(Y5^ z{J@vy396V?`t7&RpFDkba(Z@lIu#Ji0VRy18W6lkonnqPZvb)dSl)GW_N*5F&Btc; z=~#|+_xaWPWOtG$Gb_r_GTh9%>v29fTsGJ*7K<38h-9*&slXUUqSob)ciy`cm*-2n zn-IZ!FUCgTPTvGzY5-yropYW8Gm(<2sFKo>Tu(`)s;cvg>B;%obUr)3oaK95@THO_ zF+d1_#@_T_opHM^1|qg;EH|^wkkQ#A%7u2rRT$LT>kScsjSwYCrBzdh5Q?G*&O7d( zv$-EuDIQi!k%-ze*ZRl)vhw}=Xa27D>^&d&qm)vNbsm&#nIIw&A?nyUSv$zrD%akM zcj&+U`)9WYZks>b#0+5O!W96=7{!=~h>Pj0jm}+c<*g{d%bySsXP`8#ro>EHPb!hD#PNvLeDFW=A6ElED zeen3b&%gh@4~38bI0xz94O>pNt&gh&ZRF=w`5EV7U^Ps?K(O7BDo+-?z@O z-p^d-1|G7_7~g{l+KW<`f?mXaN+2v z{QU0wtW0XqWZIAtky0?CGTP`I{^k56mHhpK{b2aIn%*tOQ;m%wgrY1>3_7V+m@Mqcj=p}7m*Tm^I=0P zY#-aemzL9FqqZBemg95dkGt^RH9W2Lf7&hvWWSHLyrmv@9Ui#E>#jV%Wj@<#hg^bv z%inj67gGUj=}+o?cm3xs7UQPq)%xtX&vdWMcxnG!yB>cdtn}ZT$Xb8)YPD-W$>sO= ztJUn^t6l(z`?Mn4i1wZQ5b)*tWh1SMOu5 z-i2;4Ke4giUv=N>J-Mqt`;y12#p|xzKbQT}+qW|&vweKG)W5yUZQNtmpX{C2H`kQ& zH?NCxuxyci21DB!4AdQ>*Spw3?Z>N*J?St|$&y;Pf5UxUQTVK9AlS zTz=4dzFSCLtKTtzZzuGQTKZj*YnH(~xs|jUetUd&DmP4*uHR5o0n|(xy0rcR=r-|; zn77z_XHT+iA$`8f!rkd8FwUm}n<`ef#^r-+p=;jBAG7?C?j%HiU=RHm;}U+o0x`5( z%9>5uo;-OnpU=^0=~c_MezBSJPHWb_X_EC((yktJ!GD9}Wn3Qq)L z!>}mt-aY!{gU25{ethrvXgnBBXBVo9Y&2JeC4v$(Rg0vg$wR?#j=VY|N=>YlH4Mn9 zODV~sYG&19Hvi`7`C>kuU7lBqsm2DDAdQ&-W|C4;XabBu#5p@Pk_v#b98C82@7{lK z@4>_U!=v%ugowaiLC(3ND4M28NhB(Ac*#7`jEObh8{1&Q<^UrT0vkdiH7b%sfQYiW zoH0R^Rf;n7dG$ zQweHivO;x`Qqf3(@gQo5=A&vd6-6>tbC*>k7Svc3T6={z1R-zgL5|?f4M1$C%?NXeMgf2rIm*Ke$0V$(w13^GzpCK>^l2{DnE&#?sOvV`wY5g#7V5bXF#lF0gs_ANQ%Wrf-np`1N1WYH zbEuEbjjRt%(kcqbE!S_(wCx;u@0X*~T7Q9DpKM~^dWm@Z`hFWxa9%Y<;eFxei|S{; z{8cjj{Il;rx_=M8%vfqw&+A6ZvK&t)9~Ga#TuSNUV!F3C3L%JynRw?kiE}OlCkA%J zgW|#cy8xP|`TE;u-#q&^HsV4keMl)Lk^RXeDMU1-w7iK?XMk62XL1O^dmkKKo_*^* zI~U9>HqmZ)ryB2?c*mN8$n_epC5&LAu}|GxYQ;v6NIdSCw&knfE4#H`LR zT7>$<>Qbr_7QiYvDh|BWV&0ILWI#$tU?WEW2x*|oq8dJ9#JXbGepZl8a`S`N!{;kP-@s5jGF-_`8*WXKpjD4Qjqt+Sq5CcP0mB3?%h@+$V* zo6}$Qx88rQjvIiuM?DXS%`M-UA!&RPyZje&wcOH-k;Y_rR&<;hfVYE-i77o z)){k`NMbe&i%8Qni^Za@>!(kiEf$OUd@dq6*r1uIYR3#%La|--`Z;*krH{<^eox4~ zal3)bj=Iu&OK+z2c2Rb2SwmI^nA8C%i*nJ_G0li<7`*dAw2@d%hI@zmcRqal_~Va1 zeE+@o?u_>cnoFoUcvIvQW3oCnp`k&L;h-1}3eV2in4lTQahpViDua^s0@{%mbbx(TIwOkd(|ywV~J`rlOI8+(=NWl>(QP zl2}v`gYL7KB|%C^f+!^75`1h-D5yDwQ*&w#N@9i7FF+-7wC6d)d8 zm;)2oRch6^3n|I$$S=FYH-M|#=pPB3&1l}Q9%uX zjfspPIox@-x_9k${ZHEHAZ9R_njirloH5;YlQIIdBW{^liqq^=Zf2^fu55a_%3HZ9 zalxvhYRm*?GgWCs8fJzW88b<{qrw35C=yhpVc3w9DE1ilhWN*SIQ*af;jjMlUw?1l z>o~tCT`GO3C2=UD8L4=10ap+THEt4Qj*CnC_GJ3}#o}ZdFK1FUnm|O#C_sVDM-adY zArEotCslFqLfjX1^X0UDv5==sKjHDI4Tdzi<4lI7RN^i_wF9QclUUI7zP0ag8@-oT;TLFK7ao5*|Qg?C+E}o zysn}syLq^onF@6n%6F?3r-YqHAh#Fp16 zF~-=4h)kzb>!jOu@~NV$BW#<`yS1BU_j@MInm4l?DM33bld47)s1iA1HXxbK=hbvE zKR-V|yEvcEVilW|lBkAIT4(j`NQJz9#k!&Jie7MCs^Hy{b9TZZ@3ESL2#E@qRTI4T zAs__KSz4`kyJ)+e$OzVD`n+ZBiP`yLs9sa3nx<)*CZ#quiK)S|V+)A-H#Q}LsYAZW zbv*C2JBVG!V7sP9oE>BhnYq~A1$KNd5Isu&gCmxE!x zRy}gT1}dhrQAGSHJnf5x)86S=H1z z<3Zv0;^LyK7JFtFJd@9%hRjTjL_{Su2N5APZ7~xiHqtgAv`Hp(0^ppz0oL8~*Yx*Sk2L|rLM)(2WCSJV9DJn9 z5P|mgn^#$Pcv)A2_9C+y$91a2QeSA(+naVsh2|IZ@6qTAMVBqPbpiug?kdATZQzm3 z)@**%n_YcuWJ7=N@TJ~gZ_D6m<<|P(a#h|4;=C=xW{DBy!g~tHs>tOoZD3;sHyoy6 z_>3zOv80Qp`LsL~T?~Bb*n*JQe57DjSm&XoEd$9XIAN(ZCwW`E|{xapmawb*r91G|kP$ZyIPgwxE9>L9rH8MoA3OGw-Sh2F#S8alvNq4R&G`(t z2z9G5@XEp;__@=noq8OwdVQvoO)M@W;*R7?yiIrx<;oS0b@5!Fn; zGf_*SpsLpC^y2d3Y-TM#r_V$Po<2gb!{w z8WCV*o>W0(nyg{X`lSLL*^`u7hnsAEfUWYnlLJ7+FaW-F5z0hIWnyRKKuQ#0WJn5y zGN1;7Fjx(wWDp`F5<|>}sQj*Mm&)`+Yl9Oq3`)#UWk&{6Cd(v|oTC7gfn`a?i73J= zkvbwapTI&M>@x{iC^S^m!e*t?zz~EAb!==(C?=&?N=hm$1~FFkhN6zD7Q|T1iNcfx zrdrf>We7$l5HpLW3Q=*P@N!BKnF$f1L}qd9 z*@2h=W%fkI>{XLxhOZG(4ysL-1esNAIbE@-B~@GXa8Cy@m=CZR9qJ@a2^EM6+U;qB`dwT^<=V#AUn$f{tQ3i=fQWMC-#?FnMBT>{1=CywN+jMa`dwEu$pUX6P zv0zLFV{i`JnxG03f`!DxG#Fpd_}ixVqOzY&`O7N2Na2MazbFr97#e|~p7;gbec>K7 zt_X!wrsM`S4b_i90{|*D)C`d<21mnDI6T~caPMgUVDkRM_ktr2_6!FY;qt=HriVQ2(a^mfpaOg!D6lRi*)a>09Fh)5lqs;R$v z_SL+urqk(Su}FylIOn`~IdV_CQFjd_qg@W!w>>;>dtb_tLi+cg{Ih9l>BM{QoXg=- z`*2CWZf-}=vR(DbWZ#^FIdI5iR#j~c_Gp7Y10Z4p4AgDfxKi8SU2>#^*OOAV8 z7K4D@A#0Jhh_1bFTZ;7?t_!JQcn)QYaZjq&87sl*h-%A3Xl(!;c={zkh#kGz^|+mvf{@!%#SHA_O?+RF~1D zS2x}(SlH6OzQoOMF2rc#QRTrSVuST(PTpm$OiF2D2oY`3lJ9&bH*w5Jows#a|dp&k#o&m8KNu+7@W z#c*wVS6*hzx4d$^@-N+8<$9%N(>tTz{7pvn=CQ=f&k1cnrJfJ(E$d^O7x8OX z=@!P`TQ2_eCI)0%m5OK5qTRew54h$2_O`5c z^7h%8x2(_V$Xj_iT>JcO$IEv_fX=S84&wK%wnPM^9z`ktyng<3H&Hoz-&5Of8~bPb zjuvEGFQI#AbAIye`cs4?aY||icCFo)2t*uXoX_Xe>GbmQ^6c#F;^JblScKpJI1d13 zA}WNy?7NVgo9|lA&*gZnZ!bN79so$XStKAq$4A^Ln>nt!Jm||Gy z`Q=g*2ZN$4iWnC$UXIH0qYoZEdU)@%k3QKOkH+Jn$-J5`L}XBw!{PAq{6Y=vvgub1 zVx|IVBvz`GSW+@`ooP_#^ZD8N$+K^N`{LR2`Ppf8*;v&iQ6d8pkVtFOWR%+N%+ySb zjXZ%^RZKyi_wU{N;G>T}{q)nr!$W3Hq9W2H4Iz*V1seb|B~amA;X~6@Vn~t5BPLCm z0c&m8OsrBevH@h~*g$4*hCUaSJ(_E+HKvB7fOl-l z76K#*X^OT;LRFfe@Xkta1Mi85NC=`Tj7U&2ww1{~TVL8B%vTOwQlSodrmhBJ%50jW zLz6Obk{sWeqM1U}NDK~Y#(*j*84(wjjZD<>TbF1wGWzRb=GujrjF{k{?39gMo}WYj zl0g9x2rLmrBXS_toUo2TMW909oa4d`)qEpP&8r1)APVNVsm>fJ83CkV1C#ScZW5e= z6i$uINZLH&4j2HeW&%^yXsRGJT0|4$BxMvAg+x7bfiz5Yp;UDH%!&i2A^_*$v?~L! zMWzN6ji6XMO|}ls#6kp;nyo1Wli}b&QGIS-Kd|QqMSTYscl2~Dmt#pIg^%pTIc2Zv zta3VM&9*=1gPGHzB|q6KAIJS-@#}MZQ^NyOixtI`P1Yv1+D|r^Rah zU~0}~QmUD(+P zonM}P`IHuw&ZDoiR5*eog`;_bCQ4?aq((}mxT5iU7jFEd=AT_QznIGx(Lc94=fz;^ z$F-kC6b%QbG&MTM(J39PD}#eTggg~vF7}3g6tqYx_2P0c;5&Q6gZ=Tr;rRaDqkDJv z_a}QqRJhhFL~1@gufKl!?KdyZPS2}F)T*kY02Gvg>Lf^F^@* zP!8qNu6)*fMCIGZ^1jsRkG8Tt_J8Itrw9?mD0Lm1CZ;4J(aeg%_t+0h!?7}~$Mt)a zcCMPazuk@9fHq`kQXwMeopY=v^J;c-a&|hsc>40|Bo?EX8RcZ&a5-B!mN0~6LS&|2 z$XYC%SBh=2WUkX+w7ZY>x-L6{C{qp>K`rT-iHKA=I~c`i-mCXM1kJ(HuU5p&%$&cS zzL2j5*$hmat>X-|&K4pjA}MAcHc=QmMK%Vn^!<%@t=+F~r?0U&?JU8|hfR$OuT5i+ z5K3PTVys`DTwGqvW*4*1zxUZ+{zZB3=ols`iFYW6dqg}QO>#7ms;a#A!Fdr0!5Kl4 zF*7+w4uC?euIhum@&4!EfB)gbr%#{$`irlgJo)P7`Gpck6^)HToq6Zry>l**CnaTL zHHE6Na?XH2<(=cbM-Lx={PD*R-+#2Xx0jlDettgL8^st4rlKgE3#tZ#4?(mB2-yqA zsP%QRE(4swjM}6S?Va|P`ZXm+I%^hA{ABxM;=bq1s7r{E3t_W`(b$C{C@NY z3-=(EgnHxzoWPOD;2Iz!T4W(mG6+R;NlM{C;z8ramEEZ(chlhTxeWf>ug?DYtC#=r z{OoyS!~1uSAL97laZwbY7>Jx_bHP&UfQTGLkU+rzBx&d2T1ODv@Va=#YX01?{2Sr}w;iut_$OAM-w6Ngy{?5q-_Ux01>XDn8n2bS z-u%qS9fPpq0cWi+`#G*^$g3{eWT^k{c<=Ro{(sQ&`#yHv@7J#Pc4qc@z)D2al}SW7 z5L}1*0WFb+x_;h1Kl>?H*5nP$&+F&UE%Eu=-cNSoOZ`{%pSgbj%t&c}#=dQP#M`!~ z+!kM5+fGrwn*abH07*naR2%_p*-tiS=~|gRb!PKE|3;;6`u%Pi^1p)&;LXpk>$pwR z`t?q`n}2m0kVZ$=YaMRoAzavmt+G1Gdd0=IV;*990#n zmLe>28`yc3L9bmDtKT{QLbu&bZCmu(-LlK0>ekLROlZUHt!)KL+3u)hnbXlRf-|Nj zSDB7~?6QmT`6t%QSIX}F|4qK-3bo~TDQEKtdn2-IK4jTEXH6+nE}7YTX66j0US3}Q z|Lnc_mmJA)Cit1TM?@Y~C;$bZfkvZ2k(9*Q5q0cpM!P$2-p-Hn-|sa~6qlsf6q}8^ z?mQyG&A$D?BO)WKDhntyNOenXuRC8ND$>Kl{IcsaySTVGK0ZDhXOI=v~{yTpFDs1?D>zr_~PlK z`*-&q92};$Zq^HTk3q{K26(+%sv?N0FhDFLRNURYg(XRh00Tk%zN#9OFo&D9ZTnrAc$5S~JV#07WE(P)0RMkQgk4;B87~Zge-xd>If_8Qm17~r8Z7M2%?A)?Bi~{O^dpSJ}uM=df^j=XpAbf z1d50Xy~DWWcmh$13L%|8xHr7_Q$^|0xg<3Jq(f8%9yG7AKsAbp8^uVaxHCgv6(CFR ze5NiVHKTJ1QsIJ}Q8}ZmB71o<7wCj&-z6j$b8#QaExQy@_GJtpMyXqYh{Pz3ha#~~ z;ueX5DBz0RmEi?7z=awJ?@JOY1YPw8c0gpPWLvfg9h#tfQCo(liOU)*v$};_G*sjr zqROtyK9{DWH*kYN0D8`r9Rw+aMv+|LqSiqW2~twh5>*HyYxQ=ja!}ZVvibA7iG(<1!u$x zSohIJ-*SWSAvt8;fu#?@$pZ+>CVq64VI6=Y1q5djhz9BEXJ;#kla1x&>5``lLeMDE zx&d(C>TdvmHn{-uaDu=6S@>`N@Uy@F`RAWMC__3Et|nz!PD>4CYMlsGHJ!y$lS!Sh zTH}0?j*sg%Z`;!|oUcO5B0+(i-I6BBF;Oup5lw=ZRUN8@l;>goyL0~YMe~a@ezn$j zVYZmuT@`zED3b^nOe=(n8mu~86?ZjMlS&+|K~xGQ)G40C(|k6)cYpr*)O8#mTUpy2 zu5|y(U`nvHw5r#uW&Q5t_~^~i$;F~oOC9o21;I&ov({oPueML_G}i7uIb~2WIB;uIYn}Q%d>hF*EltlmyPa9W?G6&i7sYi817--Bs(3j(IvjAf}Is3r42PjE-aK#}AmY+9A1xcmNm_TwKtKRmqm^vT1QZ{Pj) z_unj*>+^J;)=kSM#uyZZ1}IYUwyoV=1FEW;OslerKmGAf9z1yP=;7n}d@ezorlF@0 zLaLh}I+;|{Y7%3lH%=!vsqe`l7x}O{`s+RXH;>LOI0>kU(2z^>IJ2*s*~8o|B#LGS zuyg`zpQ2wrOw$=cD6^!KL!k+JZ`&R~z=SH)rSldmMn#Tw^KK)1Md)e>d~fMmHRR@{ z`l;xuz96J{?STS^2KTB7@jO-u_O4k?LYj*mLLZtvY8!21$)b!+L~SCXMlpp71RBH@ z7E+ip&RE^|YHm7Ph3Sh`{N@b5{q2iizFGa_>(#H1>LZgjR8uaf)2f)=IjD*V@z&eC zeZ)=Zn@C0oUfrzTdrIu)=hf@~zBKoLUAn<;eB=FBKez76w*r4e=ft0euH(;5_WAD% z?HqT#-XF1xt|Es2H1@Zv{O3o_w`<4o;|BLu_Mh*|{MqdMKp%y0)A;tn=am+IppT-h z{q|3b0KVkpuF`4%&*3*kC<(?o3@IDMwh< z4`@F-ezw}*{fm+7cf|K`OvlwY&8swyD#GS|9U*`}j^lJVTQf@9m=PZ7zS%t!Ba^XKONT;b<6F($Zj&-l0FUwwG{yXd<3O1y8? zT%|44?~OAgoA1Y3Zf6KHxWQ_Hb@+koHXY3$&q&AK=m}SdD81Kbh+*PfdFgC6mdmKz zp`W|PYuwP7C%bB?I?(uic-5gb>fj0PzOtL2*S3Fa$?{6u*@gj#g#4?N2FJCb~>F}a8+o?mEu6s+)dpJ5h`0Yb$xbr@%rfaEt=YP1 z+SZB?G)9uS2E4-IE;MG03tUBmP-2h(@t{#sOLw=_=BdHKt>!97$^=5_E)keeH8B8g zaA$2^CYeSrqpkyE;Ze~R1SAdK+3cq@vmlz`)ftbKJ4G2we zMR1W-p+SO@>XMSR&OjEE;?M|^RFIB9z+IA=Q5>X;1Ms}}Fi4w3f=j15BnU;7S`~9c zWdRex(z$f2+j{MF2_!Aa767~K2u`wFzq$HvKFcI15lk{%$5e&%%zklCZG@<-16oZ< z%oE$yvRT@)!E#=;1-!CUILbtIM5Tn5K?pH%QEGsar3Wz;OQq9wU1*R=oE+}$7uCO< zx4%8DU)BD`0b)s}_Zn5U*8BClDCs0R|6oRZYTkq$0KM&9FWqLWN>yLCwJIE)8*G@* z0fnMVoC0wOa!84q0T?8&v`|7?rKNI!onz zUQVY6PoF-%b1?ht;obXp!enZ}p>Q(_v0CHZ(aBd|fAfcLj?WgWHYr6{jX{Hm1V{)9 zfksk5=Ea^}N8OpF3P;;RVqC01w@D2?;4YjG%;!Sb!i!)CWZBpXva2$slu~lXYL$}b zV4dznL|&P_WZ0j`%zfrH^3r&Yb;s5vAFXuPJ7+L~Hq~|8EEnt3i}UmIi;Kl#y{y;C zWD*=IeIO$NBBNe()V^kZ2n1ShCieK;->F{=XajkVa{z2>#MoT9 zra#xq^8*syJLQPE2{S9oAR61IHSriVBb7By-@RL$p8V#`o6~p4=RbM=<--SerbST( zk_<71P$?ve!s&*@WE4PEM97p99SSXqV%?>-qsP|Eg{oFnIhoAT zdKE$}%QD8O3P_;QQ!6^`buR9bb5r!VLvDD04guUDKC$8RjkAt0u!Xn6#=R9n+$gHs z_mkG=g?6&rH<%aBrJ1uOzl&_Gqi)k??@jisGRtTZh*LCQ_f7%cw5J>FZ}$HB&J$@1 zGxPyc{ia6XhBW}T5jG!XU-~e8P^4Skxemro?RYCc)~)o-t&tjg3pPqnE;S7gLZ{MW zVzCCAfc2zeXkuvIfM;H|?c}Z%hg#NHndBl?CgR9D64X3;m|DEk7I#+R?nxb9FYI-* z{Ke7wm#-JU{QBtYb3etwvfO7mMJQLN?VE5mt%|+!aB@(J0-mTWCwJN$lw(HHja^)r z0wcfgNL$@y|GX_f-)j%VhuH&n(8j(bTl?P5&fZdgzxDiluf0yT+JApP<%8z`ZSB>& z=(hIHT{S_!{d#|oz4ueumu_ocy`?>QJnkDD@C`J!hm86;=H~~TN9Zy==W;Gw9c$I*c0eN@1?#@zU05t>Ho=SXGG@* z{5D4k^m;2XnlgD@I*BG9BHe83uH15>C`O{M_pX1rPXD^CK>AUn*;WX^-BW57i^b8= z(fRrLo42prJv(|cpvT=UaWbviwoS=J7&NMCN~vwzvb-Tc=O!jyH*k5eyL5pC3Q*y` zY3d_+BUGW~+g#)7F?SyQVZSqeeQ7~Q>Tmw;B& za_`Q3u~=pI3sopNSs@eMA?BXknx;NKY5wryo3DQR`@#-b~pE0WW1=4oc0 z01Zl2RnY)x;O^cuiOdHF#IsG^vO$yr6D7n&K@}~~p?lSdRwGGc84wL+lr^!2B!R26 z-J})|ge&vrEG|N!1Hu>zdQ-QxwY1h!8It=X%B-pagTPcwsY(K#J#sz_w|Jke*CEnR zk6b`lv+KojHNouu6;XkaP6>cf)S(GNWE^lJC0GB==Lm!Jp#~&DRVtxihYA9^Si%hX z229XqMw=T|fl30jYcr_AlL-wFb?=f)(*jAhL0v)-6mDuEFE2D{36@#w7Pz~MW*n9i zAd|oy4B2Z-t;(SET!+@&1vCe!ni#c}FfB?cOk&%vVygysr<5Y@41(kg0(S^gLugLH ztvU52vt6JBR3Mt!=bc$?5>=4YJ-gD|#?G7McJY6{d2=+gFYoKqy*nr=5(H zqXs~stI!b~a51Cj;<$!-xtJ&(6?>1rc=+($#U406TbFCZ1O?WPHQ1rDl-KMlTYHHD za2=U7yU+muaPy4l1*F4I=g#qYH5xH8VE>407OJ1npT%qECd%}a_*CtUi^Alf3@;|UY5tQe_GwE z%X=sfHO|#0!J7T)v{1P_y|X{t+l$lLox5>1qoifCoJ@-D;>>n53odEO**2Rhf5ds!9i zvp5V5IXaN>75&=t9~7`GLvEfust((`hXE{>>xHtEv(WFJ8TV@$#Er{pweL`}6*NjYaV3q$~h>q9+xGprWcM z0B3@`tArTC+qZA4>9ndUhpbn1V=lt7ET2AodjGI_^yu+=y>1&@uh+}vDi@qCiefsQ z&gb*lY&M-viz0>)>N?d;qBm_@t7=h1OKG_{omPd42;uGmL=EO{W_jQ94wOrPDp7>p z@jDj!a|+%QdHDUVSqc~5*$GwIU@(U5W`Mx zzafd~roM0X>9X_qQa~tW6LLG0``vtAZLUj}t3$xh%{0vO51j4)>h$RiokE9nh-$*o zS*;pUY@MtzE^v;cVJ%90-Vsazc;&6$b&Nc*@L^!zkD>G zh^R{lZ{93wvnDmGrmowjHcM_TouU*7b7g2923K=}YZ>f00~@xu@}4x?--^7~xrWal zXeVtl!~Z}(&=2$j{XjoZPv2$NZ>DIurX4tr*%M^g$R=dBBLZ4rbl*V6E)t=)*hzm& z0kE$;w28LfR9J0RNegNE5FTN3E_`{-F1e{$3FE{cl4c4+7bEhiYws}VoD z=>D8B4?09tjneKBk~UL{6|Sc-4@dK%Q$aU1*tX}Jj`$C%r*V zCF-4Gt8rYzJ15cFgw|+>VsC~K>qBq`^HcY|M+j}^r&7UTK3u-PXGd0*gY)qyPb3Lj$GJh>wykZ0)V%`8j$QbrS-u29mV4wKf(pW+a>EinEL$Jexky z7njY#5M*LAMYF2@UxHHzw};?+{2-rZc<<7k9pcW zw|lw+2pdEZ!RX#$J1BLoOxa}$&IGC=xjT%Ys8Dh?Q9_EYos323=XqZX>eBl<-4vxN zQ~_$n=Bozx9_k`pdA;t1+1Jq8o^1m^f$j6o;#g$KMr~y8RtUMouX#$TGsg=lP_uTq zTpl04J32Z#IXzmfRyi$apBOggH-w<6K`AsqgbtD}0c9xq6`wJsAwxsJfc`v^ZgTe> z8^#v|oEYH0s)W+>Cq;%Z4yE?H_a>T>2GyWLURI}|%udj{uFcyRV+dUwpQ_MwQpO-k zOP-dqY4zEI{rmS0{_B7F&t(-SRSaR}mIS7fC~#Fsu09xJjOJ}JtJfT*pl4Y2!))#MIz5M;Z{NbB#ULPGDtyc}*gPD?|1X7!tR5uW*W>KYDua_pgGvD98 zGmkNXElD?=pP#Q*H2?`k2%(JoK_+BauUbopF;H6fRK=pIDo<^$RoB7TU^yyC!vsKA z+ZCb+l?Eu{Ox!(LlTvEimAjd@bn#-(AY|}vkufj&8o!Gy!5n)C=?d7 z5!6u{fp-8>k^*%RN`OXDVJX%C0WuMh29{c$w<*vL_9j)dX~Z;oDK2biH5@GZETTeW zAhJ7Ys?xb&r1ubKA36#^GwRQ!frv^*3W-vJmxZECu{Cpvt&7>IK;bGPR22xkK+f}* z&3aS@kW77E%5I~`J6|r91gIFYEy-O`_qIWSROkvhdPa>2paQzUD3U@h3N8YTtq@$c zXfjaA#WUcPDs9R@)k2k^cJW)JG3U%Boe))8c5BjWx(S-8meX0BM_Vo1vldPBHnCtE zoI$+;0<3ZmWhjk+TVfI>4@%#l$pk<2CSD{yq5FEfBVW$n{>X=I?WggRANH&maWi5nIWuH zh;a=pCgr*ApCY`o@(=6sU)JIG&B05bt`6@f%*YBXRLWATc{vH;;NIOwMJT6bH7Vk( zsESERDd*FfNL7eOX%6Oho;<$$?CBQ|4i9D(rX@50DZ3;Cop0aytG92z{{73we6^Nk zv)8mtPDcJ6PS0CHp+QMY-qrC{ zg{o%DJSZupx^C*aZX2eQ$QU#l+fGrH>_+a6lKzy;j^V6L5J;2=sB~AlxDWtl7D6bZ zL^9dhGb&Mv6k2m7a%Sl=HO<+@#l>p*+pm6~t8|+KVHU{blGcERK<#oQ7|cCuC7t}h zo)6L=lzF?jN;|5Q^^1P~o3c@#X2zx0g$7~_F zwd>WYK~b#BDwf5hDngb|f&>b(oRi(RIkO08By}V^QNl)D$_kY3Zw<-h?5HKkf46fuC( zt{O#{6f?riS9L0ah`D_8;`L&&{^dXY=5PP%XFq=a^nd=Fzc_vSl7$z_BHFrb6!%FL z@1%~w<9=}epkB9U7w3!R+C^eff!>%$2@>Mo{=we99e9-b#c|BD*&`h1~C{W#)4}v zw|BOkvFYe~c^=%Pg5P>lpRvH*feqe>TkTw;L=p`TzAV-~992)w>o;Ow;@kiy1U; z#Z6J_-n`tO>f?v;FMs^S|MK(y@RL8AAMAA_AcEq-on^wh=0#H7^8xWay#iHnO{NmjixmbIbascIFeHn{{3O zyxdy0)>1@BADJDt&ZzNH8{1Mg zRwLQ6yKcUd!~FtS-hhEYl~fS{!|1(w`{#x~01)C;WLr+(9+cQ#={MPvtv8U3ag)H- z*)%>$WotE!dD6E@07mvtwCnka@pDJ^dDl%=jIC3CY=Io{b7+nvV1vDM#D4(;dVb0^ zH9j$F2OBQsc01dPY@U9NJ$b{=EtU+?L4cs_|B)4@4!Xjw9K7aFpqpyF95>F$;sDgI z=jT?f?$KHA-TdiireJ$NyfQ!i`u7sO{{C&m=ZO6J@nyEFU*Ttev~Jmx0pv0nnJ(G1 zM|{}WmxhSu(O(ju}%&Yp@)%-gpKU9N!TX+>D)bg#Nm-WdFOf$qx(l^8FtO* zF~WPy(6L=~wEuMH=~(*R^6!WUU?T}|yl-sAbf>>VN9U%D=l}5Tvf(F?{Q3YL4da&? z$tQhi>*3J3V#FfjZtnHsU+` zxb$95DXBPlR@u%OH2=VV4k-YxMx+Ps+BpG=_ z0lG3^FL?o$$GtRQ>&`G^DSlI1@m&dE&tyeQYSrxH2_(X>0kczM^B!7rjkN*l>|z5bcqI4)lfFp zy0z{$#QA5HJ164}T1cQO!62%?{`FT!M<*{{ym~IP)65bb7N8=C^guTk z6(OMzw~R7&%XYSWJSf#RGWW)Rko7<53}op__9~U$m6+2x4=n_siV)DE&zpMj)2auprB?sBd5sDl0-l@?Iy7RI@kiSdqe{g2ol4DuAb7Gb%0ESlc<)Q zkb86f{og$KPe1?ifB&n)2m7{HF0i^#oKHfap>8}Dvno_mt)@;~tZ;nfN3Y~~bf$Jzu?gd;ad|>~z^AlO{LlC0MNsHyXmC;(ioe%MutUF zL_|Arie$=lLqm@2$;QeY@ML-aG_$r%ZQG_6eSoaqEN1P1jksbsO@ z+-eR6Qj!J|!O7)%1#BDOr~vZ&X49~D^$y4^$5K1drPC1sHPDz(#jrv*8?E{So?GM3xhOj?gZB`MVEI`)<+?eEWg^J=1r5Ki{E$eQ)Sb-~W%O z0lbSgX>9~yb1-g&a*fsU9j|&dANNQ42(-O3fU zgNIwZx+Onv{nq2L8~=FMo8IyPS8HHgZa+&~n~8P1_OJ47d|if?-zU>;xOdrpd^_60 z`DIJT$Ypy?J(a;05A+UQbhn0W57g+l3?kAYoI3B2Wsn_*fUg_`@7C_6S1n(*U~YI0EU)3o<~pU%!2H7!?}&vQCnN(0jkg zU~1`y?;}_Jxc~2GK^MQBV_LC8VcVqX{s`LDpK;`4e#%ER-}!|`--Qs0=CtD8zn2r^ z<@T-nKguaLbbo^+s!nnUfq|==OZ`wk)YBAR1(lYdKZ`?9jgE^1K+f>tdL}mq7_19Z&o&KeQ~xf zilPWQn^cgbY?@}hH?Iy44?lnM=-HFUPoF$|c=%v%K3OeJ^Rvy2G!cm*s;YzPbfbur zA!Orz5~qY!(^!M3#on|!U#yN^zxu<=SHJq_-yWTuy?giW;^G4CAp~XU<8_!r^t3H zbD6r1OWjG`g*$i4zYnF_s)XHN+jJWJ zDpg?1cGac^&EEdOj}IOehh;ojpMGPouv)F!lnAJ1_kJ%CMq85I;zFoIJ^fVV&-8euKHzdI5Dm5ICvgFm5B2V5n!Otuyg25J;G-a0~y zM^pUS6a4MZp8vz&{PoX%{OIm{F{{=U;H?IkRwCZ|s=E0A(e1%n)Qh_i^b9N zFCM3qLI?!iRW)iXY;c5allFuhw`WF(8G8+MY$qXrWE-4EUlluV+Sm6}G_!8dY6SD*|Ue<>y@uy<8`KJ5C~MLFc))i21lR-dgxKB0p?6$kiDg#Y-VG( z%Wz0jLCHoUW+W5(T|ZBit}EPHWQuNS50yNj)e|ITN8MGeJj*CQ(qmt3Ce(62P-guIWGY4S^bhrdkBp19Oybfv#l9nJQ zYB8>(z4nv+xJ(w7l?W?2pi}QLJD$Zvff`|q6GU#+t9o(5c zxPS2U@x32Cd;HTcA3uI1_x2b?DitQc0Mpz!x65$=2VXODHmm+Nv^_sJNYie9 za+v-*amhE*&GygnOnZ;jXt-ZG<)VAhTfXnE{_Ltfd270Hz3;TL?xf55@-P~tbebJH zl;>t27@gWX+r4zI@qPT?MdO#bET>(!-fwG9zGR;te!gq}e2-P<3O{$*lV#NZ59l~= zdH+tj)SteUo%`n};-`!yhi~Ea=;swl5#40$8wI6(SeI{m|9koa;F|fl1tj>$2LQM# zf9{_Dw{8AL`+T?R@d3Rbw3|!zy4&ubH}X?P_k3iaDhHs#R#wZcF}k|Deurp-TK*Hd zfj^l8c$5=h>r4O7JkdAbzwf^Kf2;JV;+wV+sGH9p;-@lo{26U!w~`jI7g zw7%Ro_$^|iYIe#zC~hhrZf9oHtc-%m$u*WuG`g?=nu~@x%d9q%wm#d3xBvnNj7%e06+wzHZx;SQM2KBvX@8YE?C;k_-?xM=}UQ)MwA0efjL^ zlP8}QMInk9V@jS2k?!s7k+NQ|W2i_LMX^{csyla>k`N(k#sua4v29xsp=Qr6L`1tW z>LEVc)2WAs3&}uc9JP`YGpBU5FdcoY14c||zqyKQL5XC@Ra^rqXF-&d6w_v3P!&c5NPr@kil|$ln9wMMQ=k$IPJ#DXm+~=^mxc;Fr|;l~pF6&cKXK!C zs8|#eQ3zaA6^hUTIWwYx&X`^B0tnTiB91O1!nH5)AP|+{^lVx+GrEX4Emf)-G24%I z73(^jFYRoxTGcDpk}@?UV}wK#Fhn3aQqFxm(&@Xjb>L=a$YV;tRb8X$v<_w4RCQaQ zpYxk#`zTI7pA=v2`Dev!Phz1bZGA3vDvBbm;t)im#Hb+I2gr;-s4I z$NfpWZUdU6PSOY@M?#mfPQ?kBia3EpG9W}`v$8qdAvqg*cEHIH4wPR?8hDifVh{>R zhWw@)Adb)reY!bVRS-kY!6I$0{v3r=Och_;#ozzM^uPYiU;X^2&mSM`Rl2-5{(5?+ zD5oK+pmjPUs{LYuRAQO@+Vt1!;v~#gvAEcuF5`Yv-K(p+Dc*^D_l!{(g_wv;%VK{zo0T!yVp_G6xE8fS z!@Yz3FTZ&5>QE;QIVgt! zm@IF|F?cp)t<*KUpkB~tMMFP z7w-c-V~kB|6CIEsl9MJRVzF8-mg|#~lXoY_7Z(@nrUo^XMRLo_rH@n)Z1*Dzx?>M3 zHjm$YZbD3Y+TPgzSmJE&Cg1KbF6{u<6GxO%Qxt_2Run~yMF=6Ph7fYC-{EAzm2tVg zKUdz@EQyF}5D}FSLMRH)0?+V6c2feXnr;ci+o{KOf4+1l-Ha4>sA`a)vCJEnyF0|8 zpqM*}BE+a6+4UosCvZ-7!p@a#?yg;G(=HZj;7Lm36nR5Gvs2glspMdeB&Ldl5Ms>j zdoPCFwpOX4+XVV<6JZC~(V?Jv1f&2IZsHUo5CNhP?GAKR=5~aVBYcL}$tn7CXmA(b zmVMowZy3yYU-a&*0eHH}HGs|a8(#KP=^a}?8LjbuExXEX?L50)d0XrmTKJ%s8u}m- zU|oKc(CzgWM59?DDZo{j=q;H-QHO95%a?Urgjs|AH)ruT-<*a4>*vkt&OOquJ zysC!P@ZYD8N z-3(9~R4^5&%AY@da&Weo#?#lwXBX>~+(gQ9S|(dlaCvGG24*L47rxIS1YzfTAC1VE zOE-_p)z8~eKhHl@U%R=TKfV3o`);4Sng8D%yT|v1KGl5ww@TMZao?6XW4qJG{`LpI z!|iB`Z`au0x_iE}^Z&BiHGKJ=4ExUh|B+9?Plx~p0O=|kj@H{&gv*VH)y^JQZ2s8Y zxyuCbA*O+=32B>6%kPOe_yDBW&I+&NIJI3r{($y*wf|!tj^dB5uE{R;A?H}fG_BRYg-_K^0c!|1Oc9yxM#!sos1Ln30hb$=I}bd%C| zrJq-CxiY>oU<7eZgwa;?N*?#pH+SZ>maVup-v6>S0dPf|O+|Fe`PD#n2JzmonH%>H z8LzEc#iJ|ZNS|xQYxFL@>;5bBL6JM#<4ZtR5QP|!ATDYUg90=RnKZY|6ge^DrDtWG zESD4OJiy2--5}S8{d({#4D=zp!FBxycGdjIT>uO!z^2w(R|9*?G`J&9?IZXJKPYBQV|1kE%Ib3wYeOgXlxsk zB3Sa5FW&v%|Ia`E(=UH@baIw})6+8sRgD^8DW#@OO`B3XsS236w`LCW7~}rl{+)xp z$De(6|Nev7Y|qS6YE)b#6h#G~D9Stg@r$R=?j9VPS=+X&bpuOInmarogb*Z0x3q1W z9fl-TqH2a@NS>eBYn1DejJTgYBLa41lHu5&r^dW(tZmKc^gNM-PNAeX0g*fjsi0dOfe=utn1|NgoJJZQIqfwC zLpo>?LD|*+7IY}m(H<2#w0GVO1b|7?FPuyAYCbo&41riE`0+acLwI?aPY?m)|@v^OttbIP4JgxTcRWc2+XfJ}S z6`tW{t{wTM1Hvq-N5s0=Fnal#XUM&$? ze0CRq`5gc7AHVp!pMLR^hxhMKn|U}6(!?3ckeF&~YH4dlK!^whP8N2&ym)ieoSYWR z_0(CB2uNM7(>!rKBl9gtip4U{&Sn3^@4T_;>snvce3kSY-CLA%FXmS5r8uwSUL#ej zRe>2qN-d^EI4G;VDo#UDXgj$Zk}XQD9~|C$_UzdgPd~qR=b$LU{+>n!2}@l~)~0Qi z>-y!(i?fTx$;rv$Vp+Fz6AHm-osT7nsIblBNf5ZchGkFJpYQ#8*=RbdYHn@@AcRfY ze`hdDZOfd)pl#bWSxTNA!=Mc3HM8sMMq*!)Yh)s6hJSi)6H0;65wwVvh&XIr*URN{ zwQf$&m*FMcWwIZoS%;|sIwsiqveeK;m`=l2~v#jL=z>O1Sn>I+V;TXMQ7rUa5 zZ1^c7gwPH8<}L5vAt2@eRzVo`kO0kBxh`!;p$uhF6lLiVF-Xn?EW?}9N%DQAxULSU zXY~kxsKz4XWXSF*7hpCs_byXXN{*d1x^kCy>F?L;J7fR7i07en5qHvB(GUv_E_5qm zp$Z}ZL9_%wViR|FMXp1CS_8;cEC|pgrDk-`*bThZACX>4-ywdANC+XsoHoNC1oMU} zBZWxNCEOqRRJZy`Uh{}87CS^ceF22#+#b1_unY_T;R892d>FMuYEPnMbC%^i-eQ_F={=mxnO*KstVnJ43#pZCn z|Lob}mrw6M|MJPbyR*+8%CXLobJ4@t2urMoI7 z6(;xQ^SHlP9{v8!yVLWf2~d{FElVGi9QZ*X7atMIU_;3Dr`)?3#ocs`y)IoDuY7&i zd2ut@Xy#BD;vdmpvl zuS)*A7&_Xwcj?QdZtNbLvyxpb=J?dUhPKZva_bcPNPF^Ceva&2TU`C9{jIB(+6xAo zt>i-xoY%-pm+cSN_!q{uz8meC9e?62@4t~4F0aRNP1aA&PoV4W_5PGgZ?bD%jc9v5 zxHE)H$mXGqo7ek?-+zn#0KLXNK95F)7q@@=At>al=lfV3ym?poHv4DKpN#?ZCVuwz zI{iR<-R}NewQo0@uUoU|W6mQYZSYQGZ`YP*YF9fSvOoWE>8cy}k4>K*0X+ULoAA-@ zLcWUY^uZtKyFj;%+}uUm_iw(dewy~b?=+4q%hX92@3|kB?(dTCjN{q+wYFht{^Aa} zYXh>YI|hIb%Q=QTEA9O+tY5w#oAdThO#eT7Z`LEpk)#QJBC2Zcab@JmB$>R)I(xdO zr?KeXc^&NWw*Pep3oNit3+%&UfyFdtG3f4@uIeJISVc0AxINs>R7JjhP&0S)aQ9$l zGFewsKtwv-&D7LHMMdQn-xe;(ed4(UqG%tV@XjP z*<-u**SGDvKZ;%X2ARXUDF22B|E}{HzQJxjybFd5o3(pIwy5>X=hlBme*wUawGnJJ zkuT>)vg^95%j=VqlNT>uTwY#wUFYrrllr@vq2@T!mgNVQ55w>n%23zu7W}WD9b3b1 zZ^6%aSJtwHL-@<`Jy}^Tr8;Sh5W++>3Sy8H5F}Y?uV?c~3iplAcU;N82 zzxeX2ub-cuUv(`_YhH_#;-%!$Wfl`)(ljtyDP|>#PWSfi9p8E9op&C+_2B-4$A^c9 zH3h1!LQEm0w8Yrq;o-r-k-N8Tdp&Q@XV*15x0H?y?i%|3m#p@7k}6oPzNjsK9q3^T zO;!7^h)>cqS?Q!}g}GzV$~~2&LxzLMYX%#kMim5Q5JX25#Dwfj#Y2#JK#Y3)lt`XamrdiBb&NwWGlaI-CZA1tMgCSJ3cR0f%FVFNKhn72!a@*sR>vh3ds&oZSZVW-#n`Am4?1igu6qPstG_%`Uh3X zq%Lmm#XL_XVK2lKk1T$3a@Cm3I+t7)UT8zRXp-<9&C;qrZ2d(fWOEjS3STKR#9ESG}j~`97`b&805C)+lLl=zZO*x!&n4Y!r<>lfRCzroI z>%M7m2^7h#t3gyIQAuTh8cSPTSJhDnKwRLgiM@vE3|M*%M)Rm2b>sj5AOJ~3K~(jX z=1U?VD>?`rk-h6cDKK%61%O~wa~wibNCcfFUzPy8e~h>8;qU(P_$MDf`m4{LymNnl z>TU2#fKcvFK{Hy`B$5u%InHN(aXLR;bXW6ycCB5WLM9qfGK4B90vqg0RJPDor``14 zi?a8-Zu;9CzA5p!?VYnZ3Dd=$x3A)!hh#b_al*K7nnWTsrVtNOx-)4GqfUWfEz9-( zJschEKYH}&z4zXG^3HpAjt`>1tZ%qcU(^cc^ZD8N$;rj+>GS#3tewy2W^@F1xRcD) zz5wmrML|@8yxF6c4nK*ZYU|7SuMhPSn0*P@OdYs=ahLMRk_XnmDiJ`fFyYyA&ZSsNX>T$e z2`xPaZh3^PNysY*T2lvQe7mad@9(?2d5sZhODUxkcMtJa2k?&f+SKE=UP&;ds8A~` zW?~iJAMhP^#9eyFtIGN7a(n;PYmD=zV4EIs+kAGB+&Ex#d2g*3 zbbBX&^)b~b0aAN)3tU+1oS^3mh=z%U&;>npwhR4lUzHcXUHtMl=U<<800u$%zUSRu zE61GNWwTeP%_L3_!dnjy-hcbfCm+4_@%#55KahLJ+61HkRUr3TMHA5|EEl&d?yey! z5JD4T20irjr*xP`p_#OuA5HY&SoWIxNyBgC>DlFc-d;=arAN~T`H(eMc9r>C_tk9- zbm`~2fu&t!vP&O)RjS%_mAx@Kuk-ny$@~wskKPpQ!aqhw@Y?r(+OPY)!<(Y#KUY}W zrz3XrUGVc=#Qs-3kA8p(iYTUUkIHXN;qwUINyx+{j(q9A_)wkjRU&YTi8oAF1+>B7;#`Q0c&(XcB9s?ZZ0e?41a7$0n&4`%M zWY+Mryk6Eb^LAZ->qLfr607~Zvu1to?UNelzB0rw%L*A)h|YZ%}15~Jupjz5pyWlMzMm=JZx^-B=!WCXilm`~3@2^zFoCA_v9 zqV1r@K89{R7Ed6Oz)E#W*ua`)MDv5R@ygs|a}Fbn?Z}C*OE{3tM!f&GAZ#n1zjZ!! z%rPh5h{f)osw>RA42VMjF^Ki`*!mHD$kHDB3F`SGugO1aKcqf^U|09qt^D&wPrLQ` z-+apLQ1Mdb4+z8R?p)3`T1-%J3GBN zJ3G6+UgVrvo3)5iAR0+#tIk3|!dhgyjL31bo5+?hiZ%M&)WJqj&jnqQ9~nfn?^j0w zR2)j}?dE+1Vm}iFJai&ZD1=H2L7Jc`V%khgw@9IR^3LNQ|LEgSKmFvrC-2<7cX)Ai zp-Pc9sf7jxG0QnqRRQlEEh37D0KhsYoDPjm6b)ThPERi{XR~i!oc-f}{l!20<3FEW z&O@Ap$v*RZKEIC5q$|ZrE~Sv7ec@4*+yOY4?mf7F_wl2*9zS|;@7}$`!-Ktpy8zrv z5JimcZn=m^jIrxFGfOduh#6FxrfEWxx~^;6oO4SW-HU@{(f|=-pnC}H6R<=yW)Tqv zk-BI-{j2IyQDEP5vDTP02*M<)G6l)zR#@ohGbyFkt`rI=u5c984`@eoP3VyL&)z6%`=@rO$K_7tc`3i(*Zbrio1oF-X)XHK!F? zbBNcut}a7a1ZBC7guO00t2i5iOyK*;%ZJnwg0!B%0KIt2)R7 zfi>M33PP#YkWP2NB-k{h5W@r@!@|PVLS_rUURYP!;#OQmqt*S@?`vJY z!swjsce)D%M$|n001bl37+XdcWzlRtpZleEFA5(Y9Xv_$L6`!as3Ionq%~a3dD*hW z>2J=izc`zJz3{IWd}^2>hO{p^5rmkCxFD#6XpJ!Bg}b@C8A_F?1XL8W{(qLDBEV(& za06>*oFf1tRT>i#1_!(#SnVIlNnJI<9L`{1?}SV-H^G_Zz~tk%<-h;SyMO)T_db39 z`0k+`A4wA~Q^OEFd+ypU6^Jov6p3g%oL^sjbvk=-$$1GKgV{tG0Mv%s4gv+p1R@Yp zr_-4=m)L*4*ne6kzg_Hqm8UOo_c9)~&Ea)CDtiyRu;+k<#E>*KDMnSD#WCCop}mBIZSBO|F8{cL6p>IHp}Lo@D>>)3Who_> z&ddg{l?X!ZvODYx2ZrplI`GgaVbfN{L1^w<7|Q~1N38C=O5YSIWa)A#^Q-Im`T6PD z+1bVHqHSAeASo_@f+3%$6dpri5Ks}4YDZ3WrKQq*`3+X&NHI_+K#HhbFjl8>+U z?AmBs<@p=eSGNj1&W9Yq=y#sy~i`Kt5grtG)hOVpipKINW5JK%^Pf^HDSK|8j z_1N~|xqV!1?{N_!JvB8CIK&w1*{a%_*~_)axrtBK2szo+O>KowGYctbs4=^>t%8Vm zb*WWV=teKD4nTBGmKx>3lU9WyK_CmO2eXE}tCmhdp2aDp@82L1 zhze)*_M(rHBtSxY=de(ues&q6e(J)B4DmsI?r&emVY!CtD`jOZBZ^$5|L)4s-vOIF z0ypggYxMkz`+b$0C2P9;_Pry$^u_mRi!cu8$O(hzI8XLe5p^LUCxZTAojI7L_w(q;Mq$@_2sL+yersXgw_6>(&ec% zR218=f{yE!y{ZLc+yi*C`)^O5|yK3cpzq?FK!+;(XRH`G)Mh zTY7@ladz2J*YLSZUtYOzTt@cBrS8o2Q+s1RH>>@P^M*0HMTSZ1z+#Jc&lvuTkTx+LOok=GCoh=MmShe?|M}>N9T+c7q<|)yLn?Ke>+2 zG2CviyWO7uGBCPwXAkuo_{2-T?;r`>2n85((T&Nx3VnXxuzVfGhm51ql2A zKfs?Ktom7wzN`O;h*Tq1uM$z5kV5*1lPY{!Gq&1fe2C>D=yH2~vp-Gf15;iD>e0yz zOnV=He~5l3kKOA52e;w6C-~0+2G2_mw`X#^9_$q5|3L7@=ksa?rqw)pKOO*guXTf~ zAMx|gKfk`dzPh~bx~`hh0l2eR7eWXj03gKOdol6$=e*+kz8-#Vze!R1uvSl}D`Y%kt%^CRr-K{iq|Dt$I;~?l_XjPG^%Rqf=F9B7_(b1=&z((2ZYEl zz=A}D!l9BNAR`z|k}*b^2$Hg`uHVEE&^fcizzh_ys}rC|P=Tlk4WyUMl2T)Z*~+3= z44j%xEKQQ^PbUHDaFyZ=fa;n9qc>rQ_SQsHt+Y31tJM0IZYe2ArJF;L0fja}sErmP zil`SiF_3}?UDT?6gUMJ>&)l0Q$nucVm&kw_lXQ^iJ|w`wD2iG!GpGo)`Xw1e;0%IL z(CG5SU#$;@e%|ixUW{Z2K}Cu?Tq&*!DqXukHRgxMdy9$Q1kqFPp#+5+bq`(aqbgD}r!*e0=ZTv_C;O^frZyE@|ZrK;?2WB#D|?*LCyxe6gq; z&`?>x;AmXNxyvg3R7Juq9Vy1JbZ|QQm#Fk_Ap7W-(B}E+>G?O$o}HeaF1l8PAw^-| zf!2X+=I+oinM~^Zt?ulh52QlA_mrqV5cDOud-2b;FH<3Arm8_yb;&wFvg^7KLLYz8 zhikkJW=bilDyR}pU+S6cBcgN!A&8k>&)YZl&fB2tx<(~P4Cu=!sF1)kHBHlm5OUWs z=VE!|ui>>3_5TTdOfd0haP1K`6hiXI{U+Sa35bgc1T)IuaH=qCxDvBf5Kq`d> z6D^`7X#y7nC`4S~8dk@s^ghB~zJV{ht~yAB>IU`R`>WnZ2CQz!kcfYySL?UBc>dV* zjz3y>T`ZA86TmaoYuaq>6|IbvL~lyA>%wxCPrkZ7`SQ}+`yLw{TL_(oynh(pdVKWu z+joEb+4~=S@bJC2r3sh{_9igXc7aJmQp5z2AT@@Goh>}3fDnYKdW9V*?!^hMomCJh zN(NBq;&L$6>x}EUG!YN?APvAdA*Rw!1sE|r^IGDDhh=91zx#={e;EzBOX`68b z^zGN{X65l-+^#+(hW6dkah(tcwc>F2K_L%`bjqxn=-YCB4|T)%t* zfFT#{)@}A0aZju3SCQ94q;vmx5sc95CaZUO8Q2l$wPn55=Km5hYmd*J5yu2nSLqu49zS`~f~!N>r#e9&s$eJ$E$$OPRsy*>!~TcRCT>rycpwqs^1M_?aqR@6OiHm3!mH(B3q(q- z$E&K#;;|uwasRiqckr<@cy&6blxi765s5KY=bt&Puo^$zc|BX4oSZy+_Uz)~Vm6x% zQRGUZ6svJ_QnN3Ir$}wZ2e^;;K>wlsvvD5PnxA2FORmx9=&m~c*v(w6#6nUv(n*SH z48hzT@DQ{KA?KXS0zlA7j8P~KN>sBfkm+QSf&`WQ>E7Xf^WXj3fA`@BPd@ta{o|tp zu(-P>aZ2tMs)(uz@47|qI(NjVBGNRC1hic-QH{w>a@T4T8N=*)@%3-N_|>nz_~oyD z{q;A`W>*UrEiT!8(dI?&tQsB#3iZ;_%49N8Vt##1^Miwf+%5L^rhoCXpa0EY|COqC zi^U`*gPEaeqFL{H4~ z+ZmF_WN>@yCmnn^^2Gv?z)Qu!lioNRv)Hpa=01Hi(v#2#=(nY<2I%d>U?)!cq})y}T%qk}tdz4iF;;BJ@syOZa?{QCNLFRor(=b0W~OEZ&Zz6b~j zF`2nV1?nN>fgp@t%-oB`AbW9o)Bw(s+fqC`3ed5zRxelf;YpIjITVr?hZI7fMCpW5 zt-SR_r3eyZl;Qw{WK=1n7lJZ)c6v3fHP|-vH1?U__re%7Vbvl#1XQlbw zBK~d>pO)!qyn7k$%);?Z_gXo!IAPk;upfQ8-yBZ%nh=5^D`cXaH0k(gVv8$u^W&rG zPe1zP=bwH2$p~xLU=e2)LPb zUE6hC*L68(Gjopsw2yS;GUs1)iylXs?~vzf5&kN-=ukd@q^49#vEoz-F#ybMS>*1w zUwwUcadCQnF<&fHRhx->S>!H+KtrLfd`s@A4yQh8b5(CvIQWx$%&fGMZSr2dtiR-? z^-UXLm?OD;mpr+7zVFhnE3U_UYz2d3a+Q2T3cwI1=rd5H<_i`F+`Dd3g`yC`BsCRc zRE;3%)<3sD-j*`SpfxPdvJ@xvaYGI8o&uNXsWrZi0lhhLwbr@aF+ii$JTu)gez zQY=lTdwYBBMHQNrgjBBH*Af|Ltb#Q&PADOWgaIeA^df7OOJ!wA5GcgyqZFQRvEo(2 zuAFTx?qtXQb=`N;hr0Pc-`~8MJ zki&5ch~7|=iU-CN4jp!WcJborth-R%f1F7qZK6H8 zKl$vVdq4j4;rs6%-#e1W4du^Md0)W1>K3);OW8`i2 z$;$Az@0Ts(^QG(|H|>Wv^JRx;_xk&Iy>7FV?(z@}IU6_i<>7th#;!MCt1!1bwYS;Z z>xn$(53;o9?6!w*&nD-Vb7wPCa|O$a6eE1zW>4P2Pox?G<5sS@WV|;%4CCCqN5(Z^ z*6KKJc6A-kXZ#gL^M47b_GDXq9>a2dN3WyUeqQX7->Q7#sIi5kX)j-PeLi)+^yA-t zUI6IxEc;3BJh@hMMFrq2b;_fCv2AS9-2g~0x66%lXO}&Bus`pb&rSJlSI_lb{*J-^ zxr_xjocw`?2?Cf<+X1czb2V% z&stuy_m1(ogBrKVCzW$<-@k7PcJb{SFnaxOTcFo^?vkB;Um3uEB=GI@z5B+OT&h10 z*r9U#0Dsh=qhcJS0~9yHL32{v=niujAO&zZmsbPWQtV~R6aH0Eg|2(MH$30MD)5m8 z3EyLPWcj{h=yyH#_r&)$_6+iyY9=3N{zJjVLxSmp-S65dT7Z>N}=NA_ji^XC&?D})I$YINAZVHRCyC?CR zf~Dp*K)-)4FE1z4=J4=PgqBfCAygGf-4p?;l2c4?J-Yw%pZxUGPd@(e-S-amoBe4+ zFP^*F5mZ?Ann`BIQnEX}XdgU->)C9&e-PqCOmbI1Z_@t3or7;)eD(Cj$*(^D^%r0K z`m1lAU0lwy86g^)Vx%R$Q}=)ADs+()Vh{}>G)YvofEHqkQVn8&3!NHVKnbj!MFj!`p+FV5ns;qLm#s-5r4)l| zYEnbb1hsd%P(*?#;;4=E8e-w7$-H#y?bHC>iKs#miVMU8t2$eA8Z$vJOIHC%RRKhx zQfp5R)@G8s3|_lH*({B+>el;7$fzI+#YqupfJLP+>?JXTT9_L!LW9=CT$ftq(ub1r zPzv0KRH|BmuqJCtNfIG0N&yaHI1Ff;Fw2SOm>aq-n{`%1B`P9Au#$yJ01|~2aoV4G zz2&HYR^LSlWpIiyK=$U+R4>k4r;CgEZ2xf9d^GXq`N`?8zm{*#rZW%iURpp}XzO7A zMglQmBpj+Fi(6nX;5cc87O0Mdkm7y_USP3pGsTDkx{HB?P{=-qTk8tBR7ZOtvUqI| z8K6OoWQJvJl6RdTPdWra1P&&0Fp+=%caQ$^r|zP80Ik{OZO20p5D&u*}ZD zR$!5223pWdSormCp6g}D%Xyl$sjDpwkpxWuP(3PiLkUt;7ol0iyE9HtTRAD|sqKAj z`(JVYg&xhD2iNIN7Y<8kT&C0}#?*xAemat(w&+5Xy@^aGY0@AC_p8%)9^U!z-4EY? z_tBF_j~?EgP8!rAszDHxi&m~?`EoWtJ(*oxTt0hxnv2ipi}}Lb-N3djv+Hc;PH~5$ zy5-!=duw&Ssrt|^k#83d2CqqPHX>O{S^m@;N5lc-oZUU=oO7;`Pj6P`$vLZP<%*;;u}c6D_*J3iQZ{MP+R zOm_|rr;}!3T~~@3r3QlT8fx8sxhdg)H>@-?1&eZ4q5 zo+?l>(^Q0*&2iZpM4Bc>m9wjp$zeE{sx~rjO@e?TAxTIPV%b_NWj2d)(ANu=RcDa8 zn<&-g3josR_==Boz;7+ZAyk2GdOLoA*JHNJK)aWJ4#ZuYF!uIe5D@6z^dNV-xL#Pt z+!7^}97;F8dw>7o-FqLr^Wc;B?tb)Ec>DnOrm~-)?jl*~E-+CdnnDD+o-R_SS$jfL zu&Q(d0C3Tz1-dEJ@#j> zhW`K+#(Mgn5d1)&Zx;S^eH@zy%D*<3%@6Pce0O+l2XK`<#?eC~m-V>U;MyjA8Oiwd zq-OmA7(+0wmBa{OzttXTj603ZNKL_t)Y!|RQ|NuMLw z)vM#B;PuX!s#b19mu%^sJf@$U@4gBo92P6oHKGGfchX3To0&;%{Y&dL*ZxWl_S|K7 zOx2XOM&bDo7c-t`AFH_hv(`&vG}qnO7+>~X_IugB9IN$ppmqX|KpgzL8?ffbt-T|8 zgAuLC7JZZ)hw+EtyH|LZ-TYH96b`ISGr88rwbsn!5^p+c-!)#HR|ORTnXxjwj+SpN zi14-c<2XCE@4-{cu4#|JzT4CA%}YhNugxF8IzGqiHTpu93j8wG{`Qea$bWh0yNUZM zBu(ioW;Hv%wtqDD)d|8?XX4GyJxl()q(di7kcNrr((AL#J?CKN!;)`s6|uWK-Ly}5 z>|NB0`Rwv?_Wb$tlarIntJAh^m)Y0=FzO~n7+9Ta%W2nfyno8b6}Dk49`R9Ll z`uzECzxw*@?4rv?iH_)icP%NZ0)@MadkTKtd7_gelWh zf>Klhn1UE!imtE~)-HyPBN-Ql6fjTBf;NbO1!4k9P2mzTQDH5B93dufGM3VHr7Uu8 zLYOo*ois;;3%sTdMTCBhm-^r^fw5?u&YIcwV-WKjqnJGA$HE3 zs|VQXaH`eL*&nPfHI4y&lBuwdOWmx7vKC+OfIMs3EvmrV&C$7h#wn?K9`451SJ~E^wQaPJjtck>*w#es;a@q0A=Q{Jy$-W~%CPL*91MUPNK@3f& zlQuM0Vef?>KkvfRIln3C1rAQa-P3UAJREn;{hSV&4n$*+)C5T(P9&tgL#3)Vj z6!J78CV%Ihw?6*x-Jg8=$-@V65+DvM$b_OPMBDP@bpGPS*~#ho#rb@8y_nBihq^0t zq6&8_mKQna+#x8<;3i7Cv(UQQFxJ zEEbE}(V&#F^f!y#@T2ZLn>adNS1^+2d+hfiGBmTw4XDXQv)lFc_37Egvlpl5=jZcw z;SL+3!K803uA`PKbtVz$B`#fiuKF@R?ltwVic;HfDNy|9AURJ3MzH9uAsK~Nu za3w+=K79LY_wxTz_ zwgc4#I?BV)K2wJZ6o)&4;N;Bz-@pG)|Mbhx|LWiW?cVg@(~sWie))NqXGsz~CqY+O zsB{DkqK&AFcdQAV^*Pmd4M5ZdT2u2xF$7Kmpwy#utPZd606>tOS*dQ>hU`0HKRM>qBU=J_-2!~*EB^1 z%nJhmb0MVwDoz-fyI|3Z&rZ%yzBz5@i~Dzu-}>ksK=;Lt~5v zbrU!RCNM!!AH27K4p~v_T-gB?HLfNnQhRN?awXagxpk;V_a4HVYx{qRSWC+XT5g|9~fraE5+N~Y)krF^L$q=bG@(R zYuoE~+dr32Tg~L<;kER4Y@A0sdsV)ky?2Sv8{aG$$Z)W~W{yFQ(hVp80u4ow&N?i+{?r3;d6&Q zd5dLxCq73q?dG1UbU51YD}TpeZycE1^4TvvdkpfDt+8+Hl$W;J>vjYcz21J`#3#4U z=Qa1^rVLg=2TaO$<0mgY|KBVB9LpQyhmW<4*LvSw)nT_tNGMPPlQ2i9(BVC0&v1$ z^>1O#Pqk8WRRIbFV1T$d>9@Twwa@JNw(!znJ{$P_v)CN~wxs{|;6Ul4;HkUx-d%LK ztu*xN`W|^ALp;RyyBV>Y?|t9T#RjP?y_IhScG2hN6MjDwTbt>|(1j4{-1;gUVHY39 zuJ4yguH$Ui5jWTo)3Xk$TI&ZkO*5TNNnT!FUS7_geseOL&Ck!zudc3gnb%y;5W=z~ z<0ut!Ii;JATV>eXrn9ZV?p5H%=WkiB0TmRj73>A#heroFw_Ud&8RI0TK3Ag&{^0KM zdrzMH-&YnclFc=0wIjmqX7#b z)g2TPUV4+gD8Yanl^$U(Mi6u=1ZECIf!FjX_Bv`10i`;Xmr));tK*BL*M^MM6QBw9 z=y-3x)mha2DDy>`cV*t?>>=rXK>?lO0=fuIK$B3-oGxUj`8)ujgs-d*62S-tAoA{q zzwPX|znLe?=o(Dkl30kYQ**ZPjM6GQF(yY5WQiE8{cwSryGSiI&0=mvP{_tn%p2vM z)F^`on#EE|=cSWMKwiWPQTi~n3~FJ@We-p|fdcJ9rVx!|3f!N_2XFDycjJ%Vd;H@M zo_zHFlXo8-?L{-YY)_uK*yKQ(eaWRG-Wx_j^F&K-?l?!;^B3q@OaeQ75z&YwR& zd2w=feciU1ZjjJKji_C3N$)yJaMH{IAT+J^ae(GtY#UWq2kj0$ZgfpGW!77lWz+%G zX6m`LrIfa9tLLxAGu;f08V0+4qutPt#y{2m>m}F3;=W64flzJMcIRi8r>Cc97nify zW!DvRuT!nf)s0SH+PS{nAXw9cWpxPu3Bcz0-s68Q&~Q6$S6|Ao2Aguxx`0&Uld9b? zMCr>l>uS-*J%(Rqp5Hg@c&I_@4o!vm%sRLAHV%Eo(=>= z3fq663B4lhw)g&Nz;627e*N%jYkyzqjC{#+|2taDwoT`@0cHJ2c)f>?pS#t9^v46c z?A}{{`aReW|714I_Y6C?(JnEh=btw%c;7dh)Xjxe-M;j?>wspWE@tjxf^Tg(Tcaf-W?Og9JQCfVe_} zNasv3)E=%@eojYS_R8<42!wx=9%^3+>4t03GikZtDvj$#s5=VQMgAP|8PsseS=K@&mOUWsth1Q88HOh_@t zBu}2a{i9Dm{L8=iH}5`qC&h;DbW0itYcxrUA_6aFxi+VaF~$^XN?9o#24;{=L__D@ zH&37c;$MFAi+}m`SKmCJ%@>Q#N}-z;w~{-rly7V#1V?~P8acRg@8N@cPu_j|!Gi}E z^X^w)eEwzdNh6n+I=i@xvAKWm-p3z(7^7ZXoVoka!9h*YZKjj9ovYM7q!bqsA!QsH za1)yZ2zNSIJJHtC%gtmOqQ)3g3Tf4 z5L%6<3n_Sz7{sC(b>2+^z0?fA-lkOmXRT)`1k`J`mIx6jPN*QMG=d_S1WW?oAdJ_+bZ6QL{WzxXg?9}gQ)_}wQV0PO6wsPh=`cmlZI<+> zsCj5A5?Cdx!CLN`**q5@O=H^EXk=T;92!MCQq`kMt0+R$veOkOHCLN76VS~> zRb!yLNC&E6Vnx;W1TloY*hq+;3yT$$nx)+W87Kk+jaJ+iws0VcC|DCsCyM=uPu|0i zKjPo~?315=^yHnp2X~sZ*KiWf#OD%Aj%8ts(wQSPipg}ZF<{nqrwc#5=E=34&eBC` zW)degD^h@fn4lsB5UCFLHtt_F$0vI5bxB{h@{LWuD#zzCooi^D{k(V3Hb*5)sgn>w zjEsRPGJ#2$lnMFh?qsSKl201ky}SSZlea$kDTZcbu`rWJPN8H;x$cwfK;r@er zZ$G+My7pgw@z4MKkN?FkPCoya|9bM`>D}Xf6}Qp~LX!fyiAewuLErticZ@H^$ye3i zx9%6l*r>#QcQ`Zz&`GO#lXQ_Fr1fz^w`fUg)|+1TCX~Q@?y5SS`01tm{eS*XfB*me z=g&X?)&Kc_{O>>d@V)==Km1SofBCZq`$u1X^Ws;(J2{(|G))>~5phUcS}UC>gN6bh zRdTKsiE5N!rJ6p*h$2e3xUfbtjx*JIbqj#N6{y!pUjra+Q5$c8p0>v}kXp{CN)5f` zN|rIfo6_>Ptk)<>=UI4&z_fGM3`TEAJ#8A)+aTfVou6 zLfyqnD6{L+bGw*7IX?RI-+cDzhff|oOm_}(bSOctwOe=*EfO^}u?Zp8kR+Gdw3UE| z>fhG_YCv#8*H=RcsU)>jktoabUx8C9Gj#|=sH!4C1Zsp4Fcm%Cn>;$W`yyO+xlKtj zQHpAe&N@z&KONLT_tA||^&9rOAx>|Lz3!%!V@s6Prp+UPl=MMYl zuF<}wU&6p|m-_q5>zixyk?r$&ReSF)e6GwsvR+8wJKK{-`)ir?yUYXLc3!_6K40?s z+t+uq;>Z?xW{a9RvO?^#&sTo3VV_61$v;N88ao#Um(@;ul1m#*l|QR=`l|M&?<_Cf z^uMfA>8<$ObOZ0kCxcQ#AkmgoAM%mGvLIIehlx3=3Yr z8vnlW_fG>h*Qoj+DTEck+zX2Lr7P*Z;vs-j#1(zcj_%@rH|s2oq^RBV*~I6cPE6tL zP@Tu4eoiE4KwO?Qx9^vonI$r&$rY`x^PlCF-#dwJKKJ*-4Y+Ozs_xIQBee}Ka z^Q)_?)6>)WygfWToa`L|aASTYg)|3 z#l_cOfBp37)7flh#`(1if+%8)sw7!TXJ&nA!3~a0Up-=sTaMB`ZXBswVK=>T>)%_3 zs)=Q)3RS{D5n*oIW)ej-=dO6(Ke+qhhabH6lTZ}WHQN3GsbHDT(g=0)E>RH6zUkg%hl<9{}9o>7CDF1;ZPw-(=;jNobzIK#i4Ab zxhwq}y!8XG|bUS95fc)8M#LyZytvkq{w|_QC&Z+8AVNgMp{hhd4YT3J)qENx zPg2vwm?VXufg0#p9nkgj(*ac>p;Qqc^Une85N4@FI?R#L-Y$^fN)UbYw=31ZK{-%0@cGz|>q;H?kY~}!L3eRaDW#@q zasaq(Y&f90;MZsqUAD#6q!?Cmc5UkoCtLn++qNV_2)PaLa=AP_JbHCHKbX&t7mL%= z)23;H#2B?ZF_}gKdd{j@_5a>N!`ADfReZ~i9N#`|Dga~qdfigHO8*>+s9w->dX-uF zvAX}}D)0v8zRyKblm$WvU4;@|$teKIJ!~xKx26x{vh`^eOM1HZ-tCW{JWBQ1-~Qdt zfBknq$Jr4k;po-D!SiPyJ$k4_N-2g=6h+h2Z*<>F`2Wh^JFFFHq=-16Sv3kVuVm^+ z^x>zCb(O2B7q07mWO1dM+0JfAke~kar~lXg{U5%1`g}H>{^q~^xBvVf|DQkq@t=P1 z;KA(EA3nTye^!0*o2LiQju*zlf+7}$C_rXyDZx1dk|iZc@aVYVXio$6!#t@Zk80PA|Z!URB~^Yors&eyL*%BWVs9xMF`fCmXj8A2-op7 zUh+34*&=7ZhrDH4)3qJm{c~gIZT>o3wnQRt+#vJn`(73=`2Iiyu8`(i z^^o!TIr8Iu!w1mS_T6`vw(5It$e-^p0NiKo$$HP8O-$hi$~soAG+e zrcQ7sPE5|OU`MVgDFUc4DBwA`NF5IBwI0CTCjcPhAn4j( zMl&3*>bNHmudzPcxa$oB!UGN1k<4!K`0epQ% z?SAiIZOI$Rry&<_Fh)ms*|j-u#bpj^)B3qLKGVj}Xtdwo@_ZZkT*sY&W#w?ue)Vj1 zCbWCDo`}(vbsuq?0r= zGm~N6@}R3Ug)YR}Es#hTU><3L<2QOq{x8?Bx+eKZ$55azcP~M@6jcfclN_R+OiK|) zk)7%6_RYH=fBex;e)6wA`tbhaM|Ws-)1-D;m$8^kCV)205M=h7cr#U{;hN zrj&94b2GR(Jv+@;ao?d6FhvZNh-eTMm5i^V3!wo@4)%J`yxYU9*fEL)FH&lgx89nW zgA~s^#4dc=akvUo23m-N5u$=3h$bmZ#tH?v5DL(UH!3xe3x}wH-i4DKL;?j2h$5ZW zmg45trlc;$)Fh3ClrfZ5Eb&)HuJ z1Tf~aS8^*yrhEvBi%JYi5eP#L!*!i6RcoH&>(}^FVh* zky7JCw9q0>QwYW0c^gg_KCjWbB{t4PL}5u$AQ(ugAic!NeH!VC6ugET*pil#BNnqz zDTS8IEQy!~M1__>giHyxOq3*62fpfHe_~{nf$4-I1V~CkK#~NZi&DV3vJ@;?H)cR6 zMW-S=QFlU75S40F7cmz&kN~Md3N*M(uzwpLJh}DBr}y7~c=OiHSy6hFwqBmJZj+*% zR8d45E*dx*7NTW{Yz#-|%a_N^%Tt^+a@53g6g4Vm2tp{-p-6BBBGMHJu@y8i9D97$ z@+-41pkHC~qS${G_v-Q?%Nwy&2@0vHQkJq)lp?JvW0a^dD63eO#iWSby&<>m>^^yP z|Klf*K6t;}Es+xHWgVu4K$_&|=Zn*m#jB&^7cX8N93C~CHZ4ghVj-%@+>9dPbg1Z% zULxk2NQ0OH<_QGo;x0o$3xc`xwkVK;Nn625JqA~RT*IK-i*?;(>~GuV76(R96hS+^ z#aG3av*t6_TdvYSFLjub>}JvxL6`Y_IiD|&kB^TIPfnKg%VnwwGlxczXmq-oTfSap zR8zs}Y&WH#jx5Rxf9PuO- z(UsF7tNh}my96QN?j*_9-BSxyHDd@N1c@<97+lGh`3JbRDA%Sf_T5(d2-sL3C1`kX z|AUV|dRQuc`wzeP?XP}~lVePaScI>izxeWtfBeax{83p};_hsd$z>+4_BWJl`K`xw z#t(w4d2ZLYhxCi_ghMC<0o~@!4Y@NMS-VwT*{$Ktjb#+2ELs3KIGF!`fAyb!_OqXz zoSXzzq{T1(`ak{ZXaDZr-tO(m{>?{|81`=8IsV0Op1nA&U!E^gt0Bgy1=t!Ptg!+C z_BL)GZgv@|ts~2KeKU2!Z#BS57CRY6OS>VX-++dM%N}gJVWF?>_cx}|+}3)2_tU>< z^KP@>w_bl;|I&CqYo3rit2hGijZfxF_M;Mohg^;!0d916v7{#VZcm@wdG99=pL}$0 zvQxMK|3Co0rbYC2Cl;uyC_4CjJ2`kk&Tc2|eGbDCZ1TzPA&=I0a%{zKvmdw7aJ{Tw|AzMF*7+10_xgSIJ4X9` zV|V|4{$yU>{dd!!dCm2_=Ji`>%~Lm)j2k_w$EEq-j6ZuC{PVw2z&z8BtXpGK#(@Djalygu9b?Om-WSEH>lNW6H>B{gxc zGyEtXx3;f0^xL;QKmRc4pAG@M>Na|T-c)d2i&oO&l7QCQW#9GGfH$J;s(FsM=n4nf zt(){lvR}QD@0t{_(d+uGhSxt3+K>Sqar`O-#F-M|^aK*#)dI~Ibj2Sjf?R)-IUaQR zGh2y)OLygWlDgd6zKS4MQntrXWassOJOW&NwE{iQYX(BOKvQPF9;u|+n~;6t*#z$1 zQz_oPLPy4$AOnxqdM$Ua*$iCca{zAZI)(tGCw)x|@9>$hB}e_`j|w?@5ZTB@oN z3Cm?ux3+9RN)bzl?%$YUFv&W@Z}{Hmd=~HWmpb4hWKE;$Y`JWbtc}nmK*-8m0Z1&D z&GYBazxd*d<9%b>S`o!bvjjlIhuEHb%1p8rqK2Sr_z*->GWvY9C9j|r!!!GUEp%;vB|s>m0;mHlf~atBclLviKl+oO{OeDD^n*LM-z!R- z&rf$}<=%~H(=^tmHq8T6;W0)bAt+)Ljcu!D)_TfGGt>ZyuHn_`@>jq5?C*d1%m4cG zUmTq+&gX4{7}>OzT8PMWI!&pa&(8sb5X!PFV+@7vR^ihpkN)ky`LiE<{CH=gFjG2; z@OXCj?!DU?zIJ?a_~QA&!K;_^`Eq`~C{%W4)7I_e5AymPMf+ zdRBAkU4hb@8Kf#OaI|XdF@k|=qzW7og2I_VH<*e;p`tEOMRFuVN-l)aL3c_BSfPs8 zt%R>x-5AO1?3Ey$ge%n`8HPd%K!r+&XCWOzivdnI8oeQ@0fn{@ zv&pUM_WL*QJlMZ+Z>PEubw-palyj)LnIe^CIhmB=+O$gqDT}J4vTkuSPp?iE&kq&{ zOP!-KREAOzCSVJ;fH_J4P}N34qvbM|b5!$C%(Z-xQ8sQLG43L{17!CMZhzH-G-=`}c1?{@~W$Ox=Cipj5xHTQo_U z#*Yr?Uw-xU#q*={#WJ-t7KwqNs6az&*3=2&p{US>h+ITq911dLR&=;KMN%S4$q;i8 zCY`&=hw7{s4}9qYA%h_6c442$RoC^9u##&bbOKC*_mmf~%UN-|TF&GHYGjmq}Dk2h!SRqPK9qAez zYE5+HD?R+eWZop%e$emp|CEE9KVZ-jyAYZH5M}_P-@bkG&wld9_ukw8uYdE?U;h2i z{pb*d2rbq1*U#tApMKRW>)oCGl+vQM+S{U-XwH}t4l{Rwh@(r~=_Ob0jNn6L5fHx$ z!Af<>T}upk%h7T|)sO||0$~Tz&bgfeccG9X83*ZpF>Srqkuh>~5^HNt6_K`W>$W^R zJbL=o^Z9%kLafi{H>c(Er!Ss9eSUU&JhNi&_Ux1U)q8jDJ$(PYfB5X_-~IL<4~`cJ zAYwzNWDMXC{+87Y`lmB;#a`*$=pmW882cZT)qE-SR_(b?`cv zhT)5PVFUpEk?#Uf#|bXN(WNWkcDDrDK?!(>*_V+_EEQ(|`~UJk-zv+yyTzS~ z1;wNlv_VjoH-y>%DS4fe1u3d9DMM{}JcxSs6%R!hd=!xCCO3A>3>Mj%Kk9;|kFqSx zjBVD~n9l(vl$Zrfix?a*^oQ{) z{`t^%(fhZ_%vT`7zo+l%Uk+XHqpn^-6RL{=N_Tnl0B}ZitYz*{F@i-11mYsdF?RRC zq+j`|k%#DeTJ)&0Y?|Rxa|=G&+2fq(IL_yaE4yNqJT5B*ZM#mtb^> z+};B=&LoxWS;*Lqu@`=vF_C|7Sp5ne_2}&oG73P$M&^zXfb~7I0Q6|TQO3}?Z$uaO zx;)cC$2b=1>Vf)zy34t`(iulNxoIuv>!9 zItZ+1%n~GyjIIcJURBr4jQ)+xmoXnQ_L%_u7&0e3baoV7R|4aCs`LRpRMIXdYXho>1Qk;`Ca10s8# z@^;EAFxo+smFbeb1yXPLIRXHQqu(g2-A&IKk=`v7# zbC3iO^V0#aR{TQ-pMs0h2*9aS&1IIH1Vo{ZV0mpEl+0HvZ~MTg4sl3A$m=R%N-v@o z5~2%Ttaq?GI)_Mi(884hgyox%TG}iWp80FXF@+Q(p=}Z<93!jX_Cx z4uK3$pAm3D9J{dCldjo{I=W!Fx?%T`0MMS#haJ&#>9z;ff1YzoR|z-c4B6FvGq4gu zQG~z{2yw!I1f+ZdkO>kYwJ6v2a+k%N_ffhye)b^sXj&10=G|)~fn3Em*K2jrEUkoW zS0i(L=C6L?=yeFJq65|sh}$so4I{T3EL4J^YAtA(<}!VUM@J-H9=_VYalW&+yT89b zolZq)X7mJjRTl0k!*E4Alr-Ubh=I9YTmf zo4S7a^5F3B@afZMW|ope#ZB9U5Xz#^WGzH`>67_30Duh027z>Z4nQ!jm1cwIPNiQ% z4$n&*UG7AVKIQ{Gd+y2ngL*it4B5^N`tkdyTX#B%YCt4uNdW{c3q_o=t{0Z1h?7z$ zhJ~d<6_Y}qeDvX;{pnBs=tn=ed+%mdM9~H5MWqc>+tz?dY{U)17*!>zw<1A;rB>#3 zEeMm@%$j)_CmN>5XN%wc_OoC7_h0|&x1T?M`RePJOQ$BEG-hT7sKMB#a>AxPCuK4z zBY?D+PG)y*-TKKN{ouzx{N&S59?hoFeUWRiQY?m0Mdf5dR(EgiKDu}Be7>yf_IICs zadvk0>gdFpW>(FVdVF+hM4gJFD2gI#D7s#fNFfImoKAzm%$x~s4)HASs3hr1GNPi8 zEksm1HOom7Nd+l+4A|S9Os27E%Ee-_SS*^R$$N^Vs!G&=kcRHBPEUmgafu-Wktiyb z+yK&aNGu2tp*03lz!-9TN?fBs+LTiAy0z?u6AeHxQASV{PSS!1-~l2K>k1l+p=dZ2 zF@YCYOwwV*T(u68Vt^n~LJ*^8@M{GKSP}|WEgGOvb(KO8gdsIyS!H01Qu}(gUc#gsMETrx|3MH78IPEdpnKjSL6cC~bhimU~fW z`|;im&gb#;WO00Qep0i>evKJXs8k|G6z(kvjT4fv5wa90Zj_G9aq zH|gc+`IlcdU!NCC>?OLqw}8>h7`ZzVPXDufF!3&ldJdr$;h5 zu4ap3(v-U>cQh0?NVB=O63e38xlxp*3+9V_6jV{B1@GK0e)P%1Cm%g{^zc?t zi^AxLDkuR+GI{#N*~`O|=TDE0PtPnx$UYg8n{%E;L0d0@7*xT?L`BH;JB6O(rb-B5 zR%s}pt-wP8x=A>fA~5cl2v};AUJ4f>Nb)wHD!IpY7jXsJ)YV%S5qGQWdbwP-Z96~j zwG;^&b6hzY;jlj3D%l3fEg4nIE|^7*qrL393yX-TXjcK>tg3=rax({11615KIgjV( zhbPA`zJ7Ula$GkJNyeOG0wST;5LF1|6R$7kNm?$YpoprSzQh1{)LaEj{T~9192%Ye3@V073jo9!RN>~qB`B3D0;LG4PRy4JG`b8DtFkII zR%ID9#9+%-ReMyr6Ba~OVMYKniik?gcyBXvTWTG9rWu@|i4v z!CdL28O%k?*>v8vMNzpkN(BQOK6?D%lSl9U(U0zXbAIsbm-CZnC|b-eav8mD~j7q}ZWb)0(@3h@s8)CIFEl z*NSrYyz{-o__gTte^(T#Ng`4fm5aB{Qe)Ve&1O4MV1%n0V4n3m1tGCeYg?m*P|!Wu z5+Nd}drq2FAept6Hyct_RVk(O^K%i|+uNth>3q>7-oCZ_{9y4HfAJsx?&m*imy0R{ zolcup=gs7=fA-6N_rLyc4<5{x^W|(ZDZJgk%g49xKDn2E{_8J){ruHeN6Q+qxN)mV zO6d^c1KZ`WI|l`ygV+SwY~kll1E#=p4+T1em-Td9WA4nHgMCDg5Ru-~k{<)Wjb6?& zdY?U1g03vbc)w>Wer3OOc1?G)l?gL!$KD$1>^qTy0-=MD&dhcIijY$+toMiHQ@Shw z7o%GeB2YjH6jW7F*L7+w1Su;O6}TC_6;cr4g(&HgJc+v`QX9hd$R~e3)UvERxOC4 zrZ(DwAvetm;wo@&xb#x8S(7!1AYC~YI6Bl;S1@37F0DOi={ywPxmXDa0q%W*uGdMB zRc;}pvl}^h+MmR``_o%H<&mLDMwrCtpbNXkUIZwV5&&o-+15kX-;_BYm*_T>Kq%6A zNX$q4a4DN+IkdY-q;gj@NVi&?y3eIaZuG^8Ie{p9i~i z=I-6^5>elJzHq+v{>F{-bF6QS;tOm1(A_KR^Kmr8am?j%|LRInzutOswJ&-)i6A^LBg==l7$ySjP|JUz&NkTTg+2QL)h_wot8+?p(Amlh<`ggG_*@aUze&&{Le~&VEDYRNpO*Z zD4j+VkupXAbSCq5K3A2hECuFm69ezwzH|H5-v9JJ{`s9-`w#Bly?OIS8Qp1~T2q%$ zQXDW9L={y9otCQ|C%QX@QkGSfTCVf8O=C~vIm8TN-0H#`DXv@+5FVZQc5JVvmk^3U|G*aB&c}^9!N5T3=ql> zJPRvv0ZAqEU#L)sL=6lUNQxjRTqIfQOvOacDTC}V6Ch2cs~IZ{2BAcQt9FQ!!~#r( z#E8bEafU+L0*$d&f|6SdE2sj=b{AbkJl$C&zn?TQ<>C_PlpC{mLmup#vVELLrip4hbTK!XgTU+Qmdc z(hV>IsshQKl*K_8jJ-svB>}kQu62SGGAPYkg%%pC7^bthr*g9>PFsDxXy<9!w9D3( zWJ64#6*OA20Qwj>#U$nsi?ZlFeSrGV8!vw(@LpKw$hmr$fC4EfEhI6CNCC7+Eu^I@ ztj}Z!1qJ0~TKJ-D&!Slgp8@*;w-h_=@}|a{WlduqNEztToIHSobB;Rb3R`lp0tOjJU*|Ms9H=UM_W33)EpMv=%zB6RPfNqns#V{f;J@U)ny z-n+B=;r;g>KfL$h2k+l|Z(q<9WvGfACXwSadv$npdbWK2?A7UceRA3?8_P}N>2!z2 z(5ove)l#^!usb&?wQD}z)g|wGlaRTka}G0v?wgq{`|1K4CN2P!Wl847uBmOCx~`k1 zF|+lOjIW`qm0?G&sndgw0f;oIWna+3!Mbkd%X+a~K0SDGwwRxu%@_63*x^V?Mjg`e z#*x}9Xt;ct8Wa-ou39OL0mKuPB95o31Je7P*%mQ z8@C>R_~DINb#Q*ToS%EU2;v3^ZD&%QpPqg8+u!~6x4-@H@ee1vH$+g^En61>nV8#e z!$T~JqA+vPa*9p>RdOE!y0v89Y9gZ0kPBK0oX{Xn2|2+C;y{Q3gnXcyr50{QD0Ze* z4~TXLRGhhcd*`3+k`>Wy@@=FLYui?YMN#bT?xvLH%OwzFQJQgH@0wrxPSMH?&J4f)3+uX8h=iCq+nLSjaCCGsolbXlc40 zDBz%hLXYlBCQC*{Rg9A5Ir3lkSYd}iJKaKqs5x3D!Zm0SjAC$3V%46_Q+>Wy#s}{| zethrF`?q)ZC$S>c8IcqTy?Jh;o!7TNF@y-6`UIdamfmT_g5eLZS+JG&pg$UhHPrqb z8o96r^G6UtQBI1YETWnqr%H#cPdeb9L*N($#5*r#DQmvIZ-u@Gbbe3YMf%qG_74WS zjSWp6SW~gTr|;=|`h94mjc$AOT&G3&E(5?_kcnj1iLkSsM><5_<8OJ6jnF@9p{Z>; z$|%pG5AR<|`GQfN&f0zb!X?`&Yfj^=3S8%F7iq2X`*<8#&1bFd`IUo>Y}Ee!W$Ss> z97pRptj|@qzOeoSU4JFVS+1UBrP*V7u#^%_5HEl;hF{862a zia=tn&_x=Z0;d_^L_->w0Plg*<7h3!|1{AQHr;N9GM_aI%+IjbZGB4w24_y*Lk zCrRlsG22SeWSJ;XbgA084=5-yUz|5hQ`d{CswUHFHk;ho-4iX{7=ns`bn^~s8G?$~ zh1{`xq*qmC*~w?wJq@S3p)4mU`T6@XAOB}0i85vULC9EyVI?!J5p*L7 zDgvi_d-vae??<0}{P@EUe)xlrCS{mR0KijXGRluK8qxtj=~3aDF~602$wP%h1y zmKr4%C0j0+&9mQq@!3Cq`HTPl55N8Vi_^13W70B+NYgZJYi*kVsEVp8Tr9V_B9?+1=e;*6pp^ zdpB?1c>etP*RKxGF{gwq001BWNklN?Gs}&rlQ_V#-@_zwpj_DH31{xmK7B?_iW+-K zizrQ$#-wyCoy*7=V9M0(Mi3A|L!k+PpwN_anAM$#;PGM^RjSlZOsmSPB9=uNR6}-) zic<)vqOWaXxgRix?Vqs)83YElk|Xp2?c?yd8i4{T8Ym=8%Ft@#l3EdmyZHe3)xa)s zVyJ)H=Y;lKQ&yqRzG(qfI;2s~dG(?CivXZ?GlF`qp9>EXJUEz3)dq;S?q+7};v!^F z1Q9|cqk^r&^{WB_kuVjtJWT<+;9VN&SMq}a0}o;GKVo}M@7%eHCT#HDj$ zsKg@?AOc3J0Fhm~NZ*-n?5YJUhuE`nG|K#vpoUVM^Z+%4NSd%Mc9q_^Eon8q23%n( zF}6YL7)(lV54Z)~aqJ8Bq^_ifqZXKGImP7tdU{{({qTNqr=0BWpb%4+s8JmvN);ES zMh0<1n^JAQT%;E-+T)Y6S1p!O03uNW8#i?*JH8Y_gelrq%j39r#`2iqrIpXTc#im7 z;wu#Aakh-Rj1viyGL(o_D57eNacUZCx~NQdc0<%EN+DiF?C;LwylV3M(FxzoQ;nTXd>|F&G8wFYi>K!m%~Ev3{ZwryLMvCuFnN>>y) z28tDPWbsAN-5o;G9k~RSL%jq0IFR|d&tnkF6>$VmaTf=p1JVadMT2O7s!|{^xqbKE{TQWflNpH^gIKIvx3ZkV7hit)^soN%r+4o?{b;^%l+z|AdOH_f-Y+4lMc-ja?@)gEd{}B zHoI}-Mjsz@&DkF4B7vkB1dMctM8E{hajtB)c1?6LY=zj}y)mDkHO*o=-Kol%7@O9e zTFvCyi}RoT;_v_dm%n*+JeN3?IBDuunCc`?Up)WntFP+%PlI~hoEMQ%0%Evxd#}8? zm#Q1TdUoPZ50(_2?q1{@8F^GPBMGiPG)6qO>EE~pe~$Nimy#urAt-&dwKeR)3%vv1 zkUHFdPSx>|;-{-Z%Q;o6N2+CGvpXSk+*I62jX|O)K%={9t{f4oQVK~{FKRI>CuLcb zQDX}jAn@RbfJT8O<~=ov$_rg3t1CIL43NYgG^9ib(zXV(pbScANUYH|Vmfi3%&G_X z?tJ?A;Ro+crqLup9TBc@$=jdO8#LNCt{zsVdt74+>lzDs<$1N~71{oXRWYq5v&mGN zCFwC12qAf!BkbsFCv}T)8Sf2eSI=*94HxK@{<@A!G2+rKl=&(@WMl(&W5`QpyY{A^ z^JV^rl{}Kp4t+~`H}v)Y!xMSq{n+2S^D_Y1t9Icu_zHLLhh&QjuQPVdcMy2YaWmr3s|0NkfV zcklC4-%J?%C#TKylM8?Umgey~T63VU(VH#kmUNqUM_Yn(+vop=!;i#6Z&ZI9EX57I z_1nn663_jbL=pg{5bkvIL>mfBIcU9pU?STys^1Ce<-ht}Ki_YM-a4B2&6AG#yr;Dw znTs$R>K(y`8vcXBbZh)>E&4XP!#kS(H%*rY6o2ml-#)F9qoDD+yc_CCuF1sSyM58k z9fFXo>$+{*x>@ECdkTD)iDIuFKBXWmcr}gf}I;_0^t5>Yv_t!|qeyuOs_*V?zD)v}Zg9ZpB z*Mu3q;(&@!gQ^OVL^Q+@VhF)P2)nbL_wV2R`0+ifS^M?k-bGElw7TuV1`+_WbLg{q5f#9iAM#Iy_r0Aw^L| zw&KZ@N+xm7QBGRxgn}v-RBr4{AKZWc2Twlv^hck3^5oMY!~qcP@9YP6idiMO93Yk|d`Qpc^0%qk$?y zp?ZJFjN8o*KAw$TIn=yRt_&@ep|T5m-=gGhy1~T-F-R%^31V<_BpRV04KAkWx=O0h zG{^Y_A`DcDh1}tU-2tE~q=QMEf?5SRrug7iF|XycNGIp%d|A)yc99mfl^SLyC0RHO z2w(&WN$hLac15(2i(m?Q+C(xQ;kjBQ(!6m?Y%K{Qk@ur{9QxjUl3U6ufW)qFMlh zLb)S7ZS*a7Z`;;AHLBj0F-8v>LeSslkB(Y>H+E;UY30@^hbW$F7bDCOn$Ra#h~{hxYAy(`xveZz@^`6jP>pWBsN0}IQA&W| z^c+9^o1g#1fB1iY_m5we)ie|(9rMNMw5(c7hsQ?;hp$>oF^DBAivmDfH_lL0Qbx75 zZt4Z9aH&gbBN_3!T=&gUf8TBCBNu7yuh+1TuJ0G(%E$q@`eIj!xCjV6=p4)YfX`W&i1Vk{TdqLMkT^vyGZ_S#`p zRaI4y3m7H526Q}}PUFLEJO8|!pRsNH%^=)(ZkNd4jp*+`)sFj~zN17Abz9$_bGGs4 zwyn3xuHEi?!~0%+s&CU076FTmqV1H=t3v%JmU}tJJpbbV-MmE5kXA8`l1nB~vzYJ!Cohe1u-@ zXf)w*)s#*<8snlie)e^6job+Db?Z60`?ma)YvCq+ZEoT~*zy#{KfAvp6;97UTe((d?A(NV1PR zpoc%bMhU)zKd+n)!#ZvgugkXz7th`hKi&YnI!oGK02bP&lgwhJ-fBE}#ZLQ$4&)iiZoFR^UV5=IU^1ucZ&>Z)qq zs%rG?$JVX|IQpLMUDHJXn&YAx6oNuYR|iAXkV0e9G^%tuJhv)bVeG=dU0A6F+UNu_ zjYyHHU|pecP7-UwvP47Fku_j}*7e%y@yRMMaql!*j}dgXl$JeR8k1W&?YluOE-riw~kj4QOOS) zHX3=Y4Mex0v` zpDd2&a*n-um=YQ^a~Y^=1S(hYK#v7uY$Z0vCGp%Qe}~y~-9HyO^I{%$m*vg6+;58; zO_;Sh5v`!5s0IlNfrLa)Mg91L`;YG5`Qslx+25^h?n)8ChTb^Dsp0vv z`SJPk<;$0^4v)^~XLXxM#$wtUMa5xGcQXS8A@mpsNLG-1T};cmlvhB(NLMnDpyv+p zs!|A|AP6Fut3Gu4wo1(SI1p~uG;PNFE*1-SC&fL8L=nkl7g7#L_ZjqE(iJXf?;|()$EAsN~3&Mf=fL5fG0 zt9&teo-*E$t3A7h7}(T*boJUD-dE?>zq$VT&d0yRe!nuT>$-{`tj%HD7dGZEUGP#w z)^WguAg4FwGbtq}&3zGLY^zulMHvx7(5|64fLzMB@3yLhtx8{D2z8K7YTt)UIuyF( zBMF=s#dCXXh>Icys+2o>0#v&K{Oa8NKnPm;mLpb z>%ZB(dAqLV(W6IJQs`~l5T5%r2*r$MHK0Kys4|!rN{WL9HO~QHgQ*dgn3$VfgLI?2 zD@lWiBdD6SfL1Y7RW+SdvuPBx+JQp5qPo&;UbS&ps8cWUii{o+b7@?o=)u9Oy_@?x zJMp}3&+8;1n#-bY|MIW?`v3Sp|NUS7)qgoWo`-U;HE-$`EJG1g48b)bmQt1l#L6+oV#_OCWS96it}e;DsXq_>>iRY5H6e`j^>RcfG?$MBV9(nqO0Dw<`d|Y7-GQw=F}E-aWW+*%xN^EQbj#d)EcjwNGU{5504I> zJ_qf_&Ar=?9)?K}(biHz@<=EWskui;zkhS|SE-^oWr8lfE+r!Lwq2H?EL1^w(~37` z?~AfXfh;o3!Cieh2>Ejrm+P{yMx|d>hk_ zuCXEEeKp7xbcwuvv-NZ~B68jJBp_qIpRP{POVWZ~kJpsGgzAWIH_nr-BV5P7l!mzS zT0CXz7cTdX4rjteCw9M{o$3N1Mm_J>Ry9A?@z=-uJ)aDE<>T(g8QciCME-8hf9yvZ z^XgUS$yVCr&)2j(+cuwTU!V2Bv1fkUKIPTx`BwhVOZZ^}sl0Uo-flgwj>m1T&(-?; zrhYZ>XJ3Y7>m5gO=URy8e~F>!cZmQVl1%>8oc0kmAJm4Lzp4sq>(L)n!5 zrYE%JfqlaW;CK0ahs=yMVXqsu&_88qi1iG_fjn0c{Quc|vnEN7J{ z0ab-A01Y(IY#z-XawxMSq%2=%Wn_0{-}Yhu<-W|0jPQZva=0XWNFis~-9R5`Ty^K2 z84>Pgs=5#69_f*hnaD%~&F&^tASr<;3v+Wj)b#pPi5yt6Bzg}v#i2c1swtr7@~Hw>PnH>o9L=a8fe}hUVpcaYuj;B*GiwQ9T!$)btdHW!yxH2k zd3bpI;>C-d-Tjl36HUpP!9i07mqNS56o`l@QeUZ;N=3u|!(e|7jYkBapzBboBM%m_ z{5*spB2`aq+fHW(i&g7$8+VZ7l6c(A%(yeGvrC95P$+kdLO;*eFreVp0}B%T%|pmZYjfv?z1NOyZ2Hsnv&> z4qAUqlb?@oK98Go<2hF?uea5@hfR$W4--%%ip(JpA~=+^(^U*&B3NG=-P*eO*8O|$ zyz%hiy_+{T!6mt;LYyFScs$)dp8fRGouhd=K0cn!nw%3@M8t^<8CDW&cR>bJ3X0Md zsv=%M<<45r!qw*koY{g4<(%8LZJMS4B1=XAfD2zLj7wF!5P-g`MR?Ql{WZ`d`mg#U z3MUv9#~o83VFr*iw>dXSKl${@;mPsd{{D12RaKD~su-nin=Z7@i}+4d-pG;9yvx5V zUH5*!E`3?@d?y2}^n6h-=jxl~D=g%+WzF$)jU0zhnot*w(YQ9!}Pid5r~&1R#js_R;FMw`GKMVNUy zoq=K;PoBTr`LjR!v-wQ__)q@iz4zV43j*a>HpN8CgsbJFK@McV)u8 z`yOQEAjfz-0fl*nQ{31@tN6)JUi{M!e(?YN=Rf=BAO7h1?qP_vXPwR)0Bc(}a@rTR z$z-yzu|Xt8UWGtruti#VxVxq{&F9J|lgZ|)N;?#LR{!bpHT{Zc^|_aypo{gR%i6En zg}TrEb-K7zZJ^mKp5;amQFk^bLLEeiBSLhlIn45Wda(cG>5HF!@c!{9pLrGTyng@p z*Vacj*GJ=VE7GVFk-|$^YyfbSZP43pt;j-7W@HXFDq|v5WjAK$oH^S##2f4DH`n6t zK6-0C@>(>`M4AHSz$WD88N_ff*h$>GS{e(#+~UvbeKBxPe)aYrA~R;jLPuj}O9cS1 z0vS0jn8`MygLd8^pX)$yF|e{qYfoU0-fUfuOIh*G%*4aYx>GFwGd58Dsk z;uo)}yhLX%d+K5vJ5*@te9-^Wn6E;^`MgSs=FUUOFp$F3oy@YAa&f1Qy)H2$p`=1G zqXjbZQbhF-Z*--aUf129Ln;1zMBozj^)0U2KV5x33j^w(xEdmQ2HM*Zqu7OkD@Dj6 zz@_`Iv*rw%d}-&s1k-nh#bWL(|Jp-j7UGUMjJj=nm8T2`ca>Eb0&uUwD~9|w4IVY* z1Ky{6upZ;PKxXrR&-6>Pv|Fw}p9}jSvAY+i6uN?>wlEX-W4qFM?;Z1J{m0AhsHHCn zOb{X^DoIb-%leWpGLgBNyU$ZHvz%={pRbSCN25`UQG^V-FjjWLmYKU(Rh4r-K0ZD= zI@;gg-`(9kINY1fWPy^x2d4 zzk&~{OwpiZ^1^UXJRxOW0A{N?lTQ~B3GxgwVPk>_*Q0uSbM5Zk+xPF^zxB%2cfR$; z=K8pb)Fz$Jr@}rOjbfB`J~gFWV6`w3Viy3GqN%AGOAwK)et0sQ&ZpB^`|;yvAN=^| zA3uJwyLUXDw~kOxwsStrxy`Ox;KG4KMBzvK2e3?@T}^Ytg!T36?(MBV{-6Hs+i$-9 z>b+aUHlNQ0UdK8Jo5FJPu81aq$be)TC^*au`oV%T8194+gov_cb#+$}noM{!o~)0y zPEKZ98|$0v&tJaWJvyGYZ89g#?j^}C3lnn?;YtW1;!t8DBQi4U3M*SOqHgKBrLj|f z$lhs*x`;V|fk1A;>=H#JNL5!kNLJP27gu$6vz$=OSf(&_&6Y((Byb;a}uQS9E zBD0w*Wg_m3Uj!2qs@*B&LZqt22b|OaICb}6*_8$|7e}BjlSUvnN9Ep_MMafJqJ==M zaA3-v>&FT#kPSuzP$stwFE;IBMt5T(X`z(c#46ciLKKS?M=-Mzz5k{bvF7lN5l0nk#hU4jLHB?ct-te&lSFQ}N)>9l%!cdnPOSp&!h_3hxL zW@5x8CNU>at_C)2M2yMjjgar4X%nuy(Dun z;zzWo001BWNklS&T4ot!**`ttF! z-M!5_o$Azd^w-)!yIYim13q=56#rsTP5io&F&6=h; zJU%`++?&p3pFZ20w|PFFt7;ShiG$Tpf;|MK@^|NiCZe`akxhM4{WFj6^p3?`@kNM% ze*B%RvT!#Jga_#_~Nq|8_ zBEg9?yJ=2IMRFZQL}C;o;&Op96|itNHG;X9d#Bu9ea4>hjf3FGAOe|FfCZxvh(sjR zqpGfDRG|to8Ivi6v0BPT#4MqzM&lBGF{&q<8(X8%Mw1j!H6{))0TGkrY|kD)`~Khk z{cPSEX0N{b>aClvNELI_=9~iyIjA$vw2n@l?8PYvIl-JL5IK_z6*sLD+)Dw7QqVzB zjwsdT+7gIx7uN$Q!^oKca_$8?cF!OIDO^EPP>fwA*=|X#M>oPqHa5n`EvB;smg9y$ z`s~SH{>A_IU;pNBKlsUqd;7-}#^9K=0mU*iO`b);`sUi!%`IY8O)QeNg$oQEoDF0q z#U-qu+au`q^EGI=->$GfmuhfYf1)wa;(d7lL)1>We-}M0vQiBna8>=tyIR+$ zH6Xcc^%PYN6$X~c)s%jz?kdV z&f^y!{`8e}e{%0$9mQFk1q@bndCSSTp8)YPQAK33@}c;E83-|&AvLY2ZpQlFjm?Mm zZr-~&dhO;|TGQOXG%^VjJIFJ2qOCZjE5dQg6#BVZvR4e9k-va@Y1M0U#S6@^FT-B97~~c2qec6{vo6A|o~?I#ZF}$M&}t3f^ZQ>&8ehOZzj)s( z+dn(H-h3`9z!c}};(lME;e2+<{LtfosqbyowtS`YPW`zk8~#hQf1dhNx;%5}$N#xB z97E6L7T3g*@vpQLfJ#by?-2hhZI%YRVxKQ9PI0TtwEVu8`@G#9UTk!osyul5@LVsk z)Rk{8r)%!dtMkv*_UBmU&$B--T3$GxLx03I?dN9=;OEZg(hFeF=n8apK8Y?soUe}O zO6Preca(Rx(+z#jFjwdE62$Wt&|iLY=u1xl{l%*)eoem;w8&5RHT}zwIkFY_RJP&; z0lS+!AVtgoF+tA0AS0vB2MqITNM`@a=!`3IAvm(2IH*)UCx`jJH1*+)gOHalPdoZ= zN{BswaU{;y^hN2C`)(n^`T$tDurn@n_86m?IZhJ^g5d5kj8)UY!NJMN$#gQ`-rn5Y z+zg>!^odjHirl?;e_yqEO7dK zQ^J=-!#O$QJ0HZof;;%Tk(0y7l-NK<$m2;ZfyPz5adY#*!+YQS=3C!<^R2tL$L&c2 zPbra`jYly?$+udMKd#1HGoKs*xgf7<`4r*$rkRpEY|vHZB$ollX`P~vObwS zdG=y||8O>MvSxEKcQa>VAuzc!F|+sJrP2d4pApk(1qWPOx;wdNH!~9vgO|Mr0yBp| z%v{&oIp_JjozLe@lZwx#1SkND+Q4pR=FAMI;s7=g5tcF@pri!suC@|pQ7ST4b!BFO z(2z5ECQ?;%PS!5CeXsKpfX?;}2H2gm8#w{doRma7WUiRoKn-yYrWHK6Dy-CvgQsE? zCBO)5)K|SFS97;O!PTI7o~f2pSs2Ao1rEZDuB3EHnMey$4h=0V9W7iDg^LR@*qI4d z9I8rSCkU7%3Sh*d-jE|_b<$oVVu*Eu0W++G1q~zw`#gBGqE}TbHm9tlG8%6OwfSLy za%N6ONqt6kaMJD{O<(MBtK7DumIHa^T_6flfl~t^fGe02CLs{DoGNsx@AeDs?g&HycYpfi#qQ4T!Op?)!SM_<$_7U$HeYu)S2Je`aM$9?r4AeDYEiCtUkn+` zg8wY4{0^Iy|C`NbDW#@qQc8vG#27_nKA#VI8!)R=Kj|O{`Dz7RjIcnGXH#>irlx5Q z4-cQeeDVDG)4ii(sW#LNEI|S>tJ=Jor<7uh%-k922e-_X?4MuLS4`*1Y2HD`fwEf| z%p4`UcPS<;w?t%_MFgmsIS7~Qvb(|t`JWfG2uc88B`%XX2b+PF*eFae-JwYj~utF1OOO|850xF&=)C!!eZ`o+s)64?nEWL z4opvfK^k|93HmEN1wd^qvrT< z|M_!D^S9r8^{sC_n9oi={Q1Y9eDFiKu2-Sj+@Q!#(F2(oWXT89!Nj}$YKsvWF`NxF z8n5S*l#`14c(Qiu#+}z+9o@eJ+XDd=3kb06*{nqM75|Wn6WC!a*V2}UH_KN_T|$e# zfVU7avG>^vPRHYChck4bUgfg;)ugWvDW0)Bn=L7r~D}hg0coYUf2*FNRk{ zt9aR{Xb=HcvYRbw3pDt9&X0l9crNdN5PtCt6r_cmJD&bUhJT0g;N`6c^Kj1m+i4S= zU8bdpI*q$8@s_?C=h9nRiYi;Kr7nPYFsfBr8UHoB%M8G5h=9EOI$TA#4#)3<*EsE; z3oH#ZSg(t)0;T^eN5l0fng01p=cpuWEx-jcm>D#iIk;gc6@-Ks3i`((rKVt)VylP- z**kR%gZQp9?>L--rIT`oh8aGGWEY)c>z~Mrt$5jaKUGT>;EZB|uv2v4=aJ#`<<4&7 zrTyQBpQE#N2y-M3Bm!mypczDPg-gFfi3$qqqLEOk4%gK@(42^rC6v(hbKiGqVD9~S zUy0|slpM*SYAIz>O(0`tW~7u5B9VZEU~UD_%4XSp!BtMptfvl!1z#=u(>nfhW`8d8 zlSS<0fB0W-WNmz7i?+75La0hE(->pUHl0qNJb7|(aIm|(JDbgjD8{;& zF-_az1?iX!z$A4g-dzrZdF{^e`SW=?=?gwt;$Hdu`|hIk;vPwGdhFl;G_|EVth=jb zGh+cbRuL(+W*$c&Fgui)N7cA#PhPos>)mg?_3pdxJbeAN&CPWooz0rHT432M3xO%S zCLx~G6-PFMsS-)q8)l{oGb7=u8mZH>o!$3;{Ieha=z~w6zS!G8NY3Uk1kIh}GG|pZ zqfu2;Y?>y7>h{f7wzfAy2><-w|LO7L$FnpSk-)q@ncTf|>(1?0jt&l|2fO3(_{NPJ zo12?%O60MUlo}R97QnNqyHdfrnwEUt)E9QeDHg+uS2GB8&>Vs|EL$bv)+;x+HaBkH ze&zAAr!RN*4i0B0v!-d?P21G!Y$l-@jjPOaDJEO#paaDSUbbkL{-Vf%9YCn00`52r zfIw^|m3G1MxWnP@!Ys_@Ax2>iF~+J&^ZC4)w2HYLQS>g0UArZKK}K+u5vP@~w^aC=`QK zF%kr7n&+yBF@n4gV`XzKsW!P6GYfZe_fp-O!PbRfTW7QP?8Ig&%p;O2#GJgDZ7(^rJ&f{8SdE~nyZnMnR<3HkdTq1g=h2m zq^1XVUU}!i)_eEY-+FcH!L9W>>+=b3ZpMSCt(eOo%{;5<-aXrm3xBbz^;8hY&Q4M`3$w^4;Hi=l*NAU%k5) z1v&>I*FiYOJoo1>4j(_;d9rhGbdnnNWMXkWw}n3kcke1uLx=?+BI7ROMY%^Dfe1qn z@RB}KM83t57Y;$9WpCS-In;GjO`4TQK_rSqoQf;1+RkRvl+tuo97`NRh0bZ`s=2g3 z)ztdWyri!6o7z3+Jj^xiJ&91;wgwjwCP^tLH2|?1oy=#4hle|RyU(9L-96Yhv+;O5 zPh=zxcXODMIf!FbOP6&VSjZmE0JO`1a#sF7?|x(~^x2D&-L2^3gi{x0_xB=sh6V`2 zi{;OObkyTo0Piswiv>N86jZV>>&HrD6JDm9Lhws;~Li{d^&}3}nNpRtCCNdRQCY^It-q^e?!F^CWm$VJ$^1(685yIEnYK|)X~VxBsnFaj|Phv*(d z7_W`TBv3HguRW5sm78}L^Hh2(k=7+_hHE-ss zd1HNjG^!wQSd$c{F-l!URXv%{N!Di>pMCuDZ@&NE{^BqH>wo{@kB*M#9HJT#S51>n zrYE^k5fPGVypipAb8G!u@4o%uwR?47O-QL7kE&)ik5!zjHp$2l7?xGpwVlWHO*1b+ z8vs&DA%tFE@WES@{n=^F7pNf@SZS`BCkaeT7>vc~yU3olDDhDCvsvdHJx_l>)q<}y zo=)fLu6^qdOv$hULJ7Q!AzIedw&aM_ggr(CCS^@Fn;-5xd-CDWo`3dpOpj}}TkG_l zcfRv~{BQruzy02KfA*6P{?mW{v;X@){q^G?>(*NR=*GLQX*$a^sgRYK!6ok9vl*ON zL`0k|C(D*h$fYtkoR}(2Y#I*sr|se43O; zQXP5m67B_TuNT>4i3pt=X~|xCe*2|>Dk=j%{pJdO7d-~)to`9kuKBu9oa|i*dSNw4cj;mk0fywI8nb-7zkhUeG@H$4vsr;j_0IzRQqlu_ z;k6s?Pcu{Pswaww1QO!;$&?E4izJAGP=!#Bc=zBi1FccY zI%~436Cw!*im{^Uv`vk!t*yQB&YR!)_HV!O<~PW(x3{}73h%!^{_v+i+u7M^)BM)W z&09A&U%h*0e}A8mXR}$;wkIbi1uEyFc&Y0kadoiawzOnVKAUX z$91AP0nCU2EKEdRO9(gXy1I4i)|00%U%cFX_WV$_jS^VIROi#F*R7ZoizoH)JM;pg zW-oxU}F>nru0_x@01 zWF4<#2$4t#M4of*fl~`p<3jR0$Fd{DU^2Lag%A{3B)h3W9cJ#99B?YWH}bwnfK$o; z2{JNrKkdBNY)>VPzM?!C`kSVA_n8x;%S7lPPB{q&Cg&I_ihD3f_IS`*?p)CBrrw40 zh`Mz<*rlWxwQjY`1}d0oFe$kMD$c}Urb!*fpb68>adpy$Pxg)pbzmq7D3<)ChLE)- zkKLW_1duRG5XOv239RPka~Ceb2%F>adTr$G;oggn(zDqMJf84oJbHMiee>bkqu1_? zZfqi*XfvH_)0$@%H763*O51jNcvxrKU`8U$H18iY`zP(eF-}s|STGT_Xe1?zGPtaR zvs0**L@6YMsfR=5{mgqB9*45F?&0)smgg$j zIlH)f1d;dLhXxur6+_aJlFaAk-&*XR<(QBD8(Ca@CF&)FP*qiou@w3(RLcG4oWCp; zwGX)L_}k)pZ9Df*Hq9vkn2g4uio1IUPo6&c^zmmWCnpLGA*7U=COMas=~{S{{Q@PB ze*@^NmMwpEWY;3Ob%ir}v8~(RMX2-cYZ5RMI5=QVhEmj&Llg`3=GrZUx{8rQ?IAii zvnk+(nUes?fIuz)1Cb@A6d13(a{J9UzxnLhvu95q=hQk=7bP#WIE6%Xe0cb==980? zPd@qN?YG`}@4ffldFz|EZ@=>L<;%6nxUOT2wVJEDwmF-IdSqr@$Q?_Ju~Zvr=5uBy zMr1Y){e{l%-Sv##z*ooziP-@rGIt^}7Otzv%rQo7Q_~=6donxTzPUvlSvbwDX=aVZ zI#$(W@}nO;{n3v<{+sXr-9P@1fBx*ri+R%;M>Ux@b2D?JNxg;|rpc0NR@e5MZ@%&E z_ujs-y%{Tr3pBO!EJd@nVGx6x*%hVXh1vaI8+CG5`8*ItVvLruWzD$>P9qM1C2-8j zu>0)!Cm-!R`DA{yCwV%F_@m$d&cFYofAj6PAAR$U2Y0u5YxHPi?LQpu&i?iv zfB2(+_}dV1`x~#X)gvR+Ym?)qH82x_iI{^I54@WyGYg3mnUSy`u?vDAO6jzujlz+Ck_3eXB?sfHt@yhy7nKwTJ*rb3i{V}9>1*j{ns{czotY) zUs$_lfPg%3I4|^ILaF8EgY4(m9-4yym$SdWD64*lPFu<5dSUp^1?`6|OC2{1lY?J1 zj_jhRUQA^?1M^BZ@|6toU(gXaj4K(&vR#lHeF;Z9j9oHxg6Q(wU1R>Qxgi$z6~c0^ z`Ag}X@%UgoLtE-;uFPl(f4$vhzURegl%DDWpe}lPzbK^L_Ui(K`?6IRz<-wpx`^gp@&T8ht;QUk8NV`{ zu{nI+O!xO~Qrq^%XtF*IAq?#r1;k$F!BGOZ0S^nu%;1dE3R^4B_2K^PXt<_JZ+b4j zTCV?Bz$nE8zhWi5D0H;X_jTR9w6Z^!9#)=&%i4Sn4SX;qa;+G=n2W)Ldb4>5!QIV# z5uE3)?hbNdfXo5!cc5xo1n>b%^I27unQ3wI-M@E5i$qnVm$N$>R5?t7KO96PBm{Ex z#TeDiJPTPp4ly#2+;HRO#yj79^UU9(wkrl~*V!p_7DH-)SE zXf$z9(vrcJ9hI@W)03w!Kl%8x4}S9FPal7_vv+VZo3~jV43=E(I+!D|60wo{#w0#? z@Y=WDdFRbH-~7gdhqrF6vtu^B_vUN&K6vx>fBxYQe)hAU9UL6Ia_9ElJFkR*G&h)= zrA7~rj!r@yHrLiSHrF>dwnCJusziuc+|8WSjY+yZ4~u#2!M@$Rp%0sM0GzFLBX@@| zk&h=*jkdOJb7O1m#;uKwjosaY{pqpJnt5v7%-XgkB9Q_DCJ`x~;HqL(E$CCIn^|AQ z`Sh-*a(0*iaDk9IGhxBs+=-k41QwwX*s2h;Yw=1_DGSZ+#2(xsQG1hP>>#iaJ8Jc0E+w`;m0GOSCL}qG<&6pA)t_2>iiPqG3l}V41O`Eo9 zJR_(!%$3s!DEWITb+{UsN)lHnh?yDYTA))Qa2;u5Tu;KBOq=aCpS*mU z9zTwsyt@DT{abhMZcH|AvCUIE&9K>QMmcTAxaRQbv`P&)__G5X%%^+1^Sxu8TF96H zW2SEQoB$z2FgddlQ6&w96R!?^w4?PitDafh@p``=9fi?xSeu9SCTyyVNJ2$2mOu{5 z22UJy90J9NN~&n%@n~zKzI*HD8xJ46`RMgKx5kqiHTQ^X0vQgE=bwD~__N2)b`NLs zgt<~ebO|n%xbrkEN8Y%CzPTcw3?%=4?9C+w7XSbt z07*naRM(qN8>|`^3@8DB!p#l2L>2XJMKVB3n1s2xM`sciNX*$#Y6lQO5bG+|B5_=A zZW%>kFb4-K$e64!Ju2fjhB6tKg1mtmGbg`sW9wV*zI$-6ms0cc(@($zDz^rA!Gx;B z49c_F?8%cSFJHd=@MoX===~pm>+N?RJb3W#yYDhrEEPix0Wc0B5~(|wV+a7C=H^Y) zv~3I5{>-{}F%w2abv1E!fQyT?IDY{*D1it&Or9Kl;-@{*yoa-XCsECZ^6DJZDv6CO9if3Xk9v%_(WF&N(IAo3l{#@)9)Zi}(J!MOp#Tk7H=jnIWZRfM+3s*kBr}1;ZY2e*8XvmiwJqJUNz%u~Ov~VsGdy$v{ zay3f|38PSvxi(Xs>(Rl%i)YVXJpK6a`4h4E!+W>hc<{!5_|t#)Tkkx2_w9#Un}}xa z*j(dx-njRF{h$B4yZ+VpzyIO;|47kpy!KE6Kb^$$CtayO;9qpI8IGhg|nS5eTmFape*Q;r?}s5gZ7aGKYE&fBQoHFOTYM zKdVov>MEtK^eKoIILqEU%UvGkJ`pAHS$^Azma1k2ML`k*05g=jsXIG6@4x^4+S*#v zH2eGeDQS$+-4}U%u|QvSF3htM-pYGj`o38GV)gF0I{!SqWqg2BH?tD!dWtD=bI)~< zN^D&7`ugP7ty^!r@#x#{z5V((?u#I6g0FO}QD3#&9lqq}DN%v1Z~#fz7F`#*mF(@#JB^y5!IIhoBR29gM;lr1+Ygb<=cAx)Wx>d5sdy!Y-~ z?|u87-+J%2wl~+>c{j-~Pt4=g)U{_YJPr?CtFdMGz;4CT%=p zHa$6+?HwL$Zl0`7pA_es*uI5{lmM8tqwhLaKr zvD6{lys@>hv3BQ`d(U1x|MZh*&tLA&Nx@+@Zx={hGb-C=f$u3xBLY?Jf)DhpLbBj# z(knoNuw^fK&lepM75BD_NY1%9c-pp03T>)XQSl}(`Y*9IRbVr7CJ`aFg#)SIU8RgG z14hg+s$vk;D4dK{Ib~ubBVr?%n;Fa$WDq0s0>v!Pas~yM1LBUEXN9n5raB@AZ?kKl z*3p=!;EACI6*s3`^jIb7izo&Igvdb>Je#U%YJIM`PTo`$$k)eFtST-I2U*Dopa$pS zn59#5B=>P&=s@3tb$2I%61un(aqsZ6Ld+Cc+U#afH2jlh|_g^`fVedc>j@pyCwpyvxiiRu_ zJDACKfHHi3zo6}^5pidHFl`k^klxXcl7kdi^or2?i?I*7-w)s1V@qx7B+@+ z$&@`b{q$R*cmTS>I8LYb^mA!((-l4tLI@$mShr0RV+=XCb(c@ox=B(~_YTr#;-0dOD1YP7XY%%6Ss7Q>??? zyIZp-kP#EH!-c@v1Rw{iQ&J=05bF?Yskk1GN8>25Zk>H8#Q}_^BnvOGF(6_hAs0p| zu+7YXipbr&cYo_UzjJhSu(Pw{x$P2BFvGb^)ax#>3L!AZob$71&vth9e*D4D*4Ea3 z?{|Oq(W6J-`qnpJyMJ$OZ4@hUPil5_d|XvkRgFXhEM(oTW-gIor)Q1Gnb|Io2LM)B zDEG0GvzG)VRaK`%s+wE@f(S_kswKwMSlhH{(rh;S(FY&=)nESk_y7KXJbyNuH`XK_ zPc|u52DEvWv&QIf4h$hm?KI7%Ym>>Hn_K_ufBg4<`al2io8P#TTgyo!8#`iES!&&2 zT1>tI5(ToMy1=O2^M~&9zpOHQ34QK)`~~`SA}T^x@k1=0#E$uNR&zbW5+uOhO?t6dqz2E(v_ul&b-+sMBq2}Z4>_NP)xQ^@p?%#Z? zY5t=G`}-ff|KUIXcM-Yq+Cy`$M-wtn8go!qi2RlvroGntS7_w0s{8 z=Jprsmb?3<%Yw5QF+2KP&TfOe>t{av;feO zrx&!p`2PCRhxSXQuX_GFEoMNU$KLceldj3)oWDE^ z=$Av+=QdvsgShZKeo6f2!d>?jAK>fC^ULG;{IOj;Z@+S))UP#Nynilif3BJR`VQdL z8W=Q)AUicvQ4dVKAWGsQA_ta*v!z71<(nZ6cqud9=}0oYng#n8T&HMFAn!P;cWf2uZSG&)a7JD$Z^CF(myXQN)q}>5IbN-fVjGgrX zub%fy#!u$RW;q7lSligHv9?BLc6@xy94Jx@fr1DNkkKJcZ3U0Qr+56RRz>G#7CrlU z$bW!K+Y{h}_SF9u&i1exx7goL-M=m-wg=H(M(51uz)5ya#ONvl`112UIDJDddV1dh zgbwlx%xCSw*9-RIFfsGCox3Y@Ke+PmWd3qA zI!0H(jAN)Y8=Tx=-a#PI8S*+SJb)4n`gtPtHTMJch=f!A`MLLz6N6N-~`$r#r{OSAefAI0Ak9T(tld4gOqj8f{Gn)elA!usZ0Lz+M zCc3$`{rZCkuid--hkx{2+c(y?HtHxADyl>*tIykGM;+wRgZmF&y>~Ki=1uc*cjx1e zKi+$J(zNqZfl>kmiaE=?@#f|J$*7*r^TuYgKAwz5qpAubqGl`*79w(I>+1ZnX=iaB zP9=a4A~QP`=dqe8kU#-u<8d_}ZB(@frqP)8_olO^b&PVdlp8Z6vSMN*B1_7pN?{at zQl-qMs^&uGUZA;UeNO?P1p)6UE|88t7yk;mqc3a#0LAN5(!HL#fmJiy)J2uqOXagp z^e{3Z7dLZZF9nAIA~x@C&mJx6MkQON2oc1^B!|EiQ_hT>EPI=iX3O4!#3g_f&Wow! zuEHgokLEy&T7cl%s0O4+ZS*E^iav9i8=8phNCJRzDbQPLAu|L-hT7dih_2bRQB@d{ zvZzPaKpe?Mq-2SAsF^{Hoj!ZF#DJ9LCk=>n1 zp#?1Nuo4&L0BGjK)NwZIQVsUIOF)GO_trNu5U~^_Fq0CI5QuD2Ghl*D$Up;k7!z?F zMq{BAJh3;yr>!=PH>ye9EEuu4XL5pDDcEZSG7!j|-5A6Ua+V-wW}eNgc*TiQBpZ*W zF>ob$t+M^89-qt(XHCk%ykbg>ET}w?6`pEDWz$fE8(=~dSz;jO@+i(mbFji24Kubn zZq(J7Z2sxf!{?v<;AcPl*;{Wuc>U4c*B?E&U2U51{P~lU-JN=RXfIz*pUvqc1Z9Cw zj2IruG8T`js4}M*Tav`Fq1bTT$$sedj*edH_&GLrIblQ$kceDubH2d~}?0#aCm7;y9E8i1qY{Bn2q>9ZFvb`B0s zX6h2xZq8d%a5lI(rN)o|CR0X3uqE6;C$XQ#$1N^c2Tt>*oW??R2a9^=TXDPAbv+)B ziAW^YbzN0e5sKVsdNMycJQ-kfg?Uk?cTkhQ)A;PtLQ2E?{j}M@k9BHdD+ebA9#!M< z+GKnCPN+vA)JbhLUVr}L#q*tARaB!<3_hEmOi!9|z3Cm~x74ZDe#}EnXGNM_l~+&A z*|aRLuAmk!*N+y`)TzDZn)>GD<5?gE`tFAYg!8-ttNPJ!HimC>k^Vl^H>C*bMASDmKV@KKkA<608nE13=TM(_u)-|wM0P4dH^aiDN7Z-|Dv?-o zB?zL)jMV#eau<+$;Yn~H6O@S=7RiMzwX-O0=1nuNNAa6)zd4;9?jP=b_~D1`Yz{SN z#K`VM<`B-_q~z}EYVeSgPET^v&i>1P`G0TU{ouiaf4cYTomXGI^ZGX)Jbd`-_KmIa z+RY#$B4(O%c6AmA0a=NR|9|%0tXY!dNEiFuJt8w}IZH367c{zo2GCfzfy0?0hgZ~S z%w)28kYsw*Kh%pJq^J9EO)|S?8Z$lIJ99<5MiN{AG=K(rIj7HFm6;LYu7}91$~xy% zFF=C>4jD8Ss`F%JMn*<>xPSh+JE@sv3YrK39F@A*Nq}fk2m)Cuq@ECNW;s6x5+gZN zQX?fcvnHZ#x2JXUq2oRLv;l2thM|#LRNG zWT-i!LY#xeS$(p9_~fgH2T#5_-hF^HyS+1g|K10G^P>-b^n>?)@cuh@Zs7D7Uf={| zF2RN$FNM0ErFK+RiD*{O!$EskAMDrqw7&ZGYvXI%7**ilV}c;kz&NKa zzP}&OrTqMQF@y+wb}M`DzSX%v+fC5dlm4 zcQLQ>k>PySPg)>sHi!eh==#su@1CiDE^{BQ%ELAN>2uHUQvT>m&W8)~O1{$Ze9n5w zHyoVv%<+6_eSYXUqUB%v%Fx68Vu;EP`@GIyGu%%Hzgp-^i^Nnft1rD$;@6*U%dhy) zF9JA|T>5#QPaXbl_4DNu?EHze3nJt)$8gB|Si@=@iitn<@fi{#hCysE%RIV>xt1~7 zwf9{BQW-`!1IQQxRx>g)s4d}^Uf%V37OjZXKYknVF~1A*;o|jf3=%BHxes>&7;KdD zm0IT?&35mrqIjKm{eC?LtEv)PS@`Yk(bXw?ZUEHv+e_OlEdTR$*2_f^E$1bMEuu44Gv z{C#ks*TBw=)p~kb4x;MLp~1=7A3&6|8AcH)N;fKsn>(9t-oEkPdmp^{=AEmTcZ!l@ zKoT1jP6(C)K`ZBScH6dT2!*EJGsYy$1~y`0nA*|F?8~nnef;tLk3aqF@#EdoSrejm zNuQaG3pj4urmb5qq84L_0^6Q$-Mf4HCqMq{ciy>u0O&=>p5rN_Iu$EKEgVARfwwLZH60dP(h%h{Hl>`r#hiAZ(>w{07f?Vld1si_hr z5f+jB>bg>$N~)@?DJAb6!?=%eC+dn25M}qRQmzb4Bp^{v;xtN1MGUH;O(AN^8EF#{ zY4&SoZ?a{Y1OvVX5h^AVQ?cX`f;QfY%31|mpS9dkGE2l{#Ab;h1|(vJz(C}Kk{JWu z2!ukBTp}|&JgG}g-g{p-&yq7$LL5x9eLe(ujF39@d@$3UL%RU1(N~A{FcSn-T z<|%{4MFJ;FFg8*kYIXn%ESY4u(H22=0QLN!i}!aTAs90;Lzo zwsz*p7bMB^h+HLHJG4skIs~(z8r8@&nHordL`h+}0t^A7AP7h`T37m-VWwSfRm9jt zPsOE)n~utj+CM#ta**gW%-X1$b38|(lD(KFHA)~eMkZFU6fRFF3L&u58b)l&bo0-fK9l?Jdil-PK>1ZFLBiTAFF4v=JD8{Yx%H42_v49IWkS4Z(mSCm$ z>BjW>&eb>W+`4h?^3K)EJC|fs!4fRM3jk=smtQ>H-8+1=yLWhc+D2}*NaQR^1Qe!F zBsHjz<+Al^=?ui!>n*)WZ~f;p(d?m=$U9C^6qCthG#WWq|gY4h?@hR5SX0lqS=Sjg84V7UN$2{fQewYua-o2Cyn0R0lf4K$lpjf3Cd8Z^7Oi%%+tq zuaBTQclZ7modscC9rJuNrDOmoA(IkFnAq5FOgFh0xvF$!MFNlnz>;!N5-HgN(xqrA zDa1=wjk3k!i5HC!^5m!Anurjhn=n^bJ6$T?U%~?yB{HPo`UqHBR*i$q{#$SS{V#s;)1Q9$ z{=K`UlhA14sB!``YbaNm@Zw3b{|IViU|LTc8H8ai6;zy`i~rhf#g+uHer3JvHP6^J z3(=i@z|-;An$Vog4v$XuA3lEk#g_-WdpbY3bG`WBop*lr)1UtMN8f+@_N}c=o;Xm% zr~m_w!3=?Gl7=>gwgKqMR`J(A{NUi=Ai;k1`_Dds|K4a?Y&qvVi6^EOn#hQmnUkiN zl$Aw9gVx8*?6^U|t!sCLtJ!H(lcboXRtoZ)S6kI5^XBNwqoa9f+MD6d__Zt87$MF8 zbz-rP{&>aW`T{%m%$UB^rEK|~h*+U?_F8Pvj;e6cynRLX{)IE`8TR9=Y76Y*?A^cR zZT3a>qi^%RE8nS){662-?_aOHYk$=CZIAy#$S;mOdnUi^y)U}jGq2x2<6r|iHyQrK z-|07L7s;_d;(9!1|Gp{#w08ZzlB+-OzR%VlR-Si_o%KBZdF3vDg#F^rt-Y-LKXd*9 zLwkh|;GR3ysV{v;F6KYtW&H5x8N~VfvpxRi$8!ODFb$4GJx1I@- zjp3JF+G}`Z7mVlETUtYw;<-Dn@6SRA5;7irp5cOJKQ9>n;glQlN7meZg+aOO>r0Eu z^K}|lpW6D^U$e}SS@T?L+u%uujF>eM-quy$$$YB}@DrdS1t6-bss=^M<+yA`0uL{? zvf}M*PcCR{`0_8!i^+TAlAGU8jCJhDuQi_C{Ctrfo?pKVQYZs%DUFCI)4&%`LAqRD zq^pZb2j?h|E9p_sBF{(8^?AU4I^!&PR?oZNto9#DoCH)=)pTP#9x;+y3|$a#5n3Om zXe;rBbA=NpY}&aByRfij9|laxypEo;fY$L?*S!T@uCB~L?AUgG`CQ%VSb^b&uxxhZ z3_`K98DLmz2R*O<7ch3ui-4~)|9kgkj({Yrb}?tOJUH4vK0a=mMpciGk3(n*KO!n z&%Yjy>N)ud1+Ckht*0Y&KOyRBQ#mP^8KfyC=iGEU-PyTvWqbVNAKbWm=lZSJZu>&o zSv?P_s>YYM$4r>dn|WP}qw%N^@l7+I&t_FsWPgh=8&QfHHMS|%P278W@X7rLAAkDk zgRdSP9nVz_B+4{v=d-#liefYwyTT_+Z8LZ53YO`{H<$q=DH#bU6wP#3{OUM(jSS8y=o{Fq=>BU3XN!^Dgfo(!4*Fq0=@qnHB|O%)+3 zr8bxg(Tnq5yfAZ)>QEl6poP0P*IEWGR;&WZwIaxJ*>xjW4-_PW!Gz3&*oerH2qn{~ zh)Io+eQj9^Xjk4or+^;Ti(1rP?cm55v@ zL?Gv=bW(aq#Xdq#g_~qeusTGoV-X302#JV;E*XskI?sq;>Va{#?+fH9e4@>DV@5krt%+u(FI zKMk?DA=oarDka;JK3!>CF{i4PX)LBFM$Q)s1(RcVl7hS^=hdqij~o>?8jUVr+PZaf z=k6PC+`WD6>SZG{Hj73AcyFP_?&Bwq9zT8f9QeL#f{j^1lZ=X-Xk;6tXItvp|nVBeRq@%@A_F=NMB| zRqx709{44LWKf}PAv$s=IxgSPbRT(8vx=^`p zH|*J5SwiMr@)`Ql8GCscF*7*lIeDrU#}`-ldiLPD{+!q6SB%D0bnF@JycPc<_WQuz z%$3;I=`H7@h`Q^$f&D)G!Hd{O=enGkH$>J&1{+fX$dF(l;-aXe*dkY!lTEmSixN^O zsTw6SLu4k9F*w&x&qcw3)J<$sWGPBXkc2=mO)1aVkm9^)rdyle`{DOOXg>Prqu>4Z zx5tNvuxM&2CtfBYX7QDXH~17Swl&mXEUqjoucUR`{^p}ke)XG=G{txBzIF5F_4n?* z{pOo*Uc0(8-58Ink@v1}>>PXNyf3ZDyMF{YDHCx{2c3Q1UDcv){&y5xRW${fP29-L zpssDKZkwZ{lP9|edj|*q@&Ea!2VXsU{A4ev`Jx~iD?-x*N0bs^PMFwHf>~@+OvT7~ za%ENAxU%(wci;JUKl{ng|MqY0y>(L=ZQJH*9Wg2!EMYb~X_|(Mirpx4*s^R9@#`lX zFQR@Ialq?Oeg?krBI|v)vKC#UmG!=^78E+!*eO1A=2tJ?I$3RI=&eN{*X;wbD7vKL zmH;gQJrtPs8c_*0mdNy!P(TKfLyX_h0+b_kVEX`gFt~Ak>(h%tloe zLNg0V*q5VnIxT{kwxlT%>(0)`fA@>Og>$E;|NfIlk3RkFN4MVjz)hx@Y&yruC}zlm zvqE9a!c^3CI^LgI%Ujbc)6w>PZcQX93KcY|ra#p{+86Y}vMNmw^O*X>7N3$M#6)Dlm?bN8bcZRd0Kt>jr;)1U5EFNlXMemgw> zd`60uUHj~QI;;Wwjqu(z^5@m!$rxPV#rF5*Z`Vdl=C*D;hZz(u7|#o?LtRh=IxTL9 zn!b3u2yeuNceI+p5@ku0FpaKhJqRF1XIR{;X+hYkm*qgAK0p-2DjO%pdV5-!Ak)xMe-3 zZ_z`qT^f_@lCl1Cc>JvB`4*b3xMx=Pzuwcc=xx`-zqE_nkfr!7w}tpSGk@gUm_M(c zsIo>4%B7_GDVL2p07R}d3xF~-Sppl9f^<>xWl@B$zxa1zmcA;&>5DX_7kK7w{aWX# z<=#n`M=>)iwL7-B?BEv68G;7RZY>K_8Oj$W6khEoB^VFhm=V*nnJdGGFfhmo7v2@Z zAW~HzIr8)QoZ8s9%?~8fVOO*@G?tzjF z^Dh3-=fKUNWRB2HFcBY<%}?fgdwX9#esFMbkkkK;CRH13OfZ5bXu2rEz?S`sDKLXA zmxi^Jk}xr`5*&-F&So>U=)Et?(mB_*^&-}4QD8WSj}J(%OFF{0G%ME0Po&xV^m;+M1bDN|K{3jbcp4$FupoCC8U8 zk4BSGiWrZ_!pzLdlq%- z*_p5-R=_c*&VW`nHipYN#66LTbIvPED^07lnpq^ud4UC(7@)b%i3YEC}e6R*&PiAi5a&kvN_Pmw1p}~c&CMOS#aUt zCGQoQWl9dB&HEJtKxQT>x*ENRF)g+g%CXu+#Ke@;BFu7qdogzG3>*y(2nI4(??ewZ$?xtu^GS`8_w1g0|H3rfodIUKRR)fBc41-qsPR% zhKFhTbaegLUs3kTBbCxzNm3A#Gi737^3Hkko<*p19II(D-70V0y!rOsH*Vj#xxFdg zX>6$Q#tZ>Mpr?oPr@K!cKYDU-G@D0PCsHnwacn~!%vh$IV%wt#|ZIHDi z?j?CA&)2tHgCI*4GXj*^dCwteN}2;J>+FRM_W`Hs~i7fzj}QP2IEok{TQ z4rF^Rr+v-^2owMq#aIDT2Nsf%6q9PQ=||HDhATl%!P;fc2MNX4kbra1c#>SgSBY{r zhL%lU0!~~C^IS8#owbLDhoft{dt(ck~OpMUs+ z?_Jp_f~LZWnK82&PG^l{Du9z&%}9piGWRBjHTP*Vp3zoaXy38cTPVXBzOYKp%>2dt z=U#0 zAO78s?!E4JF8ivKX4agjO-5B!fRZOo)6s~=m^YT?Yp!rbh%v%Tap(0*zxdf--M@c- z|Ns7{y)QnwdiAm)RE1|(1rTCV5i+H$$FO6#rmjy>Bawp1g?M^& zGOwH~-H6LF#N$T?4e->7SlYh(8rVQ^N>OaFeqYoQ|0A|eJyu#`M|n>%K#>4uQh%~Y0NnFy^Zzr{xQrv|3A0(2waX3;5PZ{R z<*F{~)C6QiF&o>41Y@%d{e$3pAxMDqk3htoi)RR5c30~LWWl7!#{&R#K@9yTu!2qG zyyQ6(O?UoqlrsyJm)E!9^#}hM$n>tJY-iuf;=2v5xmv?A4X&{K-j86e$+C1(TKAT@ zi_Ng^YQ!zhHX4jS2KNO3rt{~YJ!fd8lj{r>KtT?cXG?D{=i5;Nw3{c3iDwJPOdgFP z`IpXp)eJzpNT2T#iZTpIT#5 zAU~|J6H+4qNMk(*3>1mMxx!_>XzGaQO9(@0(c3(PeLr)Pf6P;$daVbC)d3OXwBQhdmGGh}qp}bm^O}XDwh~UVC%vQ8=w{-Wc| zEBf_8x%m5WMVB-u_%-D-$C#2T`9fiPM+d+A#e5pvGnSqqeEG91?qj90tWq)bo@{OzI?(X!fuO2*o`czz*f;LTS zM#81{j<}G-PaYpvRWmLv{s`1{dDiN542!Jq?Na2W^c9t_h6A>jxL`)L^ zgrqG9(Q^UG@2D*c7WQQ^+1k8)cx`j{$-%=Xk00-%o}ECPuqPrjYLikTDX4&)#?!*F zD_M+Uq7XU;lBA6EI_uV&kr5F>p3h89C{tz3&IbB3IS|ZDz-+BACu3(Z#-yS!~*9jX6JNN9IUG$e4^x6$CW~z?r3+T&^QWgs~SjQjG~x6guKjEP`q= zpM}Us5z*9QE=ny160QL@N`rwozrkoo1~XHJ zfB-l`mIH!ZFd4JFki`_%)D6V^hFoS(X4c6)u2|>0kg`FiJqfDy5JgyUo(iYhTyx zypDBL@41NxnhcIbOk6Tj)exIPq;gC!iXk+Ovzn1SZM01zQ8&lc^{bb!T)8r;wv39S znf>OIN5A~d=bt^ApN9Qt+li~>M${gKG-{ zK#?Ft7JR&m+F9ih2qKFiQ6Jg`z%VKj{y?1-_?w!}(c>VTd zvf&&%uL25U1zS)$*taLUd%KVK_74x{^Lb1N%E`n`4GK$zkRfSPd!yd+GJ`0S8pCq1 z4KFlnLvO7}XH6JP!D?m@Giax&#;B^U-)n@3 z+7JLjw`!twy9v{fsh#aaVgO`fW`>*_BWKGXBA2wyLF#?*8iDPIyFx%w=zdH@%X$Cf9|0}cnUOGFMxU*%52$cId)aTD*k;A&Ay5{;_ z9bN#6uq6C;*aa&f@R=B@K(58x_1h8wO3Mgx>!=Lg2xPp}#U6WDL^hkH`TS&e_gF-nzn|;VZ*FdS$5rJg)6ry7 zO(v6SR5<5$wqN(&k4B@iEJZqs8WF`9^CllcXqqse&*$@b6Pw46ziOK19J2b2>Xw*r@WQkWwuuJnE7ghj~)cG&OZOUk1UWL$n0l zOE*;oMd~msVs85RNdw%xpP!w>IOoY=0N`Pi&vLCT<=6s0$^W8ec}n*=#2f~HGS(ck zn&m{kBP}Y+b~P@-42TWGy5g}0Bh{>YlW$W@szOeZgMt%*%0#6Rb24X9G^W$T zqpuzx?tV4fe-!7(TNK{BedDKp{r$iFo4^q<&|<_T7^%%XUT=gZAg{Qh zWPpK`89qcLY)NtR>hyp8U;c4i@c;I|{~y2kPyg}F4?f(Sj?KFWN3KdDA+?SS?2xE# zqb5|-4ML?wOi_Wl!|S3DQDH^lDgYWRm81jCyvmKb>5 zXU-W`k>vhJkMQ)U&QQWH?ROpm*aLf0tm-a!X1`mOpuljySV(NZ7WmTgoDKn_#X8lz z?_?u^hIq0Jel=(vhCEo;8UMrp&$M%x$p!rnxTp;>w4ooj+(GM)EKoJu-#pjCrAI?=ygK=Ayp&`0he&*C+ ziyeRY6#aM-2)Qs+hP->hk#{2M{AjDN+zPF*yBYzY*fS@4(bdUq2kTsm#zXu+_bQLW za77RNP&hZ*oqwtuPcwtbLXO$W`Z}jCEqb*WDul%u{Zr>#4dv%xPod#R4rj&C9$8|` z_OexR*F-I?_n=>_D6Ee>96tN-D#PSgE8Xerpw&<0P2E!3-GhE;R)kJF#Ov=?l;`Xvj&bu;JNo5$azEqd5(sL$%9F^qEL zsKLlsVVp}wvFoycA`xT(64^qj=>Bah;_uI#Gb)m;u7dM^H=gbfhArEwk$wYWQZ&hIDW0Cr)XY0qjVAMx*7*@TIXs@-|MH99 zetiGq&pzMVKZ=3skfO1Lq%pN^8(ISb#E>Z=3^5|8BPxa7xOMCOci*~u`}I-jQc%w# zu-LTlIxy0pJ#sXBHF;L&|2fa9Fr&hAS-7%r(@A-9a_#=750W$Qij>S$0BYN4mWmQh z6H+=lIhmEEOeT|!jg8T`EXz_PmqjB}G1C}hG%kI$RHm~HIS^-{&dLM;GBqt6Gjri5 z)5-YK*7o+L&5ezXz5Royd;4wDm^3M}(1^{YhKaUt-`oXd8aaaTyVfA)d( zet{B9XOrP~p{2w`!c=-;cu6Vw`TR6{l8A^{hd^@<=t(Ih=R~s0h7(eb7v$`ehZq?F z8Up|_6Bvj^;Ml7wO0TMcEwV-;RgDU>q%jzfGv4Mzmu99011F>ik_@6lVO&xnXw=wI zBx*ne1mad5lt>R|O(|4~6%HlHQ^B5@EXGqKWmO{; z&cr1mk~YR6PYxh}J5UG;W44ZVLz&~Kd9*v=AyEe-k6ane!hB{%1jp=znJlFcm>~}0 zgffQ-F==$ZaI7N43?||}t6_etIa-(djwMobp`zJMmxy4N7)i(&Y-|Zk9^Rw`YL)%@ zDJwZp>V%bn%t)u3)3%-;pB##%%JZZw1klu;?(bjP-neu3`rX?%U%!6!()Pxv7?Biv z`zIg1f8%E#zWp!1dGMcq{n;NLJejqwk}EKdl-N;lMM?qf@o9Tx^DrJWm7Y^@WmOb5 zAuw}6g(Gz-#MlOF)Y@+ES0%uCOc_%)7!aY(2ghN4GMBjc-?RVaM_l@gsTrMwf zmXpy`4S;!r8bZMCfgT;7?(QD!J>5S&X_^>RMGeWskSkSNW+f7|!xxtzY36S+p0~kh z&&geU0#IEhrOC30nN!M$kr0t8+BVg7-L@^*UVdBW^R`&8C1ioq*F507{1-P!X2u3H zn@mP!S&pjlXf*QPi!h+7#5p(2vM-uBr1RNHO38_ph4{i(?#js1ts6J*zIpuH-+%J^ z-+g*~a#~iC$*4+(CZs+#l#*!-!3fOkU4>P?>l*!kU>*OZt#6ArmAAOHpICmbXtx>S zT!D|f<6TxEVJ=H~nFzh6~VH7S4n>tBEQ)o0D=9H_`wQcz0C z+FB9Gi7$&7`;q}MB(nqt7)D(B-sT}z4GGL3#=+5JB4g3K3uICS5mj!(Iam716~Yj( z2|2K(pkO0&Myi2AYE#f;F;a+{VvH%7YNjU&j8hxTNZ7f;kH^!ZN=QTwmdq87L6(}- z)`jO=H?H2kdF>znhrhq~_M7+KdVO?sOC&CJqxJdK)W^Vo#g1fv)oaWSfx5)pB( zL##2M{i5^iyVlM+KXe)X-p}E6pDfH~WE~`IW~!7d)fzxzL~7)S3+D^xKz?pW$ta{S zKRw>xJNoLu(ZdJL@xH{9J2$WV^^bn^^S}GahacX%`C2h5lz}+Qc=G~}TqnUaliE8e z%@Co&m;TQ6|K_JZuIH!!=fD5I9)0#Z6My}!cis5X{G^Glm~4zgh)gaY>0;szJFIE_x`lodiTa(+IO>c)Fm^}d4C5Dowfg(?YVpO z*T$*-O}6#w;a}Rn@ix@)Rzkp^Z5f^WeAP98a~Fsg0BOge=)h}5&wN?ihPl6of3+z{Orq4pkr}fKuTErVBz?|GS#-Y z0+s+FQ!|65Y#^8nnM6ZA&fw`*9_idTf6Y-Hc+OVtn2+$;6W2Cfp8rC*kq2jXaC2rD zWf5c67re>bIud}$sH=;by(2_@!oEznHrCFP<|SjO2Zvx;C}pIZ&%Wp!J9|N`f|qYS zyKO;311ZCpi6wirlObg2BP9@dCLv<8l#<32RAa57D1F!YKi$Gdw^9zRuob(H`BAOJ~3K~z0DIyydW05(!JV<7@F zOAZIjZUf|)6;*~1=W4FJxb>o~CcnIp>~+EO_Rc?DNSg%%8UTpUrx@x9o=eB@iV1x| zvwp-@#?#DT-Ti?66A)olO&Vd~oYKQ6rO>u*;bl4*JGK~VMckZBwl>E<{NTM?uU&ih z-W#vo+?k9DOEJZ$8oiJiQbxKuLZpC9RZSV>%ouP+1~`K!!Qn~s=*ii!rb2}b;8WF=aw#d(lLt{FTay@P!PmX;mXNmGMbFX z2Z!^z&A5}9rIZ4^MvF05mR1pg2#I)as+tH!QIn`@W{>vf<$%yY z7)&`Lq8z9J&xy`*HSn&~Mqwkajk$jl;Ls#r6NF{YGajLtddT=oH*aaZK8 zt4wcZIRQ;~6JcTQbC?LJYD@?rw2g%jEW$Kd$O>#nxahWem{}ysg;p(P1eOq#TOBLl zEI6u+Mnr7KL7lS6pkaNMjHtu7z1;Srvd4(X}Iud9(+|*Wnm?Xf}E4Wmuf-PC#@|I z5(t*75IchRj>ym^FwM!=QqG(|awGFHPxkcm_~HHx}+qhFo%)Gt5y}5nq(v^1e(&pvM+xI{JY;X5)R-b_VxT;R( zGx1Kupqip3QxdYCx20HCF(f$aB3jI{K1p3X%`-<~$W%LLZw~dYSFFzuEizu7`0VQ} zd-6PO_@%GEu3cM{bL-;XY`G6sKEn0B1nE-nWObK;SAb2B5$dlmc2Z)~C{3+G+o zMZ5xPNS3(Em!n^g*#DRydX!qe^P6r~wsQ^>~jWKl@r*hR^6J{3nBoad1@gB{Ra_Y7T zFtb`Vp%m>h0`efvNyM`^Hd0bjfk2SjWNeNcBu8T_8z+Jrl|}%Bh{+KXd3HqPec3ck zXj5oa&<0JUM8Sw7sSB9L; z2586Y>M*tE;AtilE~}t{&3`6om!3sskmaIky4ze$lg`nRb7s>9RJ^! zb+RtUVcStS*bE$#oz%fX{hL43o?qMCnrwQ^=jO>qrB5;T&JSMt(qC=s#Oh!!Jr57j zOnK8}2!;fdxkA#KUk))SMo%{U*747^c-;VlI%f@igZ`}IpTnxCy&bmZItx6x2YjA` zB@U6R!ChXu4aVpB8qWFimz@Cm_|#mywvYY(`u$mXUoR`)Y!QV?Og+l|jMLZb?|;ns zxj3J&ety1eTh*7A83Xd(kz+n!23oBV{rRQOe?|Cw zC-(+6PS*y}FIhid3CKKuops~6ZlGv+{x{lAUvfOx`FB=4UoS2_{#@ECbO67awi-_} z{QOJ%b8PFGeSaFWqTh78@4dHRZKa3qc?SK!yMgB&#`gdbi&zxo-~{^qb$x%Ud2_6BT!+Cj-X`5s28tu?U$Zv$&`L zz0f16cTlLQs(O)>(&_1GUDstf8;wR)HTK?*$73^7jWNdT3?MQhGF_<=`>(#NR{d&S z$6g(Izt_~eI^q}H_e>uOUxXA>P=zrwkpP^GlHqh#@9!Nv*?ao*>C>kNhqL3^tZtpF zoO9yYi4dn8vni5uo*<>9dFe7|7q=5yPS`;!%Mt+kV3g;+m%h)-(}q9EO274vIO@s( zFT_#z_Vc;VzR$V)Qcfp=MGTV>vZoN;oL|%=HjSmT!n5a;QgEU>SFYT9`^~#=-1+HW z|9CPgCKD&5_3TtFIu`FGyDU_#2hwvbF)~=ws%cvkRXHhBwBwV*nPxhB|ho<^{+YYeIqTdPTZpu$_haqLU6z~X_VoXiqM1=+G% z(RpbM%6cf*|lw36|Qte zXk)BTjP26KbbIsCKm7gAu3ed4yK=QEI5e|*c4{dJd*{b(sw1QL!4Pl)1YzB=~fld^cyG<&-T`}5}M$?VB7wyx1V-P$Z}JS96KU(-01I~ZLS zw=L|MAViM67t$DGXiSwId!en3(XHz{Z{59p`}Lcbx5uR;O=x3OWg<=yZ5xh`PrrQh z@bQ!V*{lvRg+wIIu~TA;Ddxfj9k$XlQlGh*K6k4({ScyS966`@M(n|HI$^;_&eJ#fxXYnzFT7uNTF8@5OuNHXNsthzNmI zG`Tu8FUEp`jLD!mM~%vuh{Q5+Qv9c2RUl?!=Az|3{yKzy0iA zeo+iI_wL-YnX9WQD3?glvqYOYYqCwIysRRd)D)-q%rhxCC3{XRr8OB?HPS@<)8h;G znx**>zNqJwj+OMmg>VEk0R5bs#shyU~+N4X`nDoD{ z<}Lm8in`;v3hqd|Abv>8L zFTBKPS&%MHbj{yhg^{Otx&D;fvOC^&9-!S&4=X%4mb#^v=CfVLHrvgb`d>}UK25Kl z&*k!|yInty?)Tj~uk0t%Et%%?&9Kz%%ap|CwH~ePzRj zh@cLt0zr}qRA8nl7r^|+T;Q^kXO>*PB(&4Rb?bPgIayw>gebj=@8r^2yaornTpQ1S ziq0%)q#ns%4XnyQ3NUJCc_zSwn3Nbc1>l7Ou;AFqyD(E-w|O8|NAH%-9(d(_wZc2; zGPT$GEEk0uXl7wkdi0p`!;vBqlWGJ(C53o|0U2YML_|Xf-ur~S$+FTpmsIwR)g}Q` zGzH2|+9e{Q#!q(bs$KECUy>wW`NU8FMNj~l6zR9|>~1wxt)utKrmx_cyL{f8hbciJ zxm!|Oltb%;p&-=0s3RegafQn=fTq*wWLh2^9G;$!j$a-fot{l6Ra6+VMV`kPp`=2h zN~#29tITRlvz-(g;T5b9QuQ)_5ND?Djy6gG5Nk)?d*y*#@qW$TqnUiDKpU%ByJbN1 zI{)8G_p_38GDsxrVw&?10stmW*iA~>e4#wcg0D5i-R;ds4cZ8O-Kte<*mor;X3c@EutSYLAs_?$d3v>6KoBR9ME-uE0hlej;9-W_` zS0x$)iD^(OF-AbD>Nv}?X}{`Ei$T8{3C}~aEW(=?;crQ@I zNSzaO$wbuYkIaN#YGMed{A3A>L`2AQ=bUjFx!Tk<*L6KZ{ic~uXCxuAVvGP1ZdkPe z1h?(>(o)TKds4SESr{=?41X6OC>0XJW5EKj-wQrFd z3WkECV5xTKSuQj3k!wS>p_&l@B`6^(EQ0_eh=A3!c?ird0;*Dr8Ud4-AQ`KQb8Icx zIxq#LsIk-#oS~#JOnfzifG7ks(L~eF6h|OPvNv(csBE;cy$Y+=u`Y};j-yEQ0SL}f zFEi0kUFLduo)x)a2x9ahR58m6PKko%Yn%9%`R7Y}FZD_jezd)K7^0%htY`%=Q6w^h z+_?<7<4I1VvMMWI2OomuY)$laS;tToj_=&M{^187J$UEFJ9qn8CeD^I)DnH>yz5!( ztoM^GoAqPx{>Y1aculVT#e<)Gc;lC!JpX_G_4!}^{Q0K`2URSPU#77GxcqC1naq!MWNMW7~Vl#jhv&$#M1hi_yeuiR`Qn z8|Coq%)NVkx60kL*9*4i&8BxlF+F1nM}~C408moJY_&qi!Bw$9l;8K>o8IhSS5TI*~|aIPT)G}%3249_NLJ~IvfNy%tUM9${Sjo**80VZTFd-UM;wVkbd z_iz6Clh2<%f98yoK2*LA0^{JU5paxAf(2kw4q$-L;2Tnc2Y{u){u03adKN2jCLMl$ zjuN0N@$;{tb#F(ftu|utQpql_brnQ%hkIX9|1w=gzFXD**}zFablJYXAZ|#22!zy7 z1GfZ-6(kVL*5$c#&N^rFtZ)UnOxQ+Z1?ngSQWj#9cpX8T_>-VaAOni5fuKgUeUUV! zM^}KM2Ac4l2FAdoX#JqDI41%iiuC$HIuQamx6YEW1o7V2p&Vuo%1W%Tk&GydIuWOo zz0>m%-+CyeaMQv_g4Cc*OU+QKBPZv;(sh58W*U!$AsV!plpbZ62qpv z4FJk|N~+dyW?X?t)#T#%@ciJ((c@1?Cohf4hY#=n#gBjT(;t5S!}sppxCRnr3=E_@EB`nD@Q?recmL;u z(Z${S4+k5&75dXUACIc>g+Ozg6)Mix(>!-62_nt2p8zDpA^j?m)PRi%WI1G0#9u!- z+SwZHZr|A-2pKDKX)R`v7`pSnG^?*!ujN;4rbd`)W?qTd)}X{On4mG`m8bOBwZbXp z)wTDhF7D6y{XF|`rk8jfUUP-~_-b0dZ(oIAYY_I0==65_&yGG}LCdr}utj|`p>t|h zmS5HEKiBcYS4XJN_h;91x?sm$ zF`sKmRY74^kIod}=VP@wcZLIAZ;!Y-;h+eXp2JfAar$IAI!ZuruCzP5*NH=l2+|Ln?l znD=T0UFE$0vC+R71n@UbAAg#(xbBVT6z2Qn>rP#-|3z=C)#aD{#adoD*;-hjAXXMI zLnB3|#&-3mNps^FW+t@8kk)VvAZE5i6la3!oNa|PFW_6={zNU`Fso#R;!-;0uU2RK zfmkgQGqXw*;U-!ykujP^oyN^-h(J`Ao?BBdfMf;+5JJeZtl#hVdc7>OL^J)S=@?_? zkm5fSb;qtPZf2!>{_oI+E(>*+Ojc=56vW0d7^Gk>>-yq+{PN|?qtmm47l&n8jmOhz zS*wy^M;4S)H^mq=g2`A-L2G9<&$vsG##1VWkdmvVk_jw}&OOk&0=(wNTkB!HIHEcG z-hu8dS)E_iPWP8~5*K+sn)%=h5yconj6`IubtZ~0Z(YCk-u(v;AKt%z@10w>Zfp#T z%;|VkM-@aehO8lGLz+~KFpGsCojiGV@cHMDpFMqXdV2oy@C<;! z*vx@r?HiL}RZXF4jk$LH+Kn4G_jY#}G@X<$4xXQ#o}Ztemu0MCB+|m!?X8U%>chjA z<>YK@Yl{qO?+s%x=*K9Al!=W&5@MH)o!$A5F`?~K00L5ylou?TF)I>T0)DhPuQkp z0Oke>c)7*q#+1fnZj1rhG>S~5a2!IYj8yDn(AYrFxicb$nn;nAgR)9dLoFh6$TS+N zGX#cH7mSvMOH0hCh!ju*G085FvK3R*q@-32$wmf-Y7ikJqehG#Pkhg4mT9imI?KdF zVyqDrMo=)#Y(mXZq?C^v3200JU;t%N5Gg4uks(R~o@5N7nuRq+1Jmofjs7t2^+>1+ zKGbF9CsGGx$_Q{Sc?m(9c#CL#Q`#r>@*Sm2SiD~5_ZulR;j$SJj))w!_RgBT?*@e# zRQ7y48I7lPUB_6(=q=;=-sZi#w?BCA;e-44_jWgkjzoR*UJ;35tzjl;6+>M(wWL&6 zCSqva?ls)r%x>+x3$DI+d2n=A9@kJJ!=f=}Hm`|1F;cY5Nj|?CAVgnR;wziETQ~Q1cQ>zJyZ+?)i%)+2>G8?gi^G>yHI)#vtYAw-2r0rus!Ac$ zPFJ!GHV1UhKz3f{1^T+lJL}f#YbS@iN-aK1p4GlPq{*tOP^c;~k%h5D#uB+K&wBkV z@0rY5Ysok^M!*SNn!IqCnTW}7j7_YbSrP^T3?RfNMK4z%xjdmMki27{%uqlCATo`! z=F~P0__x3P?D6BrFAragMk4^peM(iCQ?v{y z*oP|Rf+f=g5kWG7D$kBU$~vFexgaqCf*DZO#JHva0O_PAymJG!oRRp9=N>C;N%N5R0=T7+A5x;r(!l(htfMGRICS_K# zpnh*lHHfc$IX*c(JbCf_GQsnAKkt2Yp>|#$WkoRBqyt~ zRWG3`t8z+toRmhi`I6-BHF~YLtfzfv=0DfHNB>r6 zaa^76mvEmQetZ7iQaxW4wOWPF=c}p?{v@d7?&h?-^DoU+(pX|qd$U6C-PHeP{aH5s z{*Ej46)kk@!L!grnwd`jzrqfDLtiUecOQOjd9&X$Exx30U(Z)#0G@j&3v>o4o5dVo zRUWJSHCB7Xr2L)KdMI=~j5>8L2!5~jEMBHJy<)oMXI?ql!2w^QDJG0vpN-x;iQ?1-u8fijScNuu&WNEAW=zsV2ujd6EHGs0BsSQC zd5a5uScj~=x}Wlz^Q;W3rt^Vv|D+z_o`|A#+3mRbeuQopU)86O3wu z>Q0KW)<_l|Gm&5I7osx$V5nvSv0#O=Q)6=u@lV^vYfAQqWv%{mqlhJ4rLIh#QNODqw;{mpM)Jb(H0+2g~*!{cL#(f51#=Efk| zPDay7Q1MbZ=Zehv=rc#mu$B#|MZ$CuQ97UPgw*lMriJ@xn}i!EiXz77eG1V>gJIqu zTvw%DF&vF1r>CbE7Z+7E)iy9VU`5FL7-Ln}p)4npNttCf#0_h0o)>wZJC~5hBqC&& z_laddHL3(r5Wx_XRH9e$)?}=jTe!`^u$OHNv#qWC(rR5eCUv9Fi*j{vHep>PsBIzek&Q=$PtAtb|j6G7b=>zor2#dKz1 zZjgl?L%WE^7}+%VKO!O;01bw|tK@27BT7U}k&H5oDuY~Pn;WiNjDA}A7{!Z7EuIJw zjj*oGoyC!|<|Jqk3anW~uza+1Ei#B|0HN& z^b%REAdiv-$}C&sz?R4>KnMf^Ns1(jMprnS^p4{ZH>*HQN&$dEiDG7%G&0GcaKql# z=JwXk)^=~uAM^(27Z-;IM~BBp)A2;0nRV9nMrECn4@fdTH+OaS_K;a<8v&@fOOsuo z^e-vGz4$RA1LxbBvh=lUrE9=zMxU&Z}O}pZ4^kpgMyI$TK#S83{1VfuY7g1(9RW z0GywXjJJL3cSZM%SVtV7s=Yk7RwJti5xY~5Pe)klZ_p>~ASq~;BW}Do)5OZaQ&obKH+T7n6-q_!~ePefjcjM0W%}~X1G#1cCe+UPi z;Pia@+mo}?$@Jv-?Bx8cEK7lAE;E@6m5+iDM3tZxY@i%t`~XfAMlO8r3nTe6f^5c&5{t0@OBd@$8&716N|v*O{oO%gbmOZ~Z$EL@x>QUo_uj~a`O1` z+e5_rCY&{=J>e-uAF4a^nN4 zvLe#VI+wX}QVCE+l^8=Ez4sCs?3{~m#uSCiawU}G`r`O-dU5*hts5dDCRZ?14sxJO zC2K;|D9t7GhR05k^xpwv$3pudG%(UzpZF6;*Ho#GX&3yzXC%I zt0I~}tZXH6Y-C+0aWXz1ogIu$UY;HNW_)@$w77d~<0l{e=qDe4`=@{QlUw@(B83-} zT!xtCCW9RKZe&0E_&bx) zxUS2;|L0#m`|KBNd;9OdGbuBTMUnSZtVF}Gd6w0FssiGajj{u<)R>%UQ`!L-0C+)% zz6RMyZY)gs#?hqu#b?j92X~7b#u_!8A;q+qTiIH5<-)Rb^*L9eZpjWmwkRicSE@T< z5|K`eAU3ZzD`LxXHej_bQjHh;pKeQ9t!up!y`lcIdtYYQ#3 zpaH0$jn|cM9m)Nu;XgYKyi!NKLT|IMKbLL5Ysz=qx=h+h90ttYyBj=i!+);hGv8o7 zXB>VjD)J2VyFUBx(*9g%c449Tq^%|^OBQ>);M<>Z>GHb1zmM?7*7RP(Zzw(WU7jjbxkl??P z*9)04&0y8iY>IroaB|^MCxOfBntpPo`xcHbh2XgCK?&rD||sY`m}PYPz$vwK*&v zymR+kAH4VOop&;4V~nJ9Yj5X^FP>};+~=7w8p^WV8uYfdHmx;TW~2Cvi;Jon7e&$Q z7ZJLCr$b_5@M8s$k17A8v z9Y0fLwxm%RhK;j@bJ2U4s;+CTW1z-AB&|0=SiuSsla3Dza#dsC6fvqL@s^A;){0Xq zi84m8G6gCNF$p=V3PgfY#P(t^P*q9y00CfA)Z%@JKB^0vXQr1KF>odUZx|Gfrt2(W zi)X9feIEt$DQ?WI3MKW9jU~-8x3#sozrVk?x3{sek!6{&+0JHuZL@#oFm^B8{2xzQpAutixS(s!!A@x!lHh@=5N=!YN5vmQ;kDolRjt(#xvq!AG zS5FYjCR72IU_%r2lm!|TT>Chd`Yf+5ati&xj-e7F$f|Jkii*WEjzm7YxcH}o`eJyy z-nbs^pw0$CdzIn-aLew#8~eM_Si{EHEMsCdqHI)#Ml+)A?f%`nx9;D&d3}F-d&A`! z%8AdN-P+yIh!{|w>EVmRr$;A`k50!i)RhNdUEw8`KEx_yS=MO04O`bEB43O5l{H@p zY^b}MDLHplRdro^?-L#|&+}Q#_QsEc$y(bgaT;y)T#%ku z&lqDZ6Oke|u;aFgZXo*f&e}B+aE!4@!`_xmZYYY1NMk_s5fHC>l2M@OU4s7gG6GC>8J*wY3F45ZI9Z;31UvwcHfDhc6IL}+3QRj?|Un20SI zYh2db*d(@O4TuF4l@Nu%NYQtIHHUMJ$Tq&Ye4V@7|qGzds(2KmGL6gM)+5KmYvT z;9xWwRaI40zOHM5S0+oOoXkwhgs3QbJt1c0s31|%h?v|H6fC5yB%~yW8WA;SHUle@ z1*a$z0wEH zl!#zty{Yt%m>h|!SRw~C0VW1k=BS4+U!0vBj80!nM@KR~+}p^1_VM@sv!8tLFMjm> zy`5n{=irqUgFdO~WGvPiRgP+d233e?lp4y}RqQVv%5&3LKd6loq)gDQjcnpE=;1&7 z?8mh)>&f_+pM3T&<^St@KN!(AQ!md35>4qgg-*ZpZqza4HU%07V3?g6C&HuY z`R>MkSsp(=ym)>xy1lAe;}eUX>TuAwj5ey*_Ulax95ucHakMMWU^k&l?aQJ{3haT zEDQBEHjr-jlA){1u`c^sb}0f_0Gz(Y2H8ldoffsLXIU!W_0w6?|Mr(o&8a6>xy{r3 zuim1oHeTa*3?P|HyTw-Rx8(2qX7kBN;S(DZ(X5qK>zh==%l>8E{!pi%5dcxDQ`;c1 z%{F0TqSmuUSw$dFl^8vmC{HQT)J&f=x1qKBFi}@xquI}yinikcZD^iRa-C7(QUu8P zdF)tZ*B;=byAi?-FTXroym`QG*0BnKG&P z#(jV8oySOK^;orCGc96Rn)!?oU=X9x^~5*iNsnQv>KMfK`-xRLt{)bPfBwZ zq^m0J?3@TdT7TQly04?oeYMEW0Z5Tr>$*;%k3$G~=IW|cNf5@Qw4Ea+S5UhDdCAXo zfjYaI1S)LvD59c7WUNtD@4ffFR}4g?fm=$-j;w$@efs?H`0T}tXXoeVK@$3bV$hh* zsD=tDu16k~0OjkN$m2oy~2GUr?rKbx+EUt}g`D-sm3dkPXQk2>8Xt-Y2n6=;`Z zjsR|EW(H)RufptrU#h=zf9mD+4I!jdsnmL^G8<+)npC}BkBFwzQhdmAXDy2as4`h= zc+l(JzH|NC-~Q;^-}&(F&ApAn843g;QU*vO5E!Bc#1ym=FNU2lMg+e0d9SGIfJn|} z08Y=&A3r}hIzIj9Uwm?MIyyQzpG@o8BS>Vn*5%9`q!fW8GKL9~XQp5D@4s{F(W3{C z9zNV0_MkyU466nun0t3_UEAGy^xnf4FP@#8oYZygt7(zhx}3lu&mCLxF;wSg$H&K` zo!vZl!{OF&I4E*!9jmHHv@Ot0L{d0NW0(!c7)X@J0K|+2My9iOLE89FObkO@*JYNw zn>Vjt+uNRur-z4!&tE({IXP(&b!v=hk4)`-RmZV&Zak@m<#f=mdcB^@3^Qx8f3}xB z5v4yXs|(YfZq+ENMC1%>^v_Kw`sb%yyf~m!pD`8y8%^*& zYwavCa5}}wUXz9vV~o)Q$g&=on=I;SOKVhBV;oxBGjn=f6-0Fi3}Rxo#+oe4vJkT% zxEPOOjCF`11dYnfN=yJVf2vPMW{b`i6Jrszd#4)8G-5B=A ze(5(x;I&4Mb4ura-1 zZ*On!`pp}go10sk+aNV?M3GaNPXfT6tf<5&$|3+nNt6W$%D#qpWL8;ebfKq5lM6pO zI2*ue$$qR%nV~$(T|F(cEDI1;5fx|6AEn)UP1_JJ_>XJ0(M20D-fV42QVfcdw5AHv> zI~WvMj($#s1p{S_(OLsc1CE|go;^J{Iy$+SR%esS^V~y1i50|*kWl>wqMFRZlERy# z%V5y*wckBz>7FN|lrlp*)Zp*aVI%;E(Tj+$ll9lvb=~9^Rfe*!BS1`+P0MMw@nG5q zxrwuT>Fw_LU;%)&IxC|ZTYg|>`Xy%cdcDofO_!M%BZEbxt^)uxnbGH?ZsKY*>~4%P za>FLK!F!2_8ir(c`LwsC#u!1uDh$qY2PN-)La~>Vi$Ono|H1v+H*X#vAAkP%=_jB3 z>*J?SY|QEqMbt5iXf2Uhi!Ad&yhH%j7^v|QRf0_~tSZ{~{W6zD-T$RoU6$_@xRi4} zk-=Pkyt*I#Y8%5Ut}Jm5oOVdsZ?8A-uaRfh$!nm5JHN90xQ@uAsb~N=ssN%uL?bgB zw#M14pB0783ga?znSzvzHaXNy;;*Q60Rs`hoPKRtFf^ea(nBLqTPFq!Km>p?gEIoGYMe|)sonmd`1nUZ@ZOI` zqvPY_=g*%%d-m+$;Naro;^N}G_Ms}v+Is@5H4LMKdg?)>%ISe>Kry0uVU>hbm6Q#G z4a0y{V#0)avb^WSa4iwaqmlo+|NHO%`v3ULfBpGC z{x|>Se~|)H*HK&s5vhYOilVHeM6RpgoU_)dYKk4*4OOz_DAtu{lT^O2uR13*Vt(%U z(#c(~Us{bfTD89gP+CCkr2BTwc~K^fh0$_4$uz!mJH2th%SEQkdWa0GySS8(m{a?A6> z0K~&N%c|Ztx!Yrm48+JRm`?q*t?WPk?5ESwxc|TY@BiCBeD#?Ak9W7Pm7eN4 zxNN}8Rb6w6B%!R3#8oHH2{yS8077EVVvJE(h_hnr==^kO-Pp%pe)8n{R)7BkBU30W zt@2&FbiE~g$kM7UYt*`{ob-XKE#x9I&B?qT5f#7=Q6I|b#Yn+m^4{BiK_N8yxOOM8 zCMT!W`qi`+Dtc*uwtc&NpUg5M&*aB6Ql?HSnb*)NyjM#dHO|6^+4*{P)pPwScgxRz z&h&4c@pk6Ft4Gy&v4#4Z@2~D9(!NKyn*NqrJ<_W3>*}Xw{=57eVfFhvuYU17cIoo| zWYVSbYwnZ9{;a8gp)a$)TBa52m5c?=7Qcdii8}nxRm!*gQesI`_gB<?+le_bl z_FHFM%_d)WAEw%0bzT<9%tmoFO6Mi@Z|#1#bY4`GQ#)Vkz~V#JykDv0%C^_;PhQaa zE*I9FHHceSJoea8Pu~gODk@25H(2O#rtH%`_&y20BQN>EAO}1sCPQ$X|CT} zdN1he9#tt4%>46fsIgD29`CyOY>#Q@U6}vjBCUw%`I=J(%ocd9{x+3PedzqWT)wMc zYPy$dZel8R_xZZ}bAj=Dz5VEw-+x)OuKsm zL_|snEEI{FNQ)#PW&c$y=RE%-p=AcW(IPEiG+*z&OGHWx@FkX80UL{%=dM2}@;o=j z&hUlKxiwu{`0Z7yy{`c+Kl4e89b*dW=u`gGUNNYuDn=#JEGwKbql?M&7f)Xv9-kb> zi^=r-{JgGfB_Sde5)rIMd^U}WNaHZzeFF7a$FtUxfsm3a{L7v_{Zg|ycg$}FZU1Mk z9z>y^_e7(FU|CJS$Q%J8QB`GotN+fO8xP-m@cyIw@4kC?YolNTMj!-kg4eN9Ow3GO zS6P->>x?l_tIVWOqoe7>x!l-nTKX@ZJpI>Ce*N3epPpSzE=J{OQjI5dh#J+Rf$iwD zuBcUs`f6&KwzvDcn}hFt=fgXPui6CyQ3)+TDf|`^9vWt&w_vEET zYMfE5Wf3sLy4*RJ(ibUeN&%d)QPEX(rTWm#6oX$WCDoqF#_7n8wY zu(7ex9~6ci5hasGx;#S&QPo+?&E8XyBrutFl~q*?AwrlG1f!Z~mYMC=mUDJ<*n4sK z^6>EBVmztqT7wTNtZbMR6l0uDr+H>nH5rhswKF?JS(Y7>Mw%rg4d86jQb}6n{m}iA znVoAwL#KqJA~MVIDI(M$l8Fpg-lt2?wB!uW`p`^$V-^xp7)pj=AlZIMnBhn_hDC^4 z*P*O^UDvgbG5A2r)-a@jvVs)w!co+5E?}ot$cl=Jj~bPng<6Fo5=TNbNH`@01!@!% zosJO)Wg;brk`ZWxT10`2eaI97ik6tvvJ+-YAmyk~2t{=+swJ# z<|-6bBt}2;+%nb>N%Bc)fP)9 zhQrM~cQHnS5}1?7+Ne#{xgKkX93c^4Lr6Ivk!7fA)HSLJ`3Xj+)#xltseo~6II0B^ ztiq|dl=p!kj2KhOS&~-uAj+gn(U3TfqGDB@sR1F>Yyh?{3!G1TgE3Es*KUt_II3cR zGyTE#&ff0M{`Tg!)KzA9;Mg&u)Q)Itb8CNR>(T97x2|tp+uL#(z{*VC%eX8zw)&GX zo*kSYzC1rV8lRqCj7L>j)tu#+#a-wG-fr!H%YyWqfrQe{*@k$XQ|o}zHm917FshXiRrSD!E22yQ)PIX)h~X?ne7r z4Jc`ITE0B>MvO6rIm_7?Q)F&9?C)ROI6Qgpm%n&=baH%lc0#Iok>$|3F6**V0t7^q zBBmP<8Dp)Dp?m8 z$>doS#qRFz{rmTm*JF(FH=q7$GMSv7o*o??9Uq+@A0MBdo=qpyt<7s9O~%%A$*{9Z zRQeH8gldS8VTO_+QNxy0Q&1CTb}q}Z!ddKXZftK3Z{ECl>(-6iw{G6KwSVKr{?_K8 z$W6b<27PA?LAACXz%74g;5A67mxg1)uZn90%M`B`O3_2<*)Up#sF z>}g$&zy0CEKl}KHKm6`{Km7LnZ{6GLTbYa|S>FN4%Yx8sW&u)ca|m%t2OMFbug{>n ze(a>pBi;zDbzKfOdWtO6*c|5n?$3VYC*`l6j_Ur9U}DtdT_G~7_R_gvXv*=-N-zqB z3WO94BV+{x?nO3L4ChsSd{JGD2YsV%v6?SedU{h5A|DDW(?BTgQS&-n`3i92e?M_h(0eb(OVHi`FkGp+yt?KvbZj zA|ORDKvXeM-)bRJE~*)xwG|X*CvleB<4yNNLupqm8@+hpyw6MG$`d>5&nrC6<{wx= znr5c;gk8k`&ObvGP_m>M!9s28P878XR2xA_6pbKhJ$wU5p{D&QuNjBhH`}5~&EIyJ zXa-kaKJNm+v9Z?V)*;#^o}rMn7D@`FsGqGJk(debRUUanl#-h!03ZNKL_t*XSmh5zP2S36kGE(IIc+X1WsMsM@$_SQZcWdk6{dex) zz5T&^_cu0r{lbOdMQasRr5M#PL5SH52l@8qMjdv?nenVyCr5@ zmeJRtuEyi>G|MK#VSi&|tKTnry&ju6?n+gYt$%h}0JIq%O~?PSyL$x$(Kzo4_V+^P9Y8#-q?SVB`+h_p<5X3U8sx>yMIA=^|%#@jH z&oB}cLL|aMP$HwsPz|JpjVh5EhE?@Z9Fs<{V(KU|sX;WXg20HR!6-K>*4Fnq&0c78 z0}HWLGEgNB8houjY7n@f)=*~II-^9E2r))cW_Dms7FZT%EkR?b5nwrPZEf7RedFf! z{r$~dXUXIaM34%ipwK2nh!TmJ!9~%}a+hsxA|GaF7t_N-b9{0(olc|1#tunLAZBvJ z(k?9#89)e4hD^0kRbd4}?ejd(3a6U+dJ=;75>22RH*RiiZQi_j{rdIm8=Jk9%33uL z(hMuKbMK`fkct%In-nAr@rVH`T9+7|*W**2j-;CSY9e)(^Uw&lZv9yVhs3j!XN{C{ zDw3f_a!FewM3!JA8j98gYb0}1W#XbH6V&FMYrYwJ!!ZRWgb=(^HgMN=_ix|4b#rfb zXHX0>wpu$4PBe4o+O=!<@4x%botrnedYJtc{_Oea<>C30r!QU}T~xKI za8wgHGf0UlxOK!KZ9L`YJcCk-iIOzzp*`2_3;s%OrM;S(EV=2xcI>`U6(X^&>#8oj zPkBhC0SCho5t?(#?U9s%hAmv?$Cy-iLv(H6WcuR^?E&H3?R%L zCCuCH0*yM%OjkS>nYpA;H>da|2kJThLpdM{llWe0kzpEx5HZ6UDu(^dt>OOO?zAlT z_wIcD+b@3o=_iMWhqW&i>Im$p_OY>;YgAEDVUB2WWs^dPnt59=#;?c#*Y;C!mGzyC z8^9`gjXRUqEqQgCAr!C36~C3dd1ZN-6>XA2C``wBqLH$QC_T$c5Q57x&RkLSvR;w7 zJ{zZGl~_cSjHZJ|1Wx>1_ju(tZ;ls%lgVWdkO4y-Z^rrWeN0 zMv?7pY+T#S3kQa!wGfS!Gt>G6rz79)hO@KN6w=%|m*?5W#xTn=$L6~qepuJ_WHK6$ z#}^kDCnqPz$A=de7oUChMP1j^NjaHJ>M8*Xn23U=paO;{xp^s5MywLyGSlz(H#P>_ z+uOUlJ3Bi&!+!SuyYFmn^!E04cXzgXy+|NY1B-rn3S!e&k^O1V>IB`Bpg zT$Bi41>!8$K#OE-38GZ2RhRDx8JqmyObgQ&B zgc@v^jhCQm*s!W!a8_&j#VHPpKv={yQdMN)087>hVH(Zp*grqII6B?v?Wt(v$*YQ4 z@{!lu3D#vLe@*V#*OS6ZARl}XjnF37Ga%jg&n@GcdNO<5iLbV$fmiA?sUyYD#(EXMQQQ zF2KrMuyVP4Ge*Ar%{&%t!)v_B{khzqWlOgTZjv&$6sV{LpM6n(z^=1rQxp z?+@trxA;yqO3;-BRJDl|)QPW1WS}gf{oXKycyxI3|KmYB~(UA`o8(07T?7c~^ zBuSDc_KAq9nYsJhBjQCwZdI9Gd$YSSLx2PbaL6NxnKLgu@W9{13;7%P3kKkU1VKzM z(=(i5EuFPwW#tl?krDAWcQ-Rt5#d42+|Az>8ChN3T{WdhynNx$+)PauQCYrEq$hAF zHKu+KMeQ!CVx0lhjlh^NY z{}XWA{EpmT&_L}Yvuu`wuv=zwxLNAzCcgL1({Fw2-9P`&e)!J2Z@u&O!x*qyt-AG+ zDvnijIKcp7kkgRr+`v^;nR=f!Cub%K!B|Xjakl>DN5B5*Pk;L9C!d{NUai($%1DZo z-CPVLL^h`8bN9NgU5#94v+D7~M<2ZZ?hn56!P{@0&T6Tcb87p(g_;V81eT?0a-aIt z=bU1#!m(*85t`NCzPP%2b@t-y{CvG$XET@?EQFdMrf75Db*byRuG879J~}#zQK~wG z5Jp4D0ECi{*T|umES0-j&Z%s004~lHM2J})KYnm{xPNdkKRdfPKYw*`aZx`t)@5`R8AponJnG`QqZ@s_imV8LptL*({U9I3QzLPR3s?jn+NPKi@Ws;MxZ$;=U*M$u<(W@=1Cv#JKbxE}AJ(f3e##OzKW zqU)4o3~xk^!0znC?w(c1T_Nllj!ek57dQmAijAQGnY}0U zPR4Lh9t!J@L51RYWdy*TB)bWSKxD`;g$G3tbWW9X9Z(a)lu1H}45)W%eNd|_s45}v z?d?5ycyxMtdi?Nsf4;C>QYH58Zl2tg87zPYGgEUN&K7ns3q5*xxVJysUsT5@`xh4% z7njTBa@}^la3B^5kvUi)XgbV{0P(FC(MRdjGz~MGsaXc2o>jA^s+#!2AN=`j)+`o_ z*{nt|&zf^Gv$}~lL>IfO_e+pV3G>C^@bF-7Uh#g-qG=Z7!QtW4w;nxx^7fmRdrpL5cEb}xz+T& z_WMS{_>M>!>D!Ftw7TI!2ZlnW*`*AO7I2(?@STKKa$J zKl;t5pTBx_-ldkDs0yNP1Y$A3vO~>DiC>fd;O3uh9m%g7FZ_LL;}i}5nts0hgtmX( zxO-_+oQBAU#25oOx153^LK0?2`v?+a9b;sQMnhg`h`@<>`$Qh{J74#<+_v_d983g4 zHWMKM2X}@tG{OT@jMQ5SVvkP_KY04~)8peAF;d6a*<3gG+ShDlJ-d6Uo6z??GY7`W z!BJp5INW>Z$)mci0raVB+ZIlJ->=tcy$s;V0k(PjG*FhV4Dg0O(8BJ$JICn8i; zRo%p1RLUwpax*Z;@A{+qx3e}D3KA9hJO&WTA)V?A?hEk1TIJTO&3h>x@h|?%{h90^ zV9w~<_RI6-Ud{Ul2UqJnif9^2l@HGP>0X;STJLDL?F($apDz zBlZ5?dr$u5fA`=2^nd?x$|2{>(V5w^yXP3Ik`a0M&r8mHGC~Fehy^ZY9?260Hf0j0 z;IL%8Z2ikuSI;lflheQozG24RH(zhKQr>jtiAWt?PF+$rumpl!>(5RkczQxjZMQdj z?C*WMTMqwzjKp2%*YCRbQ+c)9ll!iJ)B9ih?4IlI(r0$RJN1YE{fO?npL<6fDA=^v|;$&efxn$(Su5!PABi(jXb-n8$%67AcG0m2r(nW(-sn$XZ@+J*iM9@`ZO9EMnVFqR&D7!Dwm{fj?(d|B zfvF-$A%FsKai{?a+i@#vwbYGEpu#eip(+VsNMo=m;xY)O!f1)tU-0Yfce)`tcXq^Z z4Lfp5m**GlS{P|>F^e&%fk?~-pAs;jsfo;oJ#dDN(;{h3D*E z>S(I<<|Q1!qd$=e1P{Y{Bn(L*xrAR0hC)fQQd?S$h`92qsxbH>ZMPQnbpMXO51seP zoZehHL)5X5uZT9+zp4DcF~3xjKPyn`{xSiDK?|d%4!O_nI&Yfe!_#-)efrP-;?IBd z!|y*n-3Q<~bt%m%I^0{pQcC?$0d%x&iO4{3tX5aV0V4Ih7O9iwuU@`<`RelD{re9; z`~1t#KL1VE_7ucCblR=g>$;g!N`RWH`H;H_HWZ{3 zGfSHLd=^)->e{BM7K_<@KCkLnnDhcFbt{2Dw4K(i|8bCh6ULHcVjoEs=12fLys9dZ zS<_Sp2S=Behc92geDU)6<;5~9Wkc>=gkxk7bvdoNw#%uis#&`(G2r=pKA+E<;`Me2 z3y4bQQKz6z@Cc03d-Rk8@VunLTvl?V$Z~Yh>>tdUI;^|?^u_TP&%gTetCtrSS8dy> zDls`UXSd?%7GWX~377kuyPL79mfCGZabjtgW0mJLnWxb-d6#fTilM1+)_NJ1sxC|ns^?Phf( z%Q?4Q>NUH&L!Fce;4sunS26-w06cr0Xf6m5)FV|eK_`gh5=jG;oQW_bNQZ$;NdXWf zgBTE!fE4yQ;*rX0~6Tm?}Yox9Y4v%K5)zQndiFJ~Wqy2;Z$08&`3Q#hDLM-t%8xtV_ zOz!R`jAUN;yaqE^i*}9n3hlDLIQO*jZY{Zo^#mg_6_-HSQ?F2l2O`ax5=%C8|PUrodI$agE$3~I)~VE>^OEbC#QhWLy}s~v8TB-4;F_~%kkmqTW`Jd{>kan+2XKi zn*F9(G`wHg$>Pz|)5CY(e*F0Hqh=0uYg-6ARU!gXxmwznU%mYFvoF7R@oKeBeO9*^ z0zi^2nIV%yPG^O1One)l{GKgs-06AGox$WA%@B6+T z@;;sVHGw7f_U`Ccvy9H8sKQ z^ugZA(GNfP_S>I){`p5Aee|o3KK}Bnm+D5Y*+34KL4zXku?AZacclw58Lpd*tG_RO zp01J-B7z3<}9>^x-$X|DE>Z#NOP^qf@4Ev!qKV=jNn3?g#;~3}=TXuz&^bLv44s=j2U*ySD2AXu*t1 zDq)mL0cz$1S5DcxF7+fzGhvYxN`nyC06#trp)e+bXxY!(`TvFJumt1(3oS$RGvftyH8khODRn3kCq}%I08$OGc7dIoJ`B^Vwzl z;$oHbu!My-L__!8^mDhg8}jF7dkw?#UjL6#c66Pm?2Z5mVA5@7tW6!?&46w*_h5uG z-rHX5&)m%z_Zt6C`QP-KyI8z;wVUI4bH7ZkxmTaLCAxEyW%wHV_YM7lclQ4lf6l$v z0Vzui=>9-=CZM?KjXruYa`t=1uu<%Xr>9 zUw5sCA;ZVb_3)H7Re<9U}oGW36X&*@GtCfxSwN&IND zzkW|BbH7Eq2jxJ!6pPm|fNvs${(wLR|D@Y4{%HI2ca2-Q?fzT$#~)t1>wWKR|A50# zjAnC%yIUdr2wX=oH*x>{lW%ve+q;(4md7xO{=#(=@%68{B1ymku+jFIDK0-JgR^0` zvW~s(g!}E8^Gg0`B@yZmv;y zzh0AYRaGHWZn9o?=Vxb^m&;%L;un_}SLf&FeV3Mz}i_ z1p4^g?Z(6;J&tpT?(WD#a?P>*J-#pPlAp#9e)owRJb6;a0KIfM|a2EcN; z{`B)_Kl|y2zx?Qv-+XqqZgbbQ03)TWuI3@mayC`ZY9KQwz(U|EiX}bRKX~u$)9-!v z{U3bqJ5QgSi0gWJzL?kU%FbMzndAm%M(WxSs=BG*q{dd556(H~I>y<92S-Oo%jNRb zt5;vW`10~%*>OH5F*6VfCRO|KL-d;PKH+5ZCRTV-oEg1ke1ttmLX-VK4 z^Q#~i85A?O!X)-mCzV;|^Cm`_&1Q#3`|Gy-{IeI!wq31Oec!utj1dGPDv6O*Q{VUN z^}21_uIuVL&KizjW@lz>N@-$<^o=^k&>3>LsSt%gPV8oGAmTvs;P}u<9-cfnIXO8x z`tsSAU%hzo>gsaY=akG#{s3kVAuyG6*40Lal%XJUGb;%acQ?YYjIW1&M+E2y3UZQ??)#LoTehTbMC9yNARXoqVF$p;514aLTDd0g10!3Yy=j{^f3%$Isc4_TWplq3;AT!Tyrk;o`X}8W~QN91}@q=$Ydh$-a zn8QP?l36Aq z8R~3b*Iw?`1n%?&Z1ug}P8LyV3NtHN7=}<1QB_s*`8>u_w0lR4Oby^^5clR^x2lrw zWXss3gC2#|cpnphos5UC4(gDamGLMZF=n_U2)Sl;4ICdnI6gT(eEZ3h$B!TX`r}W2 z_3^JSE|<%7o3jzyu-UDIOL^?%>vbx+V}9?N<==PO!)6}JzcxQM zO7z#6HJekAAR*Ru-PE&1)6BV!#y;egcOQxeGni;VeU04^B9uBYlO?q4b{VuM_Av}h zU~<`pF?)F#%bJ2^2`B9KaAT}ccOG?iz_^B4WE{_Z#b z;XnTPumAer{p4pqcWtEFtC{+gQ^vvGVf46OcSD~CdM7b?5Q-GiBoICo7k^*=4fosi z=ijw`bbJ2|4mo}J;Lw@tXBWSU;OzGzWbfWZXxw;Q&kkO zzFJDv000??c)$~x6L@ofhYzp@XS=h+%&xp0f8)W92iyo#OBL=cLPVXqGY(HE_4wt_ zKL1tv+Ip6~b+sWMxlmQ}f0-1{&yTM3H!ghCaFa_uOs$IW0UtYC`C9w#0 zC+?nce$!dJ?QXAGX{zY^J|%Sz%z+4Y_f76P*Zxy;)ZTf%|DFs3(e)E;JV1W8&%N8v zfBS>)TF-Z%M|bHVw_kr#pWMB}4X^m$lUTh=kDBP!cV79Qa@#rYCL{BY5vO?L@6zjn z)&KO{PMm1EVt>yS{at;2_zd_5jlcXpw!6>4+p~4Pz6S73`}vMmqVyXq$v9hEm>xz! zTD+fk@N_p=fGu`-iuAeBrt$o{IHq5#-G$S#U#YIQ#Z)cde5<*XNx)bte#t zcV5j5o?s47&d0WFISsEDxC2c9 z03ZNKL_t*MxED0U*BQ6N>bh^W@5`NBLS5HQ)6{hxW8{(cI(2PK&V}iEz;-ro zkscd_EN{8O*Lc9gw{-W)H)`A9D+cGC1Jw5^R#gyD)ys?Zv(LZ$^wTe1zIgT7$Df8~ zR#hQ{s_$FXUPPLDW|_QjU8&GV0LsPBZU86{0A!~!?`*D2JXV?+7wXn!xicM`k-Vi1 zb(DSl{$@wtbso{kHlPBIpb~MsQ~uv6Kc}I6qLIn%AP7-$!BYrvK5yo;YTo2`-+BC_ z@BiSt-}{rdp1i%k4^#9j@6&2;Q7@WWGurMdb(z_jOXf^*(v6d}Sm~jzoN#t__WZ@m zPe1wcmmhuf(MKPD{_I7pPP3AE(Ck@LGL13RReg1Jp_a^y$jUZivcP_Pdi=qA-}=G# z|K#1bpBx`7U`cbwP`3;iLEYV)-G>^^Zf2HAm^lziG~W%`l}RE~m{lQij2xS)x;kuM zz3NwOzizKmN<_-cAh?_6v|ek@d9}J~W_4lQR#i2xggFGM05C^jh^UB6<^MRRWM*2z zIz;3HHJq7A3wa;P%prumy}f2uW%U>iF0NK*XD^q_Wy)B6rIh-rStJ8Vg8@Xb5=By&Q;7|-xiN(hC4@loa5h_N|G?qVVmA!erHRVHHgoHnw=hH)6+O?EQ|yjhcD2J3-8?Sqj{ z1QDjXCXpCpRJT>%DI99T$-&Z0Vax(n5oi(sXaxEt;&T$eQlxO)K+ z7?>*w5miK}tnaMvQrBimn%&h3-I|CH$jJzxCJ_T*%e{9MD3YmDMb2P@Gcmx92pEw9 zMA9?7_%{h+0E5k$i+2~|5OcVix)~w3WmU_qsz<`SlB2_u_uhW^&eI3`d$Z6Gx^>sD z1QcdbLgkqiq^?jWHez>Iz}%Hc1|sqxoI!A6BS6)il{hrB7@Jy+L9$$@^Ruh-i`CV- zO??JPRU?xRVM}LX2nVT|LgIXMbny7?$4{O-Iyj!i7#x~ZV>KrtX9oU&%D**ieFb7n|(B=-ad zplsrR4`FX%3KT*N6soyYH7sRR8BOn;l`;iqQ_PI!2S-QmpB^s`-md2ln!STqRWZ&E z59V(@eDwHu@xePMiv|^=Pkq126e7iF5oed}i#k&7 zHgjTT9>P5CYBr#rcmQNbQ70xR%I3ZX@SxcHMu%r$032ZASu4L}?E#de@oqAyL?E-- zVlm$jQu#pUHvlDT&iLHnq`T8g4s2?W53379$8*k`=E z#fNfn#6)1`D3o(f-O_qAP4oElWWH$Le*3M{r>CEN{>8_ie0p|qm2=6puIgYWyO9Z> zXvo5F8{?{M%yMRw!TBxq`FrfduVHU)^-tRN)BSFH?M?50SG&!A+^#X&IQz;kQbh?> zRnKERtD2cqktl$;WHuR+I{hNk&lLGo1xa>CT z^IFEZyX@|}{Cju!KYyEAo;#<~4SyZ&bmH3ieoKGuw|}Se?o)sD8~T%P<{F%67jJO= zv_|aCxqO!&;I4MZd=-BJ(d4|ick#TjKjE94?;HJRqR-s59`1PVt>am|G}{lavk!Nl zJNfF=U+0r|xv4Kr{WD)H9&x+>^9{yxsPFrR`qFlMMs4kGRQhf|vBN7JvRo9IZa4gy z-=II(nHPS;c*iaKeP=vx$cLNb`5OQHeb0T3{`@trztcbe&Eg&9tCRVn$$7N1K3_YY zbnAHDXm^a~H>+*Db9UT+hX5);)xO>M&c@E&zSnpx-XE{|Luohc+}leFy?F}g-7`d8eSSF}L;X&HA`{?8`AvuXa zybz-m?n*S+@YhB=^?gxnX$)?R9BQ)SZ1<8%oQ0T#&(AMoUCncG_Xd&>i7;k_z6K+@ zyD^}{+z@HrxmB(2AWXfYEA%CVV7qjoz>OJ(d^`C z|Ih#8gYSR$gYSIsC$k1ABlV~R)q-ZWaM#uP%2i_(tJs*OzE1=Pj9`Eml`sw)SXD2V ztB*hV{AWM?@E5=Qe!tM&4Hd9|KbvbVRFb3eX(sY&WY5Q!8RfGN}yQ7F+?fT}8(dCFZG%w|?q z^~sT8vFKi1T%NtK%hjc;7AQ_~Z(@@@=PtKx+b-MnyibeVG)+9&69GY(hcK8sN{QSZ zwPf^<44;o>ssSsNbc-8kNGMH;LLUS@efsoZy*}7$p1*u?d3LsJ*Os#ZQKS$x)Et`4 z07dRX->#dc+1tZ>?sXN*N}c$Oyrc#g^+n?Zi9tZbfne?qwZaOSqV;#2^}8~k+=y8u zvJgDDtL8E+tCyS1s; zu|gGK+1FQ8Kai4I7e+8fp^uJ`DQ7cxFCYsDI98PxMwgpw0-3wG^Xa3LzSG0K{Z|*4 z=VwHr1OOa^lo zRuYhsfsn=3A;tF)gpDf~@o<#m-pbW2Ak;yKWJOhj=v*IZJg8>-PY$2%?>`35xT@## z=J@#d?YADj`{eZG1lB>-TFpc>+n+PzqQ$GTt52VO_454U?5p$TI=it#kh8io2P2Rh zgew*!a@CXv8CCY?AnGT(qnxMgFhIVM(mOC;!DgCzYP+^;HKop-&8!4N%jPKi(hTZW z@FO5AH2T7SE%%!Wx7Qk9ljv_z)hy?11a@|Jx1Bets?an|DFI$0OlGAX%IjbJn)bpY z(#l8OLsKRh2y5hkF!>glR%~jAZo__K3W4$#ro$23=Uj!rA@qIU_kDoRX7%Ih(YN0J z_Rl{2a6X&;=95pZu2$==@4BwfMMQya!aB!RusNG1<7YnRMzGryv&|~`$1{X}>*fqH zyZZ%r<14;)Vw67;IT$2Hq{Oq?Lh7b&X0e$`XcV5Z<-QM1Jzz}$cXG`oBXOyrivbk` zBQD?!n&_P6i=#!xfbnSc5CgE_HmgDfZ3K%bC;Rn#Pab{e{deAad|X#fny6cfYZJtq z>Lp>hx{}$VAR{(0#cw!x1?IKIPY@9~A=Z_62o;AahDw;ZoXSLwQq6>%7(`4Y402>D zL2@b;4$6cmJCQ4liHreeh(r-GXLWZ~z*XHWmux!qTw;t>CCo7MoOAZ9X0?C_%z*?( z0)d&SS(oYm`^iuLpMUdLKmN(jo_+bM>k>;@<{8U}*4EqgN;L9!fwUS1a{vN*1VL(HH>?qtQSeF#1J5M*zxkWLEm>;*>;LM%c<1R!CD7C=x%k#* z*#c03q95?!RwaN8;g&bt+8P^M&o|Orn8+hLJTBTjaRPIPY-Q(%Rs5(=(e$ht9nu`EwkMZ~28jurw z&`{m881vH++2%vvaimP2H8OPy;(jtvHC26P5(`8VS=rJhX$ zz*AoA-VRrD`$Ftn<8bl_jkLgqcZ>sQ@vF;KgU{$ z<@zE0+F+#K*8eF6dD{O1UUbhy05SuGTH_NwoTCCTI8S`q!ztG6#`@V|G#2KqIed41 z%TvPkZbdhr)_UBj0g#CZq_nv|_2qTl4Hirl+CVdih^%nV2pIq&xxqIie!^I@)*K+2 zu20)F7BIw^X%lJ2U}B7QTnb~y0hXb5E?1kCIL1nH-SSa5{l0u+b~BC zXA(AbGGl=V6Fh5Y+Aj90piGOI1n#@k_q}F6zgXt?A`+Rv zOs?wAWJU-a3?L(gkp(AWXXoHVM({G%LNRi78wjfN!@{C%@h#fR-|It1tW+OAP#Uq0g{p;55|BA2|&)t-QALFN2owy z!#5e^Knd;uEZf=@zH_cknjXwo2reJ1J6h>)L15D8+tE$G~ zeM*thG&Nki_1cl^W>(kH6vXuI+Xw&rpZ~KT{qTG5fBUHf55WPdDkD?1lsi*RRUMnA zcGte|SL+l)XzJR$%Q>g4pva+erktfs_R&Y5|NIxf`teUceDUIyW;c_Rs85Nx6((29 zeJdnY5JS`TeU#8HFUT?9Taa6qdSTw*oB!v3_GeEX9W`RsubFaFF^MN_Sqf=1mYQ}T zFoeK`ZbdA-Rh7)$GrGd!+Grpm5a)-Fs=b4QlOsMmpIx3`U9Fbgy7g>M0Ulv4Xow`O z_~o((wSB8q6&8E5`F!3qCL(3AXU)Y)TG(BVLa-(jjZ|k1>ecgGCaHOuHevS34Z)WS+te!9G zx{79*gqVaFrX`^O36YwpGhoal62asKbFD%sE04*6-rWyoVSjeq#P6-!^y1ao=bwG? z>E~abpI@?rS-_lg?otl9Ze}4y$!=Lw2qm+0hC2(iY~7rz5J!d(yRo}Nq3{?7AHS;t z8DtWGQlXYgomzuOhm})fZ#Gx;B-%^g_c^7c>Y6o1CijvL+*z|{OWB>O>Oe%`L?MtE zAut=jMAJPON<0$`nGLLE0*f~>*0W~MozBnCQ?@>>Qm-W#DZ(UH*&>&s4yc(cqeXJf z=zC3p`Us1Zh5JA*uBAdSG?mytjF_CAm^^a9{Ujv^tHD9)Zl301QZdLq^_`t*^{Z!n z*S-7J@qWVx2Vrksqss6E???<`O&Q|32w8v&geYZW4qyQ>3R$1X;nq8W1VOlH_yi&Y zWo_%g^+EICV3tlFou6MmfBwa*^VM>d*Ii1zN>$DGn!Url=1=@@KtmJC1Y1g$zs>};e&^JCl7KwdaiLMGOOfO z;CWrEw4Xx{4i5H?4rsQh=QF9Q!?3@YA08d=9X~ueeX{@H;a)R$cWvp)qtx{tKz)m^ z&e|`&e0g@Z`s~ZEIz{RzWg!n>Vvd2i01KS5J9^DdPVOXtXAA*I1A#X7)DRz%!8H$8 z4-Vr3=qM>|2Tgu@f@A=WY-R;T(bW4n=eA8%1B{)<&ACjwc38t1^rkQe1IYU(;>;x+{=Q%SoTuYRCws^3& zSGjkovk-zvR81VJ39Vt&w|!vo`e5A*=R3jRAaY?qnB5dkZrLn~Ks*qEO%U8MRDO-E zxle+8G$z6=ujC?iu`7uI5pZ1&=~%_0Lb$O2mhFT0zI}S~@Y%Cxzxw5`Kl=DL&!0cP z(!Q>%t2Sx2SXV)!s-_HgKq%*IYG4XMm^r&av!JJ<-us|tk%x`0;xsZYH+XOa8elLq zSRY8ZrvFduDPr1wKD8M~I|$gZ2U&LhN(7J*Fb40Lh~Tneia3g{KBQcB_rZHG@-w#m zq!N7!K1QXeSj1ppD1_o}X2t`{Av;U58CaMCh`1Ulk=5%uF@F+1w1|8bah?7xhlK6&u=>B-T27PxOOulD8*&}Yq2>Wm3&R zYp~sTt7jU)Gk0A|Zqb9eShBTSAEc}%XNVc#6#y?(_bqGR%F*B@D}%txCn#tq%kDWF zQ8afVxGN|V1L&BErK=(WlX)hWI);WK46b?Bgf;Lb z&8N?n>z238<&a_w0 z9AtigSYP&exm@obo@DJkXSgy!sDKN(SJr_#Gw>@hf;<42i-6!<@-8p{6gvXuPM)@g zH$`k?p(UlZ6hnD*4s0+Q8Gw0Lw$T8cDn~FJclnnJ1gF5mJPgv_T|!;6#z)P!0;NE| z`00PlFJ7S9*M9w%fA!;TnZ3oo`d9zW$??3+Nrd~ZTQswrL+Vpq&6trBIKT{y0jdj9 z!|17?K-jw1HnR_^0E3Ie;n9bRD~NC>%c4rE6iW%=T0w?AFb7xU`CeEte)0@I|B8B? zWSawA{2Fdr%&oHb$HpLXFcVe21R$Oan!t&mU!wLr;o7a+gL?1$s&n=PRKWwF zYA~0;j3PtG96Z2EX+jL1dWZ66{5RQXfNj**2~I;l3j%paTs=-UjSj(riv=N*7*m&1 zcB`9xlV;WRB30J1`qbe@$wt2uS@8<8GmX-KNAU$hCS3C`O;7*fG~D)l=qtMqq3<#D zTs%ePyeRT#_`@Jc#`9%_Jxo^S#9u@%#i>dla>3T$d)@yzx(_Gv&8KXoskeU%R(_W6d)i*V#kB)G9e>+iLemnV+x6f(9@?@> zCqCg}Jk>{t&u!y5)i8@DQ}$8Oqi)xiHt$h-;@i)MF?9FAzgqO1GCZR`zt!re6-mnZ zUiOhqcg@saG;TaEy&d{L_jLFIRoa%ei{XVXT$$2;Rv6leOR*G)?$v3W_ z)_mRdC*zj&xuJqg#&8EkHMxEVIXBHbYTNnP$cggPhj-kKuTA1Ln@lI==j#HfcOf$G`l8>(G`r(D zw^e^Am+yRm0dnwoaNX6tO|Le24*qZ%z@^b7yo%|;|Ht-++H8O=m*0yd7z=CtBeZXn z`oP`IGtA(MqU&!-TBFo+x=U)j(S!bhuuxOMRJ3aXgN973*e1m-|F}~kZrbj^+BODv zZn@!VLq%3+o69fC(zSMG@-8RstzH9dEJy~fu(Goi3mcGr4&l_a!7db%QDmr zTs$`btnd`Ta8QT>ILy@6z2?hhN-18+;ohMHDz$-WOcd$vG3+Qt8xkRH_nnU(cPEAmWq~ixWguQ_khNOkuHD^nL2Oj)Q-nAKg9EXuroOF0++WNjAg8sZ^yJCIKmF71{^&>Fd-t7p4)^CVWM+hcc}5Op zxHD$+Mb5cxTL8>~1I)4RdSOi|gJNCJ5UQ7FSHJk^lV5-G?Bh>9|LVp0%a`YUr$k~# zSqTWL8bTmpb2sfJg!!!6+pktv%UKg#&2s9yPR(Y=Cr=(c(th17dEH1|*FwZ0xLe9u zgou5pU1kJ;MTi)-RSGvl4PYQS?2H}?^|q-)3^?xN6(B@01Gfz>#fW zVY%z`=g(u5`LbCo7V~*CpU-BqS*(giZkxCZ5eXOm&9F7hthn>sug$(sW{`*QiBO31 zIyQA(?=KG8b@%C~pGFA~#85M{=WL4P>M*z7%u-5S7rU^ne8%GQr8v7;OuOn2>%k~4k1`BK^iZvsKPmt?L19gIosa{!Y~IP=E(D4q zT*VOjo>Q-?td?L?Nj%0lKWvVUV+A+Xk(ZTz=jVub*l|-1t0w17DDZg0xuqQ zFe~|%ha*U}RQw(2dF~)`8kt#RE9FMZe%~NtXmBQ8bHNPal!!_=vjoYCNFgRFl~&9Q z#>~W2g%Cr<%pp|FOo*j|skx=pk+5)_)KIrEqXSS5m-1dZb?}W0t)Wr_R+pDmRUPf` z@6YFtP98jc{OF^PKKkOt*)Kl+v$s&3{5q@}6`2Rs+jz7O(et7Q>6 z%ti;n09>OH6n4*|`G;+H*&Vc7wUMUo>3fNiIp@J!&ny&)iuTN)Mj6?eh*&~Z&FaOX zs%IwUuMUzii!+SiL*Al6toiWVvYQA50~5>O9VEn^13}?VB!RtY=6$zbudX7|yrE_m z865il+YgT4dvx^PyKg^!aC|U}wE*4ax@!;j7py5~Z9)v8y0~iB$q?g??`u-ZYw)D~ zcE+0#7_5M8?2%#H`Uo^1^!4($aW1g^W%F}uVox=E9t;jLFW9l+f{jsR46ch@8-q>iFnlxfGEQ0+WbmXv#So z2pk#M2Eu5geGy>940i&v8%+#SrvVwgiHBcn<2+vf)4h8B8`~xhYO`jz1g`#n_TFnr zk|aqGQ)1>MNYdg}-Ca$lduEp54hI25_D+B&;7<-u_%1*MkHE_cM1X_fZtqqOSbn=R z)6>(WXl5l3=EPJL59aRSkr9!V)nsP(wpF?#y*xb3ji{+9*ZrNlA3dFE`TAD?N5?$a zoi7&u>2H4hCxid<&i?3+|K)!<9A_E=kpnrUh2i z);+h>_8P!|6^txESTZcJt2I~%qO*`BlJ1<(;n{IGol$^Pq4PPm9{1Zn4deb*0OdB@ zd?U;v7&t)$1T!H31|)K-QU#kXVqP_5Q|+sSji9%j-;r!~+0LR`dR-qxEiVZOrdZZc zNl-Ir;`IqS?x<~Wc_t&FseTWtpl<`;k^cO{1ngVrTXSl+K+F6884mqN_!0g=fZb3W z?ML_#euP!%^kVOtmtq;t)rTAP;C)ZA`0|^(rVS5_ZEcD6i_On(%LTu+{nj_C`_;G9 z;rH0e6;ZRZHvqIU*z(DxFwnxg_PV#{s3=M^beu4AUCY_o*^3vij^3QSdiAQRrLIL)nLRUuMPr+F z-CI5W-jRN`(6O)^bvn`2L2pRl-qH;-!$vE2v%G!nJZg6-LbK?NnWa(nnIQlv8X}-I zKHUaN;HzSehE^Dn=8b8>!sa#2*31O!3^3?W1X zx??b{KrQjOd$7BIXMcZZ-zCY5XU|?AA77lE1ue5ANwVQ6ABf2D(Md6#TwYE_qrqsL z4~Mx=*bG&HfTM@Ht@yStSERQz)+X`ptwjsYQ<|oEo(%?r!7v$(MnzG*etle(wMbcq zn9SBY=a^tVpEF}sRrC2g%aYM(w6n95=UJ9z#6ZYREU7gn8Fp<&Z-7|PH(Efp(PveS zo5(qGoFs`G4)eN}EccVi?DFz*K3kM!P*vxg<0J$NK}E`{sul}O7k;sDNs@&9J)dxr zB;GTTLjXi)%F&?FlS;rih*7P%0N0t`rq%o2Km?;8NOiw}F#No1w;fiJm<_xU!r$HC( zp=70?us2*DwNMCS&Bb}FK}9}!heK@9@4&xU!LrlVaL@9s=yi>lUakPmnFvf;q_ z6dgyu3qnMMXagn)hG<-(B498?B5PTlfT4nV2F1C}FT(td%r8TEg`vpEKmpCiAXhZc z;0-EPi8g950IY$7QRN_AoJy!mwm7|_p$4nKG{18PLlNqESyi=|`2<~#$$-)k4Mu)A z=4@yP0ns4?`FS<>o(K78INBTU?(gpJ?Cw=(+G)q`0u2DN)SIb_c<1ijy)zu- zcMcCu&aZ~MJ4eT7uiw0>%0_5aq<{Zr`MrlN?YY|gxy~0gPa?(@iM_Hm%BQ0<-D_=GNF|<<2mla6 z&XE|Y6_yYMKnTFGcd2vEC8OA)P}UwXnkK@{Pt%#!T>-Teo<4?lbK@Zs+G&cR;Fpml9pv*Q5| z(m`I%7ey%~%o46}Q^yQ1=*XLK$ zFt5uR$nSX}Y_QWhuEsnh{P&(6;N?Z5rg-I33n{qukEd-v|| z7gtr#pkVBYJ&G9DMno~+HyeNvA_JNjLWe5vpkLAk4M3v@VFLv0xlmAahVbSLUcP!$ z76P;^0%CprA#NJ`4f>FlrDPhS;L7+d7}Pq|g1T=h(yB z6~fC?Qc1c-T|)bQQwB%8|O1}O125#wzannKes&}X?q*M-f=bC z`K5+WetXLe#8W2v^eJK&OZ^@8`)%-Z<;gYtdgxIQt$hBj)}>{>mv@>TZWp3{C$QS9 zR;JoMpWj#e-`A*b^ewpI`Rku6_pSH&k9%V`mhU!go`NC}f>Nu?q;E-2TWI%qbKS|D z-$UO40Jc`mY4PX!i%^?5FX(g|->R%}%${PjtSyYl1`OtwS`6JTCj1tmou62$Z&k8D zY$}e$J*{cjW+onV6@J&k}Mv01Dx28c}oR}m9YCa(sUmlv;I9X)&Y?DeaotJ&0hFA9h; z?=i=bib$VTf_8WGda{kK_9##P6x*=Bu7|vI$L>b3p0;CEH?-{+TiRI(jgRQWfU2s{ zE>@>MXJ*F;W{k)rR*PB~rpeCk;m04o|H;Q6{J|go{PCl^-lK-94rSumN6l?BZH;;! z5km+-L_{K1RTTg@m!yLM8WfB2_~i79ufO^A7hgSl{`!16t%6jws*oC>lA5UkA$v!R z0YQ^IxqJ8U<4-<(`t<#sojm~f`oWzqzWCyozx?It>8WXzxnY*N)bnIAsTPx~tBX9( zN8@~VcRU^s)66GH;v75ngpB0OVxDh_w#=2)e;cT(S%tvNG#ZWae5e9xn$Bj6i;Iit zWL8xbK!~m_-ut-osxs7dT@=M^Hp{YXXJ;qN(&2EFrU`i#2_Z-bRqi}Ao*zwBM{Lu0 zE&;nWZ6aPHE+J|(ig>R(J0DzKO;1iv&dx5T(`iu@s-djZyTnY@R0Bw~xdde9#bPlS z!Yu}`pwDtnW{Qc6Rkt2EI8-9TaK}bJ&h58g4%jXEN!m6iRjHnf14~Fj5_F=C2}H? zBuNONuFJZvgOqV95JQsqZa!n1u?o8P9w3@3W4is${MqYUQ%;2d8b2fFocBHnzAVeK zBpKTp!1G#e>~V-R8;^@y-S7$poSLIyF>wEvNCE?PSqGK z5abXUDS#Si4JsgoUY%Jr)#A*GD=E*QUO1@;vy6#QaQK(WA3nokD1hm;K}qe^V&;BLNqkPOF|rV`XF)QBE29gcR# z!+ZDc+`o5tczAelu(y9_Z)Y%gc(@M=MJ-l|_sl6vfTE~g9UV_+<@wq4;&QQ=hgtx^ z6GI5KuAT$Y_}V#FeG6!L_-41Zz7!f0lG28n;$9yXjqyANYx_UNj`%!9$ed*AM8 z>;rT!=zXq!+xeFSXWrV`aE`ohIGQ9$5Rr%x(SXd%IcJK*Nf4>)T0{^zNs`2;%Mubz z^DA@-Hc3yz;jk!*qNu8>N|GeYvIh?y930-c|M0;VUw-||Uw;1b^{cXyU|JSZ)};X< z5+e}Dn%$8ZG6IIkWkKAL5{;>S>u*Ot+Y+9ucmg+g8@w~zEU&HeMMz7z8(V+D{z|Qw zfe~=ChdZ$&Gf*&5LI@Er6v@1ESw6@|d7iUN5mAvs%zT3kO-)~nvqZ7Pds~wp3>1-p z6%h>;2ocSQj9S+fR3io@@`wmVWZ*yvY&xF|@?<>V%q4>~xqo=@;fIeuxPN$ zX;myjStOqGVV0*^Q4~gO>?#oe41h{rf>@KT@H(u_k1g+PV_(+gugH}4IqL5s1|nX^ zdARnzn||125~@P|@BZvR{^`H}kFSs4RKezpMF0ku?CkDOixQyOiIEQ>A^XWJP1Bn_QX*X4?5)BN`eIC?TRLX)|;I-I(RC+o7-~7j(1tz02c*fT1&kG02XCY)^(&vMo2vi61Dku zzI$=v?+B~(dFA4!=hyYC|Csf48f$Q@$@Tqz{dRlwgTq_&%>zkB-|P~tZJp0a-HrstQb+giC|Yya2A zi`(WCmiHUj;{CMY$v*TVEuu&BO%iwa)i#fqP3vWZ22ITwG$U??KnSYVXwoRghtX{) z#!Bst<()R_cNquV9t>-7ZxO@SJ>b>}*-Ax_c&G1Sw9?(BIH$d>(yuG9X)pjSMr}4S zD_V4pqbNNA03ahW#B^>zG4QeX8*RyyHTk-h_p!A{uJy+Vnz&SIP;`R_>xS+Dz_LEd zikn!|4q~J9L^F=|Ow`txWClzet8S22Qgvx?bzRr>B7{(urK%E0nx=zcp68MzE?R34 zQN=o~TJwhtto2V^!%q<15;K|paaf{K})%c82fDg!fJUQUjV zj-Ee%{`&RtbUFpYBuN0`t}*}?PJ=<3dPAz&*MMeHdQ8l)B~5Y72oMvWm7y-nDoA685CyHn z#aZ#?m*4#D-~HV;&tAbUIxu z7G+s_H#8$NGBXnibzPP<^JKADdzW ztCO?Ss$2+|YR$~Sr_MQMY*W!95osi60^00-15jvd(p+Di#;(;rzsxM^hD`xfB%;1^ z#Ebw=)ra7#swyjtId3HhG{yt#0+H1^bu$ndA(_|n@Mt2YI?Cp=z)T`A}mm-yS zzN<}vSna# zngi+i`K$=)Qn+`Y9zXc`_{s0(`|oo$0=3hV^E`(% zsSFSx_32W!Qq|Vy`A0h&S*GH(gcdSaD<#NkT=7tS$*>6^yKvN z&B0(|LrKvEHBP1gfE3GZ`(-0pt16hfr=|^>J^Jrc_Nl?`+W=W1l<=9T#UlF&f zNNq6Q49bYLwMw~A`SQ6 zd*{hH=UlWW6SS!Z%xXZ0nMKqDCGu!urXf@SAR784v7NohQCyp>hCtPIO+`@OoeQ%-$vIH zvZa}DV?>Lp;W}5dUg7U85fVLF!}={O<+WASo&v-Ob!aoY5MW#FubIQfLK)4pUCZWsrkfQgy~Lo=ngjLxy+Y&djTo@JR!69lIUA!b}hZt5Af*@)W{w|Q?I0wbdV z8G%W3&NW0vRBP-pj>$0*HHCUng&}yr;W$aqb`yI4;oXluc<|`{ol%}RsJU7IGO{^R zpCyT7RhZ5fWl{MopO<=ZHE~H!oEe4bWa5$(qL)SEM2P*FU$ws6yk31oY`F*n05)X+ zHYEUV+|EEZN$$6R4f>Giq}0V^7{q!4z&%HkXw?!Cxtdj9Jv*Mv=1GLT#85c&Mjk;`sj9?GNt0 ze`oLb;_|E4$FEMVp1nDnD>-z59b`!`o)%THnD1r@ftf{jT~uIe4#enlgkTokn9!tk z;NCtx&{SXU@$&%J_eHOT4gCBK`larfD9?f+E}#Z)f>4GMY8^T{c>G|H_{C(pcym(K z1#)_HdisC=KYu#T-Qk`6pZxq2Oi*hpq`->NRIEk`vF0d(McRUZ?bd}}fL&ic>Pz%p zKbK!20JZfU4XMz1W~p(q2=MX*KL7Id(VGjg{b)_^tOE^|xQ=3N_9=v>3iUEl766oh ztn-otFo9}O%_j5N)zlQs+5*Z=i6*9gFHO?T0{ffE1< zhiN&lq(q0vhNOO+yws*rK1@3hTPBHT>Mx{#)p0zx^9wor>OUw_ht=@$UV9$LH50Yq#l>S1P3T zTG*y9eGC7v4!4`nYZlp?%~#jv6I&{=0pGUG=QjLYfAM#~&-DoPx2zYu{Vli2-tq1A z^Bru#hi&@dZS--X~;lox~ zlMUZ;9<7hJ_r?uoghIQiSy1_Xa>t8wtM6E1N653T=%!q*1NSa)_(g} zM~fXUm60(PIJ)Y`^lpuc1oc|rsr}Zlrd`qI8UWg36{2#70RRM4fwZYy2vOSzstUFY zb%|x?qUN%$u`J87QZqBPs;Wf8VzEdPm*@FlkfmuFtKqixm0NeX@rG&Cnuz9Hq8dU7 zbzN6gRhDI0mfrjQ{e5Zyu?g-mGuMTutkU*4iZ)hnd8hY;f^ng0)oeC<^XBN}j`fOu#y)6jKbSA_nM3qb%`uH49%q zd-3As@o&C(adtX+eROm&nTi51tDzy4RoP9unwW_v?}+zycYgNSM}PE(|LpOThgp^Y zh=m0s-r3*T8xQX6@4WZu{)-o{F3zv&S{BnwGUu6-#3QCw)m2q37PBNt7K=reCBtDc z91inruVc_kUClf)vD9C zVP>CDRaI40iO76j$CYAcYeK^e5v!_-ondA|VCFdR=&;j|(vBC}hLIs6Ge(<)YVaA? zbzPKFRUy~e~08&FmMpHmTU;-0ER$(wUVp9e(6e2=EvKR+!QB@Iw1=Pel zN^FfC+$5oVWA%wRSltw>6gimV_oAdI?QK#c}x!k87iDD?7jc!(fz}{`*-&D_eS>)?~I3oEM=cSb6Asdo-n!Tq&hvnI61yNyO>O` z%A&F$D8hzB&Kshri3I9tRC)*HcVbBT99@^mIT|%1J|bdSmUUe(7K@@N>Ut43i}&7Q zpx3Qqp|)|4w)(9#)qr7;54y;EwYtkStridwfm_C)Iqr$jbmb+^xin2<3g~|Ot8&Wq z&$i9Rl?2fc2|*J|nAv+54ZzVH+l}2!`=_=isuaEVjuTZ4K_d$!BE#Vj01z8DyWS}e zy)iPF0XN8NOS0U1l6q0U{kdwpx*~hxTFw|l0s}*; zLNFksn72DgvNTOoN_;vV8zB%@0*&VuIVKj7wq8lsJOL;JM~jR?bk`$`7Y#B|%+SLK zU@_F%&;UYEQB-5F+`HV-!OnPpls&nB@ZpmOkMHdbQ>S53m!)&$z(AA%A_HHGR8>vR zzdkwrtH1u+ufG1~&b=o;`N>a`G;`U(9X^{uM1`t!48G1s*g&35QX)7|H{AU~`7 zuD3wjk*gV0?>Z=CgK=q410irwWAEm(xmCfr1OSLAZhs=0&!_YGG@z+zKmahYpy1*& zswyC!!3d`F@_exfNtUMmfCN+wLV|o}$CY;Q7sl?a2X?$7>TOx(ZzpZ>?Y4-T_Ds~0-2>co-ro|sHJyF_nA zm+_Ci&l@`~al0BxqmK?qY^dNd5GuK%f@eq5m#?Rb+EF$zYYMRTXRI%v#Xrltt8Z_z zY_Sd%E5 zi<{|BAHIb=`wtP~8L*~B@BVe|@!wIg=I;%*o$uG4T3-H+hP#os`4+o+2pbNes5 z_TFonF1U^r-yYV9+z-+II&3?SaK#?KeCA#IvwA)*Tlk^T$5!lx+xmRdj*jrXoY&tY zY~lCXk*@9He`x*x&lTQvfBn#~k^=g6@Kz56Z2Sc}PZ`v=c^IvEyZ0YipP6;9kmmjt zkC>Hu0JnkYlee;YR^`%bK%1{`)&Dh*&J7+t{h8S|-rnfe>mPg%?f2l@%x4F;@k5M` zw7A5g_5QECyx;$I57`^vyTK!7V}D@7EG^@JH@3MxpU}JCU$4GbJ|G$ZGBd=|t%{9P zwy7=WoEl5;TNYu>yDfUTHUSY$9Prw&`qOulNB@TBn}Tm^edr%N%|N3$w%1yZjj(=z z^9C=lK4$i3uj?}cARyxsD-;Zyl-fWo4tL681C(A0;;x6*coR2;c6bFXo0e(Q{PbaE zepUzzLQ{WBupiqQ8+Awq0$_+h1Yl8D*sz#U&qzdwF|ne&Y~L`?~krtQuG zx;8r)^|40SI*Uc(YwdCvG)8ERaYCT2x|5KYiA1EX!gM;lytq0!Ik~vFc=qgBS=Q08 zlq9hda9vduCuA7aeqgGI7^9r)x{esN6#g5GUGp7#3;m2L&J~>w02l~%CX*(1oNh>2 z*8V(RC?dAlb(_?n)D8iG#DKsI$r=X&13+j!CCpF}l^N5N^Mps~aA%x9di3DaPk-`z zKmX}_@88Q4C@WaZCt2#UoERZUkWc~`GphsuK#T@4Xq4svRi&z?hF8?Ab4V z@vE=DdGXD&Q}1$Q2A4z?3^ThViS7^F7?$cmmfX2>_raarPd>c!;RlbOK7BMC4&n-$ z8Iln?@9^&7-u~|RXP)cFKrxaUna;GPx-36TIvkpPqs4apF!C}&agnENElc{s}U_Vc1BUcI;~ifXY~ z#2l)K1c0U%#6lg)Vltb}rqlU+K3puy!60+qyl3x$h+~L@A(fzw0K7H@Si-#{? zAH6!dx|mGQ&(CMGnFbL9l_nWOG*$rsGPijE$wH)(9W8~9Z1s2Cl3`miauzFzBE}-A zf`~*&#LSsvpQfp*0B%8%zCzTvH;H%^vB_0fX+T6~RtDy1ngT>b4u}ZWIaWcW2Fx)X zblq{*L_kcGBt9XZggUso!m_LurPNrrHB$p98ljm$L!}*pq8h0X1c%^E9hw1?fdf<^ z0x}RZMKq(Dz?}1GK4hO(wUQZOQiPg`JZFR{n5c<@6ea|4wWu!V7j$%%=l<^D-opoX z?jDRyC2{Dz5l4C=Ehpc(c~G-88iTh+vSO-A0%!*8$Z^)itf-<1A&6-mOA=U2Fm7aM z)~u$?pbA(_!(t+nE16wrG3B~QH8>N5s_6q7m{<^>I75xuS^*H)zzkU8ONFw4X-ygM z$S4ndf4KMar%xV!FuVslPpbUUMeR>7E@ulNqBKc9{q(2zA3pl|@BP8Azxw9c(VNTJ zbhNkcQ$NhJ{qgAT!Or8m_a5E5yT3CWB+1?=9}jb%fM*~C5U7Ikz|V{N^77*7^~v#@ z>3mk#m5Mr3CkBQ_Oo(mVkqJ^$*tWyt=B(eUIwRYXN9 zRh`XdA%v=`>bh=?kw`=mtUIZ@2G_(xU4L)aw}{9QpDoggn03Ys0aRf!nO$Cjgy zs3ElF*p~|w6SgkRo3R*&i=(l|l+|!Ms}aE0_|=YM-4-E%yxkCGLAIwD zwo$*>99}ER#7;t4CiQ9CG%!O|Bm)p6B1>d8>UYV?>so%eR6+) zf0(dVI=y17GbT^0s+EMQ79|oeHL4A+&aeLBFaP>a{*V9b&FR@c`{(%J@zcF@51CcU zjva128@>KF2_y`W&9DvjZVm`U zQ}pvvieU5Uye!MzJ&%;Iccw^0j+w~Covy*85+PMUB2_f8=sE@HkTWj?6=-lc0evyQ zoEEcjHt@SS0(wBy3M^#I=}xjcNbc=^c6>Si^5w~w$7ioEi_2P4kCysS7yz{~wNVBG zZ3jrG1Q?GlWCO5``JW@0S(_gyu38*5uQM%c(CI_Exm`a6u5X;?mqem!h~7C0T7?>c zoOk<=A3v=^2-WG=Ulc_}fxdioH2*jM=I%%D{mXy#-~9ZupMrB5P#FQ)2t}n4gqkgk zjo91tp}*_jYMoS5CRB@DG!>@gGGEnTrjrt1pDfO2hHhvs(YiN#O*C*{F6&FLy@=xA)SjSv83nF3@P2izMAVB`LNdwtzX4dA!v>pDsv+2B_2 z?04Z>e*o6?bd`&N~%eQRp_G+Ky8Ar`k=?;Pn^BWTZy+k1(82mIWM554`n zVh`H-{E|P6`LwR#C%~=nbBX`$dpA(9{_FKx1Dj@GO_P5!ybJy8^VL!Y zktR1>M~|IKGj{*DzCsh&gVPh=Ud0J`pn9H|EC4-o&x$u z_z`}D9}LW5jxhj0L{@;dQf$lYHdSKvcBF9YYkteVmupVD007^v-0!Vl8FO;B+KuMU z#!34jyRoTX002hTFmF+RM`+Z#l&hHnDw3%xw1!?&iUBjKnq^s>(il4uGccRkd?tv9 zXdwhMEz44*cFyhW>~!e|p^;dk+Gu+}SG`^kfrz6$DcVAyv95`k&FAwpO-G}_cs$Mr zX;+``=Bc>RtETNnpBG;90k5lIh9SsoHak6i^Ww#e7cX92oSpkLaV{AS$Eq4asB0mj zBpU=-EG-s_2B2DR=)iY#sJzV?+A7v>9QzM(7Ne4>f)XG?AW~vX(_}o%^VEI%(Z@gi z?33U7*=L7``_3_`)wP0!`*+5b1gYl&LMYDhGF>?`M4LRA0ji-kIiKb1^75;%pMC!M z7vDU8c6B+a1=%N+s+KCI?43s_>S}g1%d*r(Zw6Dxc<=7+@BQrK&wldZ#~<8D6ZQnf zVnPOqM@9-Jp)8Utb1}xx;hn?%z0vTKrysm}d3N&V?EK<1gb?deM_XQ9*LBUY3U5(V zRW%AD$U-vaEZPpP*?@2Gcs0|;nhTDIVztPoe5D2vL9`@s-jB!Q;UK$vadCBWa&mQb z6@L{ii$nxKs#29IGOO!)J};8QJ$`Zz(U^S{?Nl|2d2zd~Lz<={(z+wZuuD@_(K<%c z0x(ijrCXFf`snG^)%4AqBO;j1EQSIDKvTmT8NgIwu_!}*?k8?hP(DaU!<`s%7cIVs z=)H%S!MLXfQ3UT((-4K$rc9q;3^DhP9GhuX6*Uul@c6;w#}8k;zI=6b{PkDg93LMS zMInG>8qDgdKyu8=>%5#1hY`ht(2?Dta|y%KYjl}mSAR>C5{o1TAz_F!l{{6if5SfsSyHtLjpi0 zCUU?4L?P4?0<&lG>=`UYV2g$9FuE-WfB*zAgZUMdg-$2+^eoJ#SWR3gSqtB2&jWC@ zN0UNrQ9%s`7Qn?S4+a20WQsMVC1iniYu*FC18%2qcaoh?z#od=o!7}#IiG9FZgg<4 z3xJ`nLRIgK#y|hrXOAC0etCR+bb7WB$w$LG2Rru;4i5Kr_XmSKaS7otO@@OsPk;y< zf^%R2gy?EAJ-xho_44HOhcM%Dq5QAZKjOZ(I;0DU`?Vv+-01%Z( z{bKBIydR4Vt7^;(z|@s{Sat&uuLU99>eYDdye0!ZySR9BbaZs|N>vXIcMlE@yk`-K zu4zrO1d9pStqafW>s4bx?#S?TUzs%()3@|xsWC({B4lRonTYZv2Y_}JVmNX%Mq(GC z3k}f*RYgK;O^Jw@rm6R-nO$65bo8O^=Z1cChfCy|qR&utK~vRG6?v90pad&s(-I4x zCQmvCQ%t~V%>50fvQ2u5d2Kb4 zbOdZ%5~8E8Vng8t0Rfdw69$Kb1_{|H%N`u;zyILDz5Veg??3ihd#JFOAcn*OtAJ`L z1$*zA5uE^rS{HRaFT>w|{`sH(^?&-suYWTd?;hU0x3haFW|QeO_sI=KvsUKk+b-{o zri&jI;(m`i1rZGinJLL~mjtmzRSQv2pjzv?cFrkLUDq01k~kvD)2v=h5C|A!jTl8R zLUL@3m4w=Sout(uotEyL5OV)~I=!FfyTc?!Vl@JF2&t#NL2|I;9~|sHI==I(mnUDp zesg>^nU{(LF>$!o zp~d|6SHEkmr!j_Li#k-QNqc}Am}-;b1Od9y#GkxF6vht;KWdDBgdgEY_>SK@^5+zx4*jG^L-DmTeXkS3V7=xa--nrWzA|+fi-@$*Yv_I zscO`Vje^6h^=8H8=b8$m?asPq*3JEo8qGHCUQh9{8G0T=w}Yto=qs9+qu8bZYW$Jc z=CkSlinm4I3&XaFoy%D@GJ`gCTr;HZbKCrwE~^zbpUoha3)g-M0N^%7zy?Vpy1~2~ ze%?MM4nPb*P|&WJ5E24-0-#WVnE(brYXUs1r;w$kt*%k_MdQbc-&ylyHAuT=YRFOZZb6KZIB_ls0IC6y zfjbZ47AqQGJOPLSzFW=eM5I6#b=EPjG&w@|4)iL%u)A3O9+^zdz?jGkV=BMIF*Boe z-G)vn+24=Rb`?!TOc*1303b-Ms&y@OUC-xp@BLsf$n!kQvY2KT076q6_6cGYqbYx(vAVw53 zp&AI7nJ5Oas4A^Qk|c5HLI`Tc?93!oGDxzMle4eC{`%FcR~Hu-RaJ!$vcXVQC0M%) zV!Ms8+`0v7Ge7tF&X#a3jn47*+UJ(F#r`uItwPXDSrZ_us_aNL1%OxqF{b5&HO>2~ zcW1Qs$L6=4N6o&oXgUG}fKZoY;5|EL(V(GLG)5pswIFrnUGn(h-JgB->3feK{Ql2= zIvS)q<8hJ@l7R$7@E(eCZl;7rM8pJOBDIK_T9$ftRMjB_17tC*>Tq>A`RbeJzy8ga zFJHaByqrwtvrsD#&#O9yVu^^N0fKXg$eL^b4fAD zA1at>P%}~x&rU;KTOc4LGNdHW@;p!c`0()X^mPCH{CqmSs_R-Uv=%!y!^NVU&#J4- z>3BRFj`E@yd(T;(W?7ab3AHI%Ll9=02ES|h6(21G-M<_9#3o)$~Cp;?`1X<**p z-x~}DS9qDNRTqm)A4wBXJ;qRhRi;Oql##U z8!ahdW(uK<*KL{4##*czR0A|Q9z;X|AWc0P?(U8UgXI4GyH{6Nr>CcB$21c01# zObLL+9MKY>uBkSmD;Nx>J3FJ%XeUV$?|qVRRo6ts4x2@$2w~+wC9ZX>^-OIM6#+XilQj1MO}wjK3vT()?*i` zL#e96VTK4sF@`cWRYAK^v8m15(FApl;)%s~gvi)Aqy(Hp00}DC z<`*#wYUn&LBXBSbqD;M)dgFTfB**oZKIG0 z04yn!itg-MxlSgt$$ato>*upV zX0x&?$&^JSx~i&}6ofej(sjAYi74p^4A^ypTz4$?Y`OvfA~BCTGP3}RNT?));1VxE zOoe!|En0?~Y5vQ4R4v-W<%+P0ms4p^pm^DVzzMR#>{X-|eudP=^ zx&Fe%V0g8Dig?CYfcz%d9KF%v&ziisn(?Ru5%JzT#ux$L39UhJknfzF9{VIq)3hiG zGYBf|9kv6R&*#%=&|s=s%@(7bT>+cV=i@x9>N3p}K`12*_eL|*E2-WIWXHXMmtE~tbCI_DKN4pR2j$XZY=ksq~{O0BH(If;nK@E|S ziAj~EsmlXKfQX<@HMp23J%7( zxe5s8CCl9_e-6Emd1MnO@;SWI~6rwjYlH`On`IG$GI z($S)_m8Hiq-p7~Ha;%oW|Y@Nohua`Ct(w6*Q zYZSF3ht`aC`7HtfvxQ(yArfa`C}JWuU4R%WSTHcKvM7Kk&y%_;Fvc&N#Y`BjzVy~r zCnK%v49A=BZ51Lt@$vflxv(PV_T#hH^+nsxixvG+cjuZuYW=+E-A9amI{hZD>lI^t z=&k$ZdVjQ44867g7Fnegee#BFxP(S?60fh#=LT4haeoUmv7ylW(=i@z>raEF-FMs0 zciR%*zlnc{3vny`e6M>qX~kEYPylE%%-v#^V)frGPi~qYfm`5buRl>gv*hbmcgOlG zvETD0KI4Xsxx}lth5cN^|IXgAcKY|*kKZZ)s9-miw?R~?^*pkBRi8JlZ=-Kt_OQ`n zEwOYJZow2{bRcZTPeN z76E#aPVXNZ1U-yu9Dr4O){<}8)}NL+Dwm0v)R+GH3d+z|-p5KnoD<^f=t4=a~`#EwWIDDJ$?T_#yeDCm9lrvlRV*e)s zF{N8a7AZ#k61i9o$4r2@326`oh(=RewE+E4V7Ds}^{#!eb-V97f>Bo=EXsIc9dLi`KX(!VwXZkJ+TJ4X~MkEh7#gAR?d=QLIZU zQWr%rNHH3Um^o(3jyWgycE;qArRYtf=E>+&Ux>_q$sBv>MTpf zqd{F3CKaRHxwrR|k3agOKl+1DfAaC+!ET=VG@&FxA~OjJp=&7CM>K;F{(tt~t4VSs zNfZ23)eL~MU>QlOvN-A9=^fHDBPV-LCwC`uw?{=z?x!AkyqA4l*^`~=>7B0b>Y~Xr zxDz-4Gu3@C0D&ML8IfJhc1k5B65#=d8Pu4PPgNrTX2~)!DHPPy5fGObA;goT)7MAG z|L`Awad>=kaCovPSJgVM>llMVtO*u@7-MJnGeb0sAv8rXdiZGXr=NfF^S}Jp?>yQs zvRt^4R+Q8}-5?c9xPbtEy^BM4W0*5(q~}M|tkcvMS4RI@ubJ$3-#n-dpGD7&u@|HMu~n z`@EF}H%uf&>t~{CGUx+1)Bv)xp8RYPDW2SEk7GQJxnBQPrxdh}s&ub*)8_ zjmKlNaZwbV3#Kh3%mA}Qjns*%W~NO{c2ehD%125tB~1}j49*?PC@b9V&UEzX!T!O) zqgOAFPUdHahll05YC_%A>(EeCFqw0iW8e9|nK*$|Kz$1L>ogxTqs>z8r9-pla|$#x zGZtK`nw(xIMelXBf!lJziLPr-li4mc$4sh7Nu-TQjCZytP0+lm%DSp+O531maE{H0 z#1WB^!Z?CWNmz(u5CsK|0meik?6Xnfii}(V@&SezRIM@1MIu1Z4lt-h#KtvhCMJN* z5lk!u1TlVfTF=Xqle5LE*C#vMDu z!Hl9Av19Q95A#rpu|ZfnO2>2qtWnS7YQ9>X*mB`lr&3oED}=RZ%~pX8=#n3DN-@BZ z5J|=0l7FN_Et*inu90GCqgw8%e-zzEG5aw1_cebvX1jBdN}N&_DT~OB91H{#7KWyk z&mdw(<^tJB%^Z7{Ot^4TWNws6?vNAMktt%pd{Ld89vvT@o|e^o6;_Q^6>B6y&g4u~ zl00V$L{L;H&;X6KzUw<2^Zj(yHuo(OXPk4fBkGD(i%40PF~)k}`US4Fw%m$_%OqVS z*jWgns;Zd$aal2%jH{|rf(DdjxmuncpPn2X94^l0tFtqUO$fnz@4fF|YPej6+n0zW z>BTu0V{p#3sR%Y7;=S=PQQBIIQP#1A+I441X4X_0;q4gG_dG=;Q&)*2Nm)tIBBDOK z#0GvQ(}}`VlEvg4M$;y-QPu6~bn^LU@4WNQPk!?0x8HvI#h1VO{>k&Bvt{P;d}~5P zWm%T1bpSHc@pxQ?rjIl3jR=2St?IH_aI>LzI7O`s4L1Ud1CttH#^lLoKFcM`$I}^! zgDZ$xiK3}SD2#-R1{qVYwQUYkz_DXhi)yM3fr!K`rn)PRjR9z|P=k;;&OPmpik->M zqy2l29z1xsx4k_n#$GaunMSc7h+@i6hEWRLGXpr9StKJ@1$zGa)vtg1?bqKuJvcnA z16)?*dEvziu`q+;A5~oaV^V@znZbajX*dCO+Y=|4Dk+V#oT8=U%#t3=1STVnikfWA zZm#ycDjS^^#W>sES*&AJ=(#LELO`v zm=uMQEUS81)gp|Mh=)@9};1jtzAciHMw#fPoOn3?U-B%eyFP zD>|FB)>&hNfe?%Xa6Gq{C)GNn)0vfT;|RJy!`0oUEJ+zdVk9CmXoyW!#}EqQ%zOSL zEiSWje`MN~)A6vZ>PAgjk}IR#m^3m{iWgXm0lttB=&jGMAL(YYo2xYa>Csiy<7UIc zkMu8!ew++H(vS3C4E^qF`I>@)Z`dQ~)`+u~r1N;(vafedHTG7vj8-EYN>S;P4O!Py zQ4k7)w@@U2CZ*&{y(WK0iSiBzuS9*{Zr9M;KmRUt4L_3?;u?PTrfNgDd_QrYz|30Q z${qXP-@n1j(*3cQlkWPycIDz`x=qc_;lsP~w8JX1ro=+TW~>?vsbHG*-pdZ1)J9GK z{fOZFQ8yxFH&TzNYNz`f_6IiZh326oy3r*}Nrg@3-P`zhh0gKO z24$g4yw98uu4$U4X}!70ol{lSdcDr`yeJCq{m4zM!xR&Qkiy$KS6OGZJVzn5B{&CF zdAiC>W+0*vHAV|T>$-NXT#t}t*=RH>NXR7*N=PBFDTgpwOxtD}w$P{=F$>y&R|@Kc zL|B?en^-fm_gPg{&tJWK_58)t?+&X~wOlT%s%itI$@RFiYw|-_7qtCmjKW-X z;N8Fe*P^#>IF%9*@Tf9--QoFHI>)L1Y9bwAFn~Q#9DX z4A&lA-Kl2;3L@e&SB%_fl#j>7*49>4RnMM1OZ}EgPG99PQm(Oen`9;ZZS<$C5MFb;(VUxemcuTh*{33 zr*k=^vaCQc#tPsxMyeWu)^(Vll|GZ{WNSJr_xARjbIx&!qcby&7E~Pxh?rf6OjL@g z;H&nI8R;@ZD8X#yh_k|NPq+8)?LFMzd$50edV2cpcTY~{i<6U+<*IB#Z3gGObFRDy z9vrW>W{dr^`q6!CZDTwe6VNEL8L2U)WEhN)jLpmtAgvQNm<9(H1`{K_i4c$km{_A( zqFRLNY+as|%QLLzS*RrhSi^|02qCC;=eDI47`uM}J4(5!oe@XNEAllLmCS0l6Y_^# zd~ErL=01w_ZbSQx8!b78v@S_fDM#YS2B?{-L17A3fjO2;*nt%$q=n;2!P8Mb&e=PV zS&UY#_4M@g;PuJD(cxmgS~a$2w~i8n5jjby4s!%;b8f?cNN4~}fE@x4!b#KWzUg2h zZl|C1+YDVJkM%yY#k`C$rm)n`H|)}4>9G-)Rs_(y#I9BdVrvhi4w$UU0_QSjwOGg4 zl&ajY_qm0*T9rp9#|N)Z4v&w{PUm%1ajX!-Xf&Em$64l5!QD%1aCj|_La38_wXW*X zDBs%Ja?V+7a6K^_5v0ZUgIuceU1W(@N$yHQ4K#wdFRDrx1k3AXQ9iF1OFi1%%ml0tBmMq2?>WZ0-15|_^GcyT>DYear0qd&r!UO%}WMWFQUzmucV3*%3c6YWPJ$Ufw z!T$G8pZ}*{eRq61KRY{%F?#2BrjsVdpfQFzHgya}&XIQ_l2Y=UYBvvWslVJ+KYDZ0 zuZz=_H(U>II~PHNWdw#eVHWRwR%FFkiXzK%ZTH7MRZmKWZG%xwb0Xqg)=yDWX`Pyp z5tJwb?F^?>b>@8G$%849CoOVJbN9)+j~?vpy!Xz#_jk8OUMSWa16y>6WXh>R zr*Q;?SOGN#`=~yu)k^b4`Q_K&|NsB+i*KGjJvljJmhI_mHko9e#iCH8b3NtvG+q%D zK>xT;r^hEvR_xuIjAvWmdbO@rbzO&L%yZ7XcbTd=L^I3D z^2|*pv{h_B*xR}P;GOSYpMLZG_b(5R)^!uf6(sDXYyz=kash}zLo{X(x3MZ{V~@`D zqwDsQOB(1!ezq2pK8B{3>ibRS91L`WJ}w4Ph#`fbM+V@HP*V!)&GPBa)%wioI4FKzWVzA`@jF+tZx48|MWk6@WBTmHo}fmz4~AQWG#%X)zYqcqiaZ!e84Ff zKH)7CkzwQ_No9C;z~4PzE*h^gsug`j_jdl6!#P)n)Y&=+ZJ8$<_D4Yojpoh^QN6B~ zi!)oVWL%8%f;f3vxj%(&e1$s`=}>uRbPA#-Z7vCg5kxRz5YFc7b;FS@!o^nC5bClP-NhW7R;3J9W%}+gOW*MRWIwrT`_=P1t$pF{dB1Oa?_HmNtNVM< zz4cq#jq9sB((Y(aPW+^Jxl`BF&b%vs^o=s)#TM_#&p(Vk8CUt)w@xkh+W9tUg|0+T zUghVVbEdz=`%?Gs4$mK$ac=D4UB|1vH|ZJ<=Lbj6pHvs`;?vGEBc4A3=w|X8D!ks@ zlU@?I-9X&AGV5LKb#FI6Q!7`qr6&FiK4|Ic`Hu5DH`?cK-;>MjZKU5fKkvLh4_dik z=%(&RXIZ;!vA@L6;Yl>K-2N8}pWL8N-HqJv%UAK;KhmEI{khT`!)ptq#ddfLezbRYvQZq+S&2j7UG|8x3u9w;7kKd&td$cn)CZ3)|VX z-!hJy@R*%U!^2OAq;=(Pilyyp?!pwL-LKT5I#TwDbYE8)&eYI_T6V46ed!Uw1QcPZ zq#+ZDA&>#AlydEo2^lP2VZ}}SOyM#;Ip?y>scK42m_pf-EjUHt)G>JP^E}V8jLG$p zE5jOl!;@xH+iiqPD#T?W#;6*arm5DJ=Xo+f7dd(Fok)ta6yi(Lg|!7`*$gpiQ=2Kp zU<5>s%$#SV5W?~C@v~>ozW(mp*DqeO720TwF}*GkQLD^fBV`)y=B@t$$+{HK>AELe zOiu86T9Sf4+_&yKY9Gq&p-d$zx~O@jjCmJaB%S5lc(Q&^WBqY&reV1O&yIG zMoJumHMKR31&x-nwHPHQL|+8%;r^qa|Mg$~S3m!|hxd2bw5}>K&DaG^@0h}&l!!ob zQR=0084;-Kb;mj?ifn&>Z)SIBoSZBci>B_{CBzul>vahAVzJ1JY&xCp z?CeaZ(=5wG#7PPWMu&+7wbn}`M#{l%W_g}3m&@bh!_(7wRh8N% zn6}Yql*Tk+HOjJFF3Ztqw7m*(cywk~btZK}fUd?+i zA`c$i-`(Ba-`_tvIyyQ$TP~L|fQa(3Pm!-N#-=XI5_J{U>-D;`BcK_U`Fjiw3>O`{^5Pe$I|zqh-ywX?HxbbR{!`STaAU!9zs ztk-MP*sM$Olk_6}xTKKW4RN>a#&qHH>nx}JHT64L8>-7ojk#L zp7#&w3Zgee)Ymmk^Cb0FiCUmbcdC*ZQarmxFYMSkCs{6Koz?X^1f8F)U~MUAgD4E- z!Hr2C$;>o_Xfb;6el#0TT(*_71Z7&Au`v@lagMVltO*dPvI0uXWH3^L07S`cMuNW zn2w9tNU}`HaC{V(%kt>>^ziWT_;j@@OI1YpI*OVD3`VKAc3bR#0gC9*PB5TLCVUBs zbh9|o<{2MA91^7z(ETc?>pIQVx~^@2=)ypvyH+H=xKakLvtg|2xo8(v$zWuZgbe_7 z6RWD4ugb+@@#^)_tJkkjPnYZU+LSr1F6PN(vbD7(A}MKys-}VzmwdnkFmv5BY12!~ zZ91LaAcwG_A4D@tkWl{$Ou=clH;bee&t!cb|Oy z&66*__~O;8S50iliDMU(qM8u1XA!aFZ%#Ym4exdxZIa&aD)e5pR-_Bv(4(HQL`0qR zuFO@4j$O(R?6M*&a$k&`&*~TqY(}ZB1QVNx5UJHhZC&JHHoJj{mE;F)(J>l`kgvGvVe|7xZZ=QVl)sy+WQl;5!va_>08IJ`-F>u_JLGw?}MAP=?s?>eAX`+A$ zflXlsi)iyKQ@8Haj9^BDR@yg;F^Cgk7eZqi^E{u8XKYNtBy(P}y1|RrXC?CBXS3}s z9%o*hE#hHSJ4Hd_NF577#T43D6Ep9b4F$IL+=F|2@9vDg{{H*#o*x{Ztti5?gG93s zqq35NC0}StN88S_0ZQi0eCvL@^w%N8jc6$6-%cMlljLWFN@t;tL?Bl;HDwGUFK#rM zO&&d#`RUerb@0poxa$Pf>bqb5;@@dArRe|r|L*gi2L{;*c_c=45dIx(0 z8K6pF^DqEygs(yjC@VaD-F*M*Y#n`MUxgY@WJAt^>-HZSW_RlM6$UhgL5o<_YE>>4 z3sjX%#@_ps4TAVWs@I`Te*xKvAI!L7X3Rv47}|5nfWUSAm=g(sv{;ARR=jNXe-7GJ? z?Q`Bto95deYaU*&Pu;yQmt)H=>P6Sm6%@nG7@t1ks^5!mHo;#-Nxb3tS5QK?z#(3E zW*av%5MM6fwyws34V9cO4!D&Z?79f)8~cCt{+rWu_3wMGaox<%w|)LOy%j%)qR$n6 z_Tsjk_rDd7sKs&jRW+`(esll(_obwc(JkiZr6=5Se)iMguJiNet>mYN$CJRXmy{r20kEFHNJDl!8p3sR+~sL{-vTuDyWM>Uc4OHH&n?h1uGR(n?82@AIZo<+ec_a38-ukm-ld(ay|k1Oi#8%gnP# zrZJTBv+*eV==~2q{NUZc{rO+L|M;Ev9zVzn4)t0??Hy;CFRPN$RACcxW*{=vpyXm~ zVo(w9d`2W8gu2#B_4V<|ci%nz`s=TsJ$-R@c4kIC8`t$p!DbYLsTzy(#BAD>RSIQh z;TYA-h}p6H*6q`VnwP;lEU}xsRz!^w;(BF9Cqc$;^ zYGfjDoEKv=bDpZI+1Z^PA0MBdELN*k2tn0UIYw(5BdXU`S=V*bREx#gcs$PYd@`Ah zMkCky8e@XdQaV`}W(0I`z(WN6V5c=iL-G|Gj76M?XXXcPzbq%?aWR`M=JV6#a=ETn zO%sGYdKXlTp{bkZWU*LORW%xoX0zF3GRgD2uP&+D5SUsFuNVyGG%AsR6h;G>Dgnqc z-__(cP#_{E1L2x}pOeTkihx4;#T?bVSij<}ruo&aIj!NaCEJvf!vaDva zYCI{5qVQfa=VGIgO#>TZ>!6lYD7+1!2HJwbsZW_RGmA>9L1QH0Nl{EEqus5o`}=$Q zyF2$^?Z0~U>h;0F(b3V_as{v=bw-?Xsrq^EukC5DI(&Bq^~TeUBCeUS3{&3|v9ZAn zdG1s4Sns8a@C&N8E<@}3GJ+%@Xam4|0gxhzi72H^Ad(OxNGQR*6V%8+1dWl|gdv{1 zh?6XM1T|3!jjrpmX=2bMHl;8AO8ExIWcW-ATu2NfeA&O?1+%>aTXT$B*tmczADbHWDzK zs)i_80XC4ph%`h35ivWbV1U@#AhWopSiyoFziP^Py*vr!oI{mE9n3)m0b&5BxLzoO zQ{6iPODkfxn;^raA|EkoY*Nvz;d@%#$K*X4@9XG6^xM(z2Ab7236@82WKsf=FqBPQ z>re)a#Sz+ads!suixy})l26IrV;1+0WqRxff`C`r3x(N8>Oic-y%d)KNn&62X z!8z$sBT>~vxO0Scp0*ZA*bH{C^L+!YESDaVcI4!rbs^L-uGtBDCL%*@LiOcW-<+K- z4v$XH=JOChPMqWfkeD#Wle`%D5b6->&SZHm0S?!tYHesz4Oiz}O3!eU_HIJtI*48* zViEEFf;?jusf`0})5^9@+U0HJ+UF;Z3=mi6J4Vk;=Uj`_p%`NfL1T;>qbi&u5gTk- zl%`n!0*kxM2bo<$T+EgA@^q%+8vlWPZo$vP)clCD#&uP#CyL<%D|7=$dwAVR{a zO1haU0ixtmO_T=OD9)0@Zdk^=wC)rpmK!a5kn`UOh)T(F3AdTdPOpahL zMNnOo^MjN5H&32__vG2hVi61wE{bB5=b12Kr7%XYRQ&=N$g8*3-){qUq#D$K7!*Ju zfyBD7-HRjAejvkN0K7@xjID&$YRWgs+hkxe2XhnzLWqDFl$1n7O=FUu0gzG3^h1uk zxgv*!b-8jxqdY5I=8Z%tnll(zSRBp|YYLR_6-6=4MiXYgwLXZ)Rqd^emCLtxy&w}H zMnhyZK`e~cr9RAY|D(}I4}SXe)uXSTy!`IP(cyeiuv<2-ZIPqtd<0gsPziL#@YDu z_dof`C_iTU?w|g{tK;XzcVN#7|LxBHUN#93)dx$;*R{hCJOwH z_T)F5N;mQ|Z5`)vz_=Sf3BZ-8>mPo8(#2_iS9yt36vyW054%CQ#r(8x4pT)o=*%_4NXXnA|n{(w9BBd%F5H}B7Pw9mg`{~XNT_Wdr1L;&6(FI}@b zZs$Mh_qR8kM^}x>KPW%X{VBKe_g%Bz>HKG#c^898vWcHp<<$*Q*Ke7V;7^f$chr{~ zDy~1$pD%5i0f3m&mH+@C07*naRCe=r_6MioOuOhN92#v0e|^h|eSNz_E_FtqALjW# z3{jVKv@Zip?M9Z2Zpoq!pcD5Uab)zdzpc#r1JYF#jYJiUNA?`&_0mMvZj{p|0z)EQ_KTjYdV0XIWNN z)z!9cP(Auk&P$YP1g7}oYOPgOS)9Ze9Y4C(0YfBaFjE){JMVJS2;-s{KY#xG>#u+N z^y%}%lh@UH4TcEC82P-1WH*5v&3bw4k3pAk#9b)T5Fm zC^_fyeDvXmA8$`~>UFc4mm}dxHZ~25`N|bpH;`#fShA~965Nw$Xwqpfq80!UTXJxi zl4?}d$z(E_U~6k@dwcun@bu{D==Aios;asU0Emp4V?Nb=D#j8uav6Jsw7 zs6o87J)KUc_wMZ+92_1U&kqleLud<00;H;@1i%nO2TQN>2}yjoXP9jeBH#%PGa5?G2X zV`1`B$!6pW^^TO4qQ#oX0Wl@jBsJ!glspgtV1)vq)shSZGIK;QW=#_mrWT?#rb^1h z;*=c$3>fqk?_Py=t?rbYB3M3yVcLf^MKnjWy84hrO8DfR?Nn9OiHD8__ za9m5QMjAZ=LlGiWA$l$nP>Q}LGY1*?@C;;NXdt(WnaXx_`!Rcn>?0XJ#^ik~_Dd@o znyC4JEPz#nBnk_e!Bj}a)LBTQuWcZ<7;%?)8cxg$X2oiO}} ze7;WXg4?2%)Iwa z)2!F)s;W|kk1kg^0cn{~`ue2@Upj^RQzrd#>GLbVKGPV9D9bW1g{D3_J$do!jK|aIG$GioRpO~z zPjnuei&V_J%RrDSruQPEbk<5{nv+lyLwHVjq4X9-7S5>E}L%c zAsgj|cg}$*!kVb24U6xJ<(eX8XpclBBuG03b+*#WT8t7W-WyCkksyWJnQ1gLGKd9R z#qCM<&b@a(c(D84{n`DU>Gm`)94IU`HmXs`oUju~(W^`jMB3(~W&AevrmFzcP2+NPbpCM4?REP`vew^?9D&hhKVnl& z870VKM6cJt03{_QW+QE4Bxs1C4q;qmlhKHxW?)gT(Zyg=kuJl0b=JVW*cy%VhkM=^ zGpft!I-H%9>!yhl&UieQ5oJzD%}mKmEEd*;KybyQEq{M|=e>tJ-#j~ha&Y|Zv%}+g zeK=o~O-*WGN}Y?;ZT`I*>Bd30z_*K-)NAzu+bsWIB}F75GMF0LVoPb$A@4I0$84-* zjTYqI-GBJ*gWauncE5kT{lypm{QB_V;NaP>UO#cwygYjGzyF{A$M*jIbZ>9uvs?tu z8mp^1IG^iP=j07EFb8u)bbtvA)f!Kq#pkb1>*!Qm0I3+z0QvQgxvI!@9=i*lr78;s zCt_yn^?E*^qpFCcD2l>osjSUFXD0x}J=^>LyC>ddNev4yOLdq_-{YMA637;6KRd%iRy=xO)oHx|}_Oo!c|!SgrZ{)TvjA^zgd(_)C)NDp`ul8$J=fi6GG#{O^G_=c@?*0>w)@88$# z;`?r*4bR`?%-P7#yVibw13%3!rhq0rx5{*Jz&G{(&HN-#TRaj#ADMc^Mm&5@;>^wO zI}F_$_Ha{N>~M63Ghw6Yn0vfD? z9BZ;h_DP{b2+8~!V+<;0R@b3vV$;&dd+(g2uUvfi#@8Z}>iSEX_tLQ|Dx`NbE%`A=W`b6A!%a(OXrnyOx} zSwJu%-*wPZL||(uzXq*F=VHT!o$!wP^G0X*^}DfMNCBNfwA*NgYrIhHbsGcJ#{mx? zb?Ii}R7#tOK$I*!#$-i45{f%JJD-30$zT1|-~8mWj~_q0zdggc1RFFM6ACBH)P%CC zDnEACnL>=(TEhk*Ftdw_brp`w>hR$7`Sa%oCujfRSO0XfSca`I65Y+cPA4E5>p0iWD^1c5h%TP z8!6SZquUUSKvq@jG-PSE6Ei_!QN#fd@y=}(`DiwqoSkj2R;%OVd0p34RmK<-YNBak zilZyb<#M?^I~z|Xv&m#K9!>H*H_>D?odr{yU4VsyLyMQU4>7s9-wUzz78Ea%fTuagLjj6!s+C1dW{i_haet!P=N!vWKdTew| z+Rr-7c}>k)sO>_49cpgn%Q^uTv~ppHjzvZ-X~7r(u%_7;tA3f$$eN9Do1#Z_*#62h zc3RJLv#wlL?B{pC;r9X=S+ad@?iSKd9~v6Ec@*RVfka0YP+z1D(5V$YAY%&coI730)K)mWVM@w7PISnF9OBl`t4@HJD4HM@vCUGfPTFQ{J ze>jG#h~)h!Zx*UzCYS<9!GA2eWjv1ACuRXBLeEGWLY8Ui`zDsY)nr7%P3@JleiR9UnN ze)Ye78nAvbaeCf*TVJ1NV)a+u9pH<)Nyc%_668Qv3=r}k?>SeRUK4J=n&Pi zQ$&XyQx{)LJ*Z+x!4<{AQgc6bJ6Y67myGd@M)cnZ@qS&7WAH0a}10&8Xc4cx> z7^PL<;D6WujzbT&mVp@>*(?uVR#4P1p?nfw7XJ$2Z1{KFf$TNXkJS?Nf>k zkWN&y3M7ZVnO@Xkj1Z&AZre;dNt;mab~@#}WgovfeK(q)k*9zr!O-q8!&T+s<9vBM zas!>k5fl*;^3a8$b%9XK?1nWUSJ)2UxG(}%xe}tybE-ffuhlzdwb8!h14-Y?rFrwO zMCExOpu9j!WL?k;;mGE&-$*X$ft3)ggus$=ds&ozFJeS@gdDZ%Fr?9vJDa`HPqAGZ zKaa}s6OuDkWmn`NzFFGf6nX0LC>$H5!-O-Um}UjssI>%YB>uN*%`msqj+-&XPmL@& zd%c}&NcZ<5uMd3~A}^P`-LFq8bQ4Orqce~7iHu`R1u|pRqtRyhFY)L^?nFM8X$lde z_XZE=2mxoY_xGSc_wTf9;54QQs2$5sbY;EZe@;x4X3M7T{xM1bRfE+twdsllbq)tf zp_6o3{^;!F6BZG_snsAzikvMDClxPouwdQK`+`;2_hqWsuiXsySGCcAtt1oT=VUWJ zt$AFY{+e+CyB{(|Qp@7?_J$`%9fJ8;(nB|N%EleuuZ)9;u<+RgY3%7t9Cg1_?w%qH zM<;-TC!q|cVcb;tqi5YEJ~VcNDtKLJ4$*ctbU^fK4`87ztv#h`bas4<2|0al1GBez z|9qJ1a_dz-P{C$ds#B%kr@hZOQ}#8jxVAf{bs;}VWH>(d zER=gbf%^n}Fy!{ZSug}HbzjcpkPGb5s8@r#yu0Lm@fJ@@cF}e3eGi4^#HG!pWkuDZ zPvGvgB`QYaeiz4yVSO5KjJ9mgM3J>pUJjh*ntMVOwS)r(65D4lxN&2L^&pyN49l7K zv)w_U+|_Gm{#E3*v?NmHhqU~upjXKHDAW;V4Sb9XdO8RaG|Jnnd)qGza(Q^2_@$eo z#X+jB^)R)_kH-}9ag95m#Yo<^T&(sFt-=r38-%Xsw}GvxJa5}{1Wf)|EX2}LF{c=V z`yLpPiN@#Aayl%VPk-k)Sn#4@bcG2Lz)Vz$fEMm=^wBozT2D9Hhex<~%5b;e0(vjM zl_6X9&Zba_PeM~a?3gKLkT4hIkUa12lmzBRr}&G)2?ADV9!NO`qanOgpZ(SxINomq z_})vJOaIMJ=`Wu+54|R^xCW{_A>H+?99>L3&CrGLKSZ9}k41VlCSH%SK7*^I9!qOjxp}H=D`6mJikLMvLkA30wB}?*sdi|cm zFqEVNLF0^>zLbn|2Pb#A3OxvWwrt@fDavz#qvT9uLeWFQJaqSX%7l%ZGxpa^1`G*= zrE|@t{-?T=084Xl#-;P;)zuG`?&U#pZwd#Fg80Mq0~4VD9=>mgrkxMj>8?PDD`&L ze)0BF`}TD4_I5zl^=_mJfYC&_*d)QnF|9t4!>2UBk&Mo0dNWSl9W}K~rL7=14xRze zfy*a?o>!c@pN^{zYB5&Ls|TrdxxVVx^+-w8rbRBEzHi^90zWpJn6g4JV10ox3fkJ6S4 zPH29M4~UVbp*$e|#H(1m%+|g%@7~0{*52H1R9h$_z$YXmB#7!^D4hV!r%BV&OXzCd zJo*b7IXXC;*+)TXo4KDQ`e&tS(XinrRmSbMbStsVKa@1_Ojdaz+UfJBS_m>o?HFi6 z{oS;*;)Pm_|A<(P9yW$?sws><3z|C23!_DON>xSlcjsq(V!sh z`kER`_dqD-IJVM+CZu<8klb>84d|KJ?18-O7p?(x??FZ$+(yL=mED?h0I^}F6pim9 zi>m)s<;1qcr35o_P)&4B#8O69f9R?Q%`-`8&P|qxPLzR^j&oads|R%xNB9a8VqFSK z!OF!J;;3YkY?6-5t8x|am|P6|83H0zP_CS-40j+2e=vuu!YY%QGnb`J(Y(uNt&=|J zn4jxb&}~|wl9dbZwfUc2v1r&Zg#KvXm^s~6L0b@&11`=)2e%pCux&!dK*%X;u&xVEIde4#F>&{M4MnZ934=`)aR4UW#a>!ci8t@xsEo5;e~gxJ5_U~O;8lvtB4u#t zu{Rfc^6An9w0}-?aG)Z8pn|ISempq|%v9-Lh)ME0{U4t;HwSDrr8QlR65_)b5lY+8 zZ6!|K3dI)SO^X}spXRkwGAkD zR>6RUNqm4F2pRO*`i8tc%-_t2N7}XV<7p=ehI72b?)XC)v<1z@h?$_#3sk7Jl^A1) zfo_ixxh)5M?Pl)R3p7;`{^9gG?#?3MIm?BHRfif*Lw;7u@EqX=5wOiI1Lb0h&%hru zMl`Pv{o5YdvU9P%Bv(Jk<8vMBCyi~08d~(eh>UK>egY-WEJ?pVjItI8 z`n}!WDihTa`yOCg%)^jgd`b(Svf|6X@nq|Fx7Vy(*zN1{mDMgB*3nTb>^sVs*wpZ{{m=oNlnM`KC|1K4m+2dT zrCjn2*K>OC*FKKe($V1vrsY5`YM6YIn$YCJ?tFW|*lm43x zUU5&B5E=QGSK;?a8I^&f4-<*UVHT)0(SzohDO||SoL}9^T`L-Gu?Tc}$%9kFVLr~M zb7$Df`E1>Yb4;M7_I7B#xE7XM9l8kS`YAjhZ$I_kwC$hfBLk2Lu+h|3J` z;NMQEC*M||+bFQx_z&rK!K?fak$95pdkO7`v~`3Bs@KsHk(0+4s#h72>2dd=xd2CG zujL#$b^ndWkvaxRL^S`wZ*0B%6&U%wU%BVLeB-fiX)J8gnnhOcF=-=E=a#@keHw&| z<4056MM+7~%X({rl3R`f&qH4jW%4x6DqAm~0zz43;+)vvO2?ckpF$fh0@i)oNc$1d zw!?>48~^4lv0+;rD&b!ego$Q;w0(ViEz?F*?(^#Q4@%+_d6)eVOmUFM{*&d;bR-rh zgRx*~u8wvJ9)pe5+PXZzoXrVIC!5EU5|-TjKpFo!4UuYnzfzgGsZm6~)@11O`Lhi` z;j?*(`B)|Y@f609X&T0eyAIf)1(xR$?4`WD{h~nWukRr>mb#S$dCZI-H$-G3?GPxv z#4-b;HHS;mhsmF3_9xsfN4X&cZlb|sWA>p7_H5THAGDQvFML zIA`oY$bYS72ZP~A67}!no^z)i8S>h=J6won8!nDsvuh%ZNj7h8GLSH78mFEVekoCg z>nsoEz~j4E$)H5aK#}SvU9rSued6N8h%emLS)*`YXdxmTTbS^enuw~5UW?~~tG`H& zHzdX8pVB_Vhe~qrd;koogr!5L77!4#VO6QZlRe8cR+6F@ThlMtJL72H2OfXp#0UhG zC_PD=G9)#^><-7c`5^uO7-QB+QKz|aw3Xsh za?@mE+MrrS+dv5AP2IxrJd{l1?T-Vn#0?kNC-S9Y!~nQgKk&_{(AU!ld0|$-zn}{o z9<73c{Dv%l!@|CecvG5P8Pq_fkJQRuQ`B(Skux|IyUz)Pu<$Z8mNBWXyaWxtwa-3z z${*-kekY;PLJJLTi<`#Q-xZiq)mMJ75SEuS^L0y@QiPNR>JI z2<4cjFc)1WMG+~l2^zP=%Iql<5?43FK1ArnY1vUC0BIc zb6!!0m;AG(=)f!v4iVo^n=LZvZEGZo%>U^T30h#|vcs*~lO{V2cwG69b+Q8O;DTrH zft#o65c{B1rx3pEG5P#j$n_uX&C*U!U9I?4d%>$504_JSsvRXwYB~}(t zO$^{vcj&8ItaGdMrXKoXNqb7WbM#EM_q_MkndVn(+zl0f3|O*o<8ykk#W7Xc#^z(}a>klmDPvqLEQQmU+$h3@>8e23VKI`_h({!-Yk!qTf~YF)O=oSy zKis^%F1hbFHx1Fz(Lt#naRa8EHHv1)XD?jfHeG3lW6QHV0e^wz zAX6k}b_{}b*lEg3HYom1qaK%B0#THYQ&I!apI&GFp3})|m$}0?jUaL#JzSazHldPH z!I4y*{dzp`lsMk^^6ryEKx7B>JCn1GNv6jn&jin9=3t!*W2ES2c;IdlC*#ZsxfUmW z&}@~E^7VeWYlTz#oOt@y8FoZnt#uEXnAqs>adUP3FUV^O`k+bs8@iRQN>7=;c(S)` z@4}ulP77WVGt43mg|R)(&b#R^%aus8H7A!PXN=Cr9ys)^9Hfv2XO}Sk#0f#Cws0;5 zDv3btz^$pHA?1Q@?;B_?H>-9cv+6T{EeQ6gvrpnT^{}B08Y1neJ#!gogx)+DU#2%N zY#N^Y;zCzxAOG70YL<@x=S?a`I2$HgjSVmzYorWj@bn{GDLgkC zPRuYrT%8q9sIJ=L52uF?pKM(@07GlG(3&{|=D5%}om&XE;wLkEeLH=dmBzA?BH7*3 zj_=BG5ylFjC2ED^diVYsOg`y#vu&9XWJ_~IJJ7cHukR6+gtH1L$HT)!$zoe&OaPu} zOWU_(ETLwxb`#26(|(Ta_otxlg898Dj6`8?wg7K@%Ou)Ml!My3r62l@Rc*AUPWdIOTlZ!vmT_m< zx=h1vc>GYGMyo@z+7oF!uHX{Q&2dH`ONfzSJ51t*No6L!Ci2?M>%!vXQ-h_z}4 zyjP`Nt38UwM&ku2%idZrN$ycm!N#l(qrZJdz;~<`Uv5eNB1taYF-vh#lC#iKTTo|3 zbNiWUY*rz(kgz{pE!L1|rRHcky+j)nHC&U!fF)oh#Q_MbxZsX6pov7X8vr%@`D>@u1A3n8XI=B?Jz9UmO#ZPdunIBeU^?mqY!Y5@0g#iF8yJXGsLmIi9ZnG>P{ z{40Jcl1ocL_o?(U2Hf=`rs)#omY=txFupAtv^K9@;7p#}`W)TzA*j6me-^-;s%)$4 zLr((xu|834X;Hxaei${Y-mw+$snfnZz&-eB9GEe!rRs()Aj(5sKN4Gzq`` z*|@$uxO zQP`{oQPtQ#VWTC=*OKyFdHZVwyp8lFK{u&-!}#^Dbp$wFQ#!D8=~TzSQ!28n6m;kW zqEKj{?Q})(M;KA7)w&=Tm%#Z_u*cKRjFVBP9tCmHNl7uKMq>P8swBIaGO$VAxDty1 zh_dN6fJIr95-Hnxp1UEl>~bpePRzmgIt<>5CKjty<{Dvl;_54J)uocd<_X(;UamaY?>PT zkhHn9UFI;4S_zl6*2YMWb6!j)@|YF$_}>h!ld#`QOGe9-Xkr8X$WMJ>HGe-g3iI?# zc{y~>@4-Yk9{?tdx(8We^ln|P90_GI9A`X5WaSQv|Pgxr9 zy2WR+TF1kfNtaKe%4$UFcp^-vVTHs%KN$mRDm`YIB3z5SC)%!@r2xSeJi>$69m!m; zSP*RdRB7l(T&2iC3WCi!T}HQh&+K2zXsX)qS*B{*j4QhG-OqYPO&$BPp`1mt9zSPt z}56UiM1Nj-{iN{6=;pvEH_#i;L5qFw&)Vm97-3irqdm5r^-m z-{rH4u<6$8N0fJ>Bf4Q-ktkg=jwcSo|M}{w=vBNTkUpVlgMcggFT1X!oA_QSx(LNmyHHR07rU14uTd+QOLFzYAs922<{ z`Q}xw&+f0d(mi~)aBjIX=})Sn)X{YIR>1ss%HQ$TvRz9Tt`M2!F()eA4?xvb+Do?w zm^2axI!c#LHz(5(62iyBguUv?tn8E?V6LZq2u8i}wCVQznj4kB9rGHWmJ&2^_u{cY z%6a#Wk=1(ozUrAxOWCtm&Iy}r&kI?5andiuPuBMB3Uw1`$1j%h=K7aHa782<{B^R6 z&IbeEZK=?nmz?DJSoihMMz1UJJ$oX1uA?AU)_yEv&~<^fEwS~FUj--tp7`LlYH7DU>B*S#2^xN}>dR_G7B70$$XeCqQz z+MoDx!#_)N3>UiM|GY-JES=9bJW}`8x>An#>@tSo^J@7v=IK&+ixzwo`AD3eKoQ7g z6nT*sMY2YmOfp2^wb0G5&IO?h{CKO~*LayEIKidki&)IuwpG^ryf&?AGa77vA8eR< zbYA%0{qur7cb?IA%eHS3b#@bbYXyq7v=Zw&ve&grTO*6nHLBh2I29|{xAm!L zsG8I&l$O?o+1rZH%P<;z@*(CBS%x{`ixRItX&QLF*RsSQ6GYOh@ky-HrkBMV;;{wT zMehQn+O9PD^x+%(B>!AlnS3)Q8eKW-A`&0Y=BLC?_&TZeQ)8}ZvWT7-$?|-M62!Hu z5FF!+hvl2Rv2NImJ1X-B!`Uw0(-9!2g(Havgr3ErFc`%uD=RC9w6+>fKH3kG2(FOg zleYA)pHnJIXodc<;FUv#TTBEUhj4HRXx%X;sWnt;!$2vnRmr8}DPaBRb3m706Olu? zetgzVi^WH$Uvc@qyLoWgo8sgwA9(ud4QG@<(^y!P@D?Ft0WXI^uTI^sXYbc>&rvr! z#Y^UTB{-UTNJG`8+bz7NCV8`C*zhCM{=!bnw{1&o?e!pkdLT;;@F57=q3re#c*?S( z+vpI~Winlm#Ze1!!83zzxrFeu1ek!qz!?qeIUKR=f_|S`l z*Nz@g_J*!~l6Nw#Bu1=3K{(NrqjQ18hR=UMn-+85RdWKBie_e@G4Z9QUovB82d@0? znrrqvmQA|lNAAlFH%s%Z$2Pg{!4|rRW137N1`PMR0C5}Hn;t^$^ zB`vbQSQBHd_E~ewD$SRt62lVuMtrXK4f?66xFoAw}t)-_*e+5N&25zG4%`LG~06luN#$$hNZa1w1FE`(&cv+3|4Gms~3JYM_ zO5)upsLaB0tg_lMF><-Um5h}jnAsJCT(o|BbBj6e-|-_R1d9_(6^BV==8UKS_C>zp z&YTpY-YP7ZnYxu0|MP;})AUP4+^-knl0f#)VX~5%#C1 zJp-5)^=?@v6gwMrIYVuCLr_)GrAAh1EOiByv|M6Lw2)i+{N4|mFB&Eca&jsY@m)Ba zA<27XSRXaR#kbP)E9vQA@>~^abo*=kplgCa?X-uZw4-9bh!NP6QrVO3+!7b-e2?KZ z9lwuRqVUY3_9jHG)*4_7$Pd`W@z1~OOMQRc3<{m@7q%TGz5X+sRc84UHa`x7$X{lH zgKA#FM&w~-f?$GPQlO|%`ssiH=aVVtloBNov5g_l%+ZU<_W0%g+|xkS&4Ja)o|IM< zz8PX_E`!Dt-oeFvkVn9st*5n7`;ftuXjAEk?}__q??`?Li3zAR$a%dufaM`i?Jvy- zHEhjN_7V>ylJ)gbsX`mU$g1;St65o3Kk`F|`L#9Y?w&DW7acN3q5Mf`GO$C~2dwu? zX<`CchOn8puZC+$ zRk4|>|Am`ODe_+Gp>CIA_rq8|=gxXthi_mR<@nfxUmTsIJHzGhsj7{f?}8XSs-y5Z z!IENf6KzX>KdjDnuJ>3 zjFcC?92W*Xk8Zpj(}}$9_P!RQ)OjQzl$V&!fABE0GCZJ$_jE|#D+=&%^?bT|t;9&7 z)?gtXXMqr^>NlJ%Sq{SVUrK;XXBQOyqQg;o{526`k`a}Sk;8$S_aA&+o!)#i-k!DN zc!@d}s|B4^B6ocR`AY69g~WF*R2}9^OPQSE#&&oaIE9Zl~_BUjE0BEfRSYX^Ay7^!XDR zm}m)3HM76Ap9sGx%fW)FX{dn<7q<1 zy;QI7US1yzKfDa_!iOQ`zi=HtSGb4{PpS`D_hh?EAnCk*J^XsXfMm}F+Zl1r`?s%+ zmPm<}#MO&X;G5I;!?O(ZH{7B7jihcE=X>4GuIyv|!^i`Y1?i(BbboLTifpbt0S4$$!cQC9e;R~bt$Y=iDeNZ+lZuJlpr7M zRZmef!;1fS-`4}25(aFVq{MvRi@!ahzh`5R7y0h@&fs!(;z7;hQ+G>|(!>vFY+%d| zx8uAUVRK^VR3!-jR?4F6N|Qwn2n6~oiyXoyaE;htcCoPXC&nyRYz8yNMJu_rHnla? z*%t=wQd$-Izf2{GJUa6*D-@L^Mn}ICN6jpCJRMH$%-n#}7ObEemEormp9wZ4sbSvMo-i_$J>9dUZfV(IoAd{+gOM zk1x>N_Wwq=-5d3w?D1-?sv5g%iOO7C4!dQk1!$hJQ<%?S{9tCp99x_m`dy4~fI`X% zfM=mZ&pR$XO{UWOnJ$eO-WQzY_8d7%<-(5#MV+NU}tZ|D+fHVR< znS0k<Sl8nLig546MJH<5ff-_=rIRWe3WZXKGQ1x-H^RQ)hfcOq|8 zGr=mlMCF4`8JHcIv-EMP`}c8TCbVp3a&V47ABoLi``Y=GeIFy|w zs=%aGoFgZ-SS38HuWzRhJMt#(-xE|Bs#R8E<)N!$Ap}DIaV7ZQE-ZoU*gFd~`L7XN z^ERx^b#^r~aGa6kGk4ETXKHeW3j_GgnlRCae*+uhf-T0ru<^CrEbuD;-)Z<|tKLWW zv+QiFYd#K~#*vpj#iTkda){QYabmS)DIh?Sl_xWntl%+GD5nU#E*reV#fu>0zPsSfFvQ@Pgd zd(hE^V)d4gz{2PpzS)8YgJcSXJn@_AQ%}gVe}CRH_qk82qLnI`k9s4)h?zZ}r5V=?k>>htPB@x-3#fT199VBYF(EHlqNb6d18c&Zm z?kpTm*%P(Y`;-4d9EMEP2qvuZ*us1!ljC1o_a%=Nx^8wV7S`UW-i(2+9R4v(Bw|k$ zTfAbT)$LY^_sixRba43J?pEiHtS%dWOmd`DTR>siH#oJw_QNo94$7ZaEO*rhopL}m z3!^o5rVGEcN8{qaH;!`}->Gm6t z0$ks|j$5CGSt5a^y+Z%N%Nd8qtz*BXqTVOl{`Ohf`l>8N1`sW!3pz};E0({mVi}Z> z?O|d(pV?NUi`cXib`(}zT=@Dx*Zs0>)%|p^5%@47{qrt<*Yw(eEk#G|L`}QjF=slr z+EwfK;*;s^c$~IV!D{<^ZwjG0GI(d_ZVt54KVYlNdfZk~PQ&lYD9**wEN~b5JDP^d z@~dFcI)6rCB>|Tm1o}jE6UvbB5pB*NoCS)fP@4n=Aq3mdeN)D71zF2guTp({YmAI>U zUKS>&0yzqFAQ2m-&jU*uMehsA#|RJkN_k*QUSxd*9ib>p3dM5jF9{+ZaZ1)dwuq@U z@~7IB!u&(fZI#SX-0T!DOpa}d`cY`N)G#RmzWNoX zkFV8)H!G~7aV;O+sR=piJ@7uxG`&s4x32yj`|j1&M0LdNt{pVB@=~}$l;HSvy<4ge zAG)yU`i$BJ1H5G+v_o&c3|i-VJ8NBee3^go0lvQ0yzQnOSm~3vxt}-RPi$}%@}Akf zK8)MT%#R^mpoTbQZMejUK+*f8&cEMZ9A0nw%K^DC${y1NY2h53i4vshHFoydC3C%yzltj{KpKD zyuyOs3~%`TyW-y7111ih`;%C%=qBw{JhSj8?`7I&-@9E>*(#{L};ob8jXgC6ql`(GIB zl;$%rvhJCOs4D}Zlc<9}`Bfw32I3+3XR5_^&|rBdwnztgH96X;#486*+IZ~&B=O)54dH~-S9wsjw`{d z@m{zro{$0nJ+kLfF;M&cZCZVnZFnURlK2vMUon zj_6g#IkmI}1@&M5cd$RS5_ugdVIijCA#uBg=a#KYSdJ+2_kO?JbiUpS8v@px@i=^H zPt&diLgx$>XB^<=APCZss6|go_JNkA@Oo4asOVeQ za9l${()Emr@}|brvrRkca7`igBDFOu`nZiHR!+0(Kc7o^Vx1{#6o*?om=|0`e_gRm z>v>l1uu^7o+}7oFVMK2bxsL62P61+c+_)P{v|puvYh(%omCcs+OGx$4*cdJ}-UqfC zbosbJ9gilxCI*^035ioaJi2K1LHbq^N8L;ZqAE}}wH*b>0f_dU+wxx&bB8UBU(@2I!h@k)0-6mH!byDbvc`U3bEc) zeiz{FsaD8{K*0yaRt_CcrV{qI~MZcAn&7WTNyM}aANy4pOjQFyUzCV>Gm?m`T{60HFxOrHredw3Rk$34-8wi*5IPN8Q7D3jPwPM6KmV&{&D5*sVIC*n*QRe+BV+5p=K z^|`lpn(_mi7bulWs_uq-mP~0xkEedoN_Ti43Fr^RIeuHW#vk14<`r5<4sI+)MQ~i1 zuZtN>S3{;K4j-!ZZV%d%v1Rp*)NT=CDs71QyBXj&`hT}ZXuX6jI$5d zV+)Vjj(OZx01?-8)g|P2Bkh-}{=lJ*;JA4gQh1LK01Oj2%o&s9+2{o?jiq>#i^8d5 z8H~K_B#{PqUmO+>VO)@m$#W>?iwoVOtDCNb9Oeu^S&Q9`-McL1`yUdRw1=yw?z!fi zL~tpBjd-Ue)i~MwtYpp7=Ul0zEOdEJ=6*LdIvo{-cCqyY=|VvZy?(NlX>(;@YMf6B zl(Oy+aHUNiyzjru-rAry@PzQ|ZqV~Wkl*FzdT*zh$6|xsjN`tcCOq}Xb9zp8EUjuB z^3NZWjb}^1xS6!L^Ysq2RTzVaYm>}v(>j|!+uPP!#PE1|VZYgbvQ`dcR)u5YM~_HI z&MgYyUZc(;BaCBMkp;2&xpqIzK)(eq*TA%aGF8SFHf@PLCE4EnJm@FNatfvkQsNAMv#qa%M;En#q-eUYFTm7Ndm1$7Y-Bk3+QXbd0l}PxRfZee4{Pjx zh&x(w{qsIvuO5zfNdde=@10X!giX(vhMijhug7cu46jxU7uFQtcF7nA-DVz~awn>y zE}l`}=asK&=9bAgb9X!OU-(iJUd#PN-d-H{w&osRo?W!N@*TGeFJeU;6Ws!&c^^U! zX+>TzxC<@>0UgZVEdeFX;Qlv&J?c?=;+^e%QbqTQ{#A7I$S64hq9E!{BSM}OBgNPo9k3f2>i z;3N5u=eCaf8-4d)jzcn#9oqa-+_v*_vG>Pdf1*?3R)4Q`w>{}OYx2DB5|ho6c62|D zARUJ40~@=Tz`O(@63;BQKZw){HdLVdN5*;EgA}? zej6t)KV6SU;EN|BJn8o=*@gwapWR)$*bZoho^e$uO^!pP@Cwg%rs)n1bnU1r*+evV z1j9Z1Ig6&JnWHtb!1MK4pVU7{5tSgDLEEdzPc%_2PAAyQT7l~v1=JR_o-BB>7M{XB zST-wKnh`W`Xuz_gw!|E|I;Pkn5U7a0-VekowFdmg@vyeuS(-z@1Q#SUW&)XQtAR?` zCmzM1($QBxCf-YKutOgq?Loj+p3gQa@DOo2TO#5q9jRQdz;%JE*o&pk?yFHpzDO-; zA=!&-WZ5nK0lT-}I2Z4IatA32;;45SOx2jE(L!qlLzSFix`!cqwGH8%qt<`={L3Sr z$m7e6a^UOe1Zj{rD||?GM_L>DvMq8iztSKm7ur7p{jH&<97RXwQ^!sw%t+g|52-Ee zez-oGDGz#^fuinMaSzyS;)@VD=`7iEJeb8|2CUJ@TTFSF&&f#McW0CXufVLrPnTC$ zTQF46UpZ>NolRE}x0%S8{9@RBx|#xo=@R=kPqhcd6(-08gayJ|)!4tgDTov?6HZ&& zl;Sw!0jyam!OWD7g0B0P%{9<>xV3JOis};u-zkPVm{4}78b)AnsyCh{dO_j&<^Mfh zH8n|~#cN_>D6Vc`z!tnz0g?+0LnSY*aoDk3;{kHzXfagY3qMTzc=~Wtc=fKzY()J0 z|13cKZ2KwJd5&*CC&KR;eQkJWE;qquK=oN$|13+urfB|`I3)nFE6m1p~_$~mdA-W#vUM=9ai>p4p6T+)fFA&bqi)agfwt`Wc z#`R5V0KeL0rhg-j$LEZ>W*EXS-E+bp1v`%AOu@o|dBOG7ova;63^cNgl$4B=91@{m zgK==OPf~Q`>&JHboxqfW(euw|z#euNtkC;iIA!WakGV!5^eVX0bk-IpYp(e)X>YD4 zzjT0rgREr8!KZn`ziw3HCvqm{5}a^BeqEyccQp>+=@G?^IV^*O34U(S$q_29jHf( z@nRn|a1Y6e(iqHd7|Ag^#Se>3_V^6fiz!}byDIclj24v%n68}v_u(Z2q#}CuZEjouF%tIpPzB3_sdXi!TTOC zjTi4kYilg$segU(BlvcXbv{ucXuHOxw!=iw*9k2 zvu~fI32hbAXkz7Zi9P!5QX@*a?fUj*2##e@{(ypa2Sp}1ew#%!?k`b#KR)@pT)jy4 zIhotu^s!xm35TM%;rl1CV*t5G7FMZ?Zm!dEblaQax*Y1@!O^U^vd_h-`JZ%f*mayE zZ2h&xevQr(sFK4|Dwm8!&_(c6DxOFZEw~&C5Pj>N(RB_SjhdBr{WDI~_shkveTt7f z#CPKJS?W8H*(&{zUML-XDm8!nchxcP$QLoln9akZa2ZbA> zf_~b?;Q|o4)5v@7yNM0&kPBB~KZkePw^NZMDBdQ@gXsCt@#OXT86h&z*zazZ1yzu^ zTXB|%_KpYn_CBr9Dap$qLArlU_7&MFxA`78(LAmAa@VwTALE$x5G3;Ef8cLK_}(Pl zehYj~aB04mEeRAU>c)6reG37+DNFNONv#ejJ-;38qh>X;f=89F0$3A)98FzL%Xl#D z&+G0tUa=^g#j4HnNQ6(ux*MnJXpj&}858s}lh7_Jtp$uPP3vL`W-?1?LwtuT4k(sp z>^vS4OT~>R<_$mBd{-=vpI9XkzvP3Yj+7(vPg{DoOZ zvC&miL3-GKt#wwuY`)^Qwe8t6*Zt~B|AxiyK~9#LB1I{n;2f{`-`E8RG>DwBPBZR# zRK}~+CyeQa_k(kE+yFe7L(;-P)3cXcnFCY*I-&{#W=nQsQ3I;|O^9_%_qUUrsS(}7 zkZMW-%nQx|q)O|2!vZVpWz%2X|2j*OXLxoV6RRR`Z52m#KMqVl0hluzFHdpLLr?+k zFF3kk*K}*7PRHb+r@D+5JB`urARtA;Rac!1wwFe7L6+!h$O;dtyA50fy^BEmI!!u; z(K>XLriOUW&_XOjWe%3SiHz-s1B`tz+3TTn_rrGFgz)pf^{F~D_wo9g*fu6^kJMcJ zh{X;#tiGq|mNKa90i7ab#8Ar}EBnsD>`Jwc-`*4h8HW$(>7(wmPIY4$(8>G>EIInm zcZEL)=#9^AlmGo*mB*9mox|Jo&vOZ_);pyw*>)WQo)K()eoBu6xGj7;- zEqd5ilL_y{R}Eq{1YYXbgdykrOW&D4a^<+cNzK6e?ZR!qjGGf{RYUqRquS0B| z%?dpTmMuPhu}&M4NEUJF(~rkK6+f?ouoZES&KwwY%5=G~5rUH@m7q_$hYSmb-ezm3L0f?c$hV17Ke=wW|u6pyuQ-JYkF&|l7Gh6j!eltW;z@8R=| z8!e+b5^kvadC#BcBgJXbqk}+wj>A^>%HtA6q;#&^`*$2MGT5G`HMRFU_Zh#XdKL7} z0~|~~s2_!I=6IB^#_?%xx3d;RNyb@V6t8-LU7O8)uCDQ;HMkS6IIH%*RJiZ^VHX2b0crEJj_%=alehd@g7UUd zoc@*bCNWx9Ohr}M0^kFk=B5*Qf1&Gsc)6K?#)w9Cq>;dkS)8i!JaY@4om=GtQa4^3y`71j5DeHuiN5~O3KKXii%NQ1NtJj+@ZxVU*gAh+)jku)5hWX%@ae9SQL`lFLu-O)?7CmYXmCH zYw$VtysVG5&YEfHN97_+t_=ZD!`7qhDBr%STSqoCF zy8bQpAKV_btzBq&jI|}PYB9)1(MN~>WtBF2z`Om33r7>{<9S^=gk{`eQaoZ~B`)5t zHHN&o&vP}G*JI+WFxH&_yIs(+vf9)I+Y076-o$I@=eet?$>Z*E1Fyg{s z9C7R&94FIlys?&aT{rG-Wusb&)M$slkwGcE;b0N5;`z*XSxm*SRNcbQjO@+ROQV~Z z$$=p&5iX}R=zDgoM$wa2XvD)LOMkqrvOTjNg+gJDB@H$BH zZJ+L9@}-w;9hGKTKb*ug#aj-q1YoGolDDM_B4)BX9sTM#mai=N^1$Go>_Xb4Kl~(A z*PiRUc>NG4>R;{nvrd$RwiR9EoGGyTE{0Be?UI{e=!ODdaljW?Uv(&jv-E~qYVUCx zy~@JasokOjDe!56WO8ZxB>QELg&HA0|2HL@h{#=&sD@o7n{ zpn?yRA_$Kr*sI+ct(DDms<^IYxS6`R3ielq{RlBW787k*1aOB>rOC4cS;EyqS@^uDT*Y&4k;7T2AWN(R-srd)S8a*gy&lB> zs(?%L#BWavedNQ(vs;A}v6+H-A``k(Vo=>zHEn@Da_V>dW(ZMFa9L?Doig;?Sg4~J zxI_%9vKRx^RUJmYXhpt|g!LDk9)gASble~?H$B*F!D-x_^8FGO6&5<9yHcC6$BkyFfn4BQU1GCy&e(s?7nNQu7HY%`?Xk_9~sf*8OrFl zw~6G1m9Po(y8k6!GJaUFj%5y0q(lI9&B|}>1;R2$3TN?tF$$TQjtbs-QgxYx-Sqfe z_sl03Ed5S~)nB#hRcbrHq0IFwJ)*v=0yg!LDzk!Am50t^CWvg0gOIHcr9#Lk0yFrt z=0_-5{wUz2(VStONd;%jX}t|%cGF9Vr~S~*4Z^N3Ex+2`JbE}X1yVFZadR@*ualcmmN})q0 zYO1VSHkKL@1S7%%HTypY5v&AwGD$Z2uf($d{61vS&bjTN_eo;x`kx-vzzKaSw%qB8 zTC0E^A=$LS`qh)v`cvQ2_GM3?Mp!=&tncBk5Z8PCkhY5Jk8O=H>{N8zX;ZCn);d>K z!bgOo)Q#7<{I8mAC?#cWk$yPDQm38V_j#!=2#H3Dt?V>{VN6pwR?YknCi zHOZiuAH-Xsth*GQS^0&x(tl<5ckt<0ZHj}u18?j6+g1A>FbW?ORwBpSHuE@PpW6gvr1u7y7ZETm_ z*Gf?Iw{6E9_*B2~wH=uM+X2j!0VzTu$85;kl-L0S53&oi3A>2%;PRIfIW_)y1E#uZFXa z?AT(%^9u=CM%SbGMB*Fa_CG3#rl2Ds*uY@~sHl4!GkTbH3b>l?3(wUu#a3b0RAUd) zm|?YKC&U)C#L6HnD3<#jdq^(4OKfHe83EV)1~h-qTXNx1ZEnv%fCvG(X)hc#^3pLU(<$!m#o8NNPHIE?czSe4jrT=R^0ks4kn(FAtIS&}6>6|(0^eW_)n&5Y)1?+3nSXKX< zW%ZH0e#m?K|Q#r^%-=rdM~YtiABu+BqXhql_*D3^|3n8!Jb(|#4;JHRm~loMIE zi|-N)Sal2N8he;MU5%8>pmMsHTFa5RsXA@Uu3?z}xmIznY5Q)0>fV+M|Aoi)RAn`o zN54f_#$z=kuexng&`s=uwT}Dd@$o_j_USnvS^udG(Hd3IS%Q7*bBf@M<0}-`u@s;k z_S`mj9(nrJPV!Gj^dhqjNptB~&{lPGmOA7Qoqi*HNAC1dhh4QJy7RklGwJ4Y+=W-$ zm3Tp7a;4Erc*LqP>TzxV{Rt8&t7FzJLH~%3`ap1p{b+ni6NLh22;}b_{On}EomWpH zKuC?BfJ$;HNY-e!__FS)w3I5@u94T+x#mAgayE+OUlg^q*HIOGq4Z%GMcJfJ{?&1E z#r-iqjo)@-fJSY942LSKh*?Kvxh_=bl+W9Xz7rG69Jc}_#LY^7w^9bfohHIyD0I0| z*uXu{3t3M9YZ2EU&rW6Mtv4hC2Gf6It68I3tK|Dy`hIf7vUotpwzR-Np}kDe(8d)_ zK40G0V*S`Sb+F4TSrf~#ourI+$M#wxcgU!_Zk0TbTCk?u;Ux3y5#c_1pLw7b>F(_L zR($RQ{C@+z$I<}*hn|pDju7d;9Ea?lQ#1K`PMX`jEjEIr8gDVfUO~VV@u5dk2`U;KZ485==L6yN3 z$K^&9Mc`|%p^Sy7?r|@_VpiPmcoWI%&MPOic69MT?ul+MW=q%v?xvV#c9rrUhK4QGEX;s|k+tVfB9k|uQF~RjzJNsui zBtVena&p{6Hrdh(=o4bX+ilEsg>UcWR0zLtkom1$f7F_%w8LYo9VC|`AS7V}I9$c% zgd~rBYtIMgcLxAzxO7T&YI3rwsjX^X`n4hm120%>(6>P$g{Cll#(8}8@7!`EUbiU2 z$1lCJ4!gcD%+j-Cc?Zoc5ec7#LwUxoKFnP<0C?XPYHJoyD??k!Cq(VUi!y!=W&j0Y#n@;azMNtfcLFx7$ zH^Da&CQu}h=h)uPXPHT}T0t23p8;W!CB_JV6mNcCgCV?cuF&amhVgLqQby`Ylo9 z@YU7TY^jezi0hQ3+y3BpnWWEY6X3#TD#-5c z_Hl|y6i{evFGlpPHr?d1hK$!0P4xM5OvMX!JetlSONtcy%cqNL0e~EZs zOJz@^^qZx6+QkZgecC>5O6HYeww@6QeHdA;jh9zn79L+ungC%rD;b3EDdt?3&ve`@ zj7<6eo0g|*e>T?BvyA)*uN*Gnh^eOjPcwns2mO3i?ex{1enm-p=@5Ck-s?=p(4TB5 z!OHb`AHZPc$E*6;wWpK%rZsO^_j}#E6#v#6QiN1qZrh6$(6lis%dNAF>f0mr^p5dS(hBQ)Rz31H0$~ zbrVJvrE=VI%#QnQd85v`fcwXNmH^MYOJ|oAHrFajrqDQLD}})-Vt!l0KNBEJ2Z8PW70J znE_(d@aE0=CMXAT2G*0+YE~V$(a?8U%9ypf&MW+{iQvb{%6#9@r~7H_D<7xowSXp9 zS`1qfaj$8=>-LxJuSG1S(X@k@V~N`qM4n4-vTo!@eI;aZXO1ZaI6)yV*mz7emRq?h zFt-h+UdR%5xI}`%Jv@@z-NcxF#3IT675pXp{qN?_Q^zXo=2-4N?)?rD0q;Uy zKVCd`J~A~TrS^n{U*ailTYlkewbF?7k82~QI#F5bN%WI<^?NW8n!X^VkZw&e;M-Rl zn)*_Y?;FzRvGuR7(@d&jocQZRd>*Wi3hJ`r-_`V?%dBXT^ReX{WD@r=M{Wl%l7AgK zKG&qv026)M^;{iTZx>Z>vHLSk-RT8uicy>VC#+uT=>P7n#`2NkD_1x;cn}89b$aSo zhIz{dgx&HFKu&S7A5l+s1+|gt77izit^DtW7(iF)Yra+_#^=q-%|G&)Gj@x`+VYR~ znKxt1bpq2Rvv~&-aB%QYaxVgh{QrKpZfjw`dgVHkbEtEE=jUJ}LhtS9KR#Z7*OM@( zFUtV6VSN_+eXBog`C(s+O!kJ07BsrwRd+*-LJ`_I{iOdHnfN3s{dl;85EaNa zb5P$vyOR~yj66``H4&!Divp+LDM=+5&ErP`M~j(IeNUq=gARH>AbY3+D*Q~}X+Pnq z^2y82Y@1>w^9s$rrS+sU!*f_`bXW`PM1IyJ;%yPiXI__NR=cSzWMq?ry1a{ zkI2*s%gOYUb=IiLEW5LSR$B_bf}p%o1NxsvQKAYAx&F%2Ep^?`Pd#k~{3D=izj1`X zzI!P6tqEG}GrBQA8Mq!s`N)enlqne_=m!-BiKuX7HB@kdFUpUdBp#29o)1~N?vE~_ zqYuRkRAi+zRn%1q*oqm=W%3s&)4a;Y|GMP}?oJmDNIV=MpLgF#ct7mr4@xS9ndm}$ zj~inJ&11j)0Dr~_65!1u^zO4~r4ys<`~O}5n4|In;cND3J-dm7X)T!pXxV7fnpgM& z3;ejTrMISOfn+$Yg5)n9QMtzio?csqJ_)#B>$?)90mzKs=}nSm zfu9&Y6S-vMxjG{r?-mFvEZ=)m6h3LKbgTo3ZblF|ueAz(bhqLN6L7$N9JnRJg4g-geA%CQJt+D1 zm&qsrDGGHDWkk_Ws`&0X{(1|LtX952iZ-a5mCB^BW<-QHtk^7pVbZh29Xo1Up<}4= z?dK(D(s|)J>y7!!b< zqn~U!B*aiZrYyaltl8SJ-Qj4UdUzV+2A=1eH#%wK3%7MPlwc4a2yNm8xh|Ngv^3qO zRCr-mnLG3F*;#r@q92+IT&M!#N1A0HGh^xGCo%DJ23ZFbd}{MX}0V6wS__ zC%5v2a5}H^qxaUm&z9rsvh?{(s+>|l{%Q3d&+#o0BKsf+GwsGhR*w6xRs4AFTlCL~ z(Jg{aT|0fuD1*y=!d(puP-x7~d}M?|1{;=fQ8K0Us)3m;Q6yWSKxo2_w8ra6(giZ~ zAYv#~Sq`j4$P}e8dy~b5xdF(e+D@~-`S;e(Fmg}qs`KJSbsP_#p-u52z>ntKhTB_H)2 z_#<8C)svdI_w$JN?R7{p^tX^KzxjenP3T;yxy(lyclD+I1nFxuLbjbcn%_uLPuGHB zp414*Y|RM5KBjsmK3--`KuFWUqenrnvqdM~;na;9V99$p+1}m=xG4{?ZmTJSC>JR8 za|Dxvh!*u-)^%Dwigy;Tlmw|A5SHA%A{pMV`WxXI?$`1BGJcNx@(WGh^ko8yy`TeeiJY zaCT^RgfkWm4oYNCV1-M@L`FdkrCAL5s5>hgZx1oY&lfqHg+rH)*$>E1WRMCA}11kkZ1a^L|Eq<<^g7$nAXeQ(ou4f~pzkS`krEy}9!A)1!fs9>sX6 z=0Eg*bjdaG6*N83BXLoDrJtzBn?AUcWzK5v*q*(J`rWY#5%-D2=r(S;i0-A>`XJ$7 zckqq_x8{5==6vtVN z(|dGEZQ>WLxIr~_#7lw3oquL|xwjX%Z}0QWGKYRM^5d2ZPjVlJ+`}rs*#j$JI`%#X zDm-zQe6xlguzPlU^C)`SH4@u5`1qku`DQtXnwco$QzTJ2v@qZG&-0QC9UCmv5YJkO zL%8AO7eV+FoN5*Ydx<;cqdLtwWTL9AY1#2FiRJxD>=X6szptDt=&mR4{nuPiZo6Fk zc38wOJ^z%vf3F z>X|ry_NV1ZzbQuw-AV*#dc+})1nF$7kXC*)O5NkZ;GbHIY zo|%1odU(8}nSaQ#qS|r!@gPz8m2nn{{DLWb)UY2G z25$oxQM|uT?0y@3*jO{3HK2Xqp@)i%%-j6#`VY^TW>(O5t;h>5VZ|K8g%r}n*ZS#ema zrToh9O~ki@gKco0pP+K!k&3&0j!VZ&2<*x)hWFZ}9GXxj^ZCz?+MnI~^S%GHB7kLg z#nGdsLm=#+)%{0X72FU4^aS+iPpO+dIJf-k@c|B1JzLLb0F@t`?!Ev02#KA8lEaY! z8u`dF+K~cj0p)Z#G|Dy@d|3IPukx~+AGfVa&#E8r5|wgKir*e1fKOIE038=_P%|GU zQ=m3eW*{!-T_AtURzfa~v&yFsxuknu^ZjCM=e%-Ajm+Zv>*NR%ETSY=h}Ga`G&Bj! z$1FY0M~;Ghvh_{bypuXYvPg~g!|;x0Ids`xsBNXn24HVieaI;N7{)B1Vutr!o&~%i zr2qy4L*ut8{9#MRC_Dri&S=}iT<0qb-3^Yrd9JpO;xp`!3|<$XlP#r??he{ zjOm!r5*s!-Ja69Wom|*9K!K*E4->@i5P~1HY$mA1F(a6}|3YG(>iJ0^9{&(8% z)AgmAo4YEjq@}fWRQ`lT0>!w=?yi%7p~0a|*VPSTnfddEiJqVNw-_R3CtWPTJp9uS z_RmDF!Srcb;jEH`SlQe%ik03*X{$cSH*Swl^Vj>cv&U5(?d{9RecOQ$ohamxL-<1d{N=h+vsQEDq!=km(KLh5T0^%|31Wy6K$-o1-uqJN)% zAyMU59T9dbl$t>wqyv$!$ynWiR6wH_16pis|Kdp|^tao7w%hBC^bwpMSw%LcFx}7u zoiYVtjr0fxUhWqPJxUeh#>9NR#tDhTAEc0k94vu^-%SCA&YViq-x+AFn&u-JSWWZx zhu)L=UxUhkgnvcJ7UBBJoD0~ok{Fl;!*d%Qn#R=wj(SZvjhkc@?OT z?YW_s>DN&{F8n$0ryl+V!64N7Fq!t~UbYMDpkJlc+l4WJZU0qcr zg~NvES7U=YtQhTqHEnShc7IfB!mfNJck5l3qX|BQWLo@t7^aeFZ|Ioh4On%ThPRxJ zFbb3m8_J0QxZ%U8`(<&4Yva|@Y+I2xoeJNQ8Un=HTO?gNl`ONO9YbQ060Rc^G7J79@<`q!`K@_BgJoflI6#GQ?*$I za1(07^z;OW?&{n1O;q*2E=XODo5IXYq%} zd%S}9vywVmHq&K`u+oc6XX03j6?cv?pTZZftbX{PuFQtGv5%ehB6Q*ER~4jmV&&D-fadOzp?~t`9;`KqHQCj zfDu60cVu>6+Un#Ekk`jPE~PF*bi_>S;6jj_Bd8Sizm|lk19O)4T5=t5u&z+WjG*6Q zLqudm81bOGovX$z)K&J1<-(m+;it0Loc#9c z)Xj0*lI2DL67EsvM;CD0>9_VoWpDHjWgG?d%spU-vq8UJ-{obSfSnYI7RidTs{m}$ zI-u^B*NEGU^Tp3_L78|B)r%jLf(tyowj#k0knzPJr6&1d@ugx6AZO% zAw_6CXr8YGHe)8!V-f2ch^#z3WIWQt{h?jQh#)P0$bNVFb=x!vwULF8lg%nTBo3`9 z4uO~E7xCd%-(j^}l>MSgPwZVLPjT{u8~0#B^mNbN7M|mz#oKuv`r#ird;k2cNhTHC zHhqyA8BKFRf8OoF&l0!ZG|>gPymwMo4Z~%Xw{?psts4<6#!)tZMPwkK&M|?8Q-5)x zo}@%!%cu6O*+@l<{{DO<(vjm@xI5_l=#;t_eHiV7Od^J20w^+xQ(-pZh^T1MQTW(> zHoURwu-RW1;IC^q$652Hh(zIyB&)o-c*{TjO5T~6CnN+H#bgR4*T=~wCKbv)Y`&?F z6Jhf68VU+cNGeJ(O(<{$K8KwAB-A}9-^M*CziTlDX$eNkf!~o~C69a_v5)1I1EB~d z>dF>M@e})A`dB7qQ*830;OqYLl^z}Mbd}ZU*SzaQwi24H2?^{NVKU)eHOXhm@TxL) z6wh3LbH~UD@G)`>Y-!T5s$6nczh2<2FCxT@Q71F!ESLG@2TlR_NT;O|kNa!SE7ea2 zr4s)(2*$i^IKIsa@Ln04E%i7@1�!Et(I#A|m;vzi&zqX^yM&!(rCX&HMV?`QmWx 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�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

    ;zsI~H6Z+skhnz==6Okb<~ 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
    iSK*ceO52Oe)5N5d7trpz3coF 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

    _7Zp4Bo@4 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 HI6^&JS?oFE#a&7 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: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%0AMjy1 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%0DfuSu&b)T^~6PLon(r88O~ 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%0D_lJ{@hxGHe?f}m5Zg};R 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 WT+V-Z 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� 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 z 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 z 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 YI58r9eWfQ=ssI2007*qoM6N<$g1})dp8x;= literal 0 HcmV?d00001 diff --git a/idp/frontend/src/assets/styles/btn.scss b/idp/frontend/src/assets/styles/btn.scss new file mode 100644 index 0000000..fee3ee1 --- /dev/null +++ b/idp/frontend/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@use './variables.module.scss' as *; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/idp/frontend/src/assets/styles/element-ui.scss b/idp/frontend/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..0f175f2 --- /dev/null +++ b/idp/frontend/src/assets/styles/element-ui.scss @@ -0,0 +1,96 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +.el-menu--collapse + > div + > .el-submenu + > .el-submenu__title + .el-submenu__icon-arrow { + display: none; +} + +.el-dropdown .el-dropdown-link{ + color: var(--el-color-primary) !important; +} \ No newline at end of file diff --git a/idp/frontend/src/assets/styles/idp.scss b/idp/frontend/src/assets/styles/idp.scss new file mode 100644 index 0000000..3eb5e0f --- /dev/null +++ b/idp/frontend/src/assets/styles/idp.scss @@ -0,0 +1,308 @@ +/** + * 通用css样式布局处理 + * Copyright (c) 2026 idp + */ + +/** 基础通用 **/ +.pt5 { + padding-top: 5px; +} +.pr5 { + padding-right: 5px; +} +.pb5 { + padding-bottom: 5px; +} +.mt5 { + margin-top: 5px; +} +.mr5 { + margin-right: 5px; +} +.mb5 { + margin-bottom: 5px; +} +.mb8 { + margin-bottom: 8px; +} +.ml5 { + margin-left: 5px; +} +.mt10 { + margin-top: 10px; +} +.mr10 { + margin-right: 10px; +} +.mb10 { + margin-bottom: 10px; +} +.ml10 { + margin-left: 10px; +} +.mt20 { + margin-top: 20px; +} +.mr20 { + margin-right: 20px; +} +.mb20 { + margin-bottom: 20px; +} +.ml20 { + margin-left: 20px; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.el-form--inline { + .el-form-item { + .el-input, .el-cascader, .el-select, .el-autocomplete { + width: 200px; + } + } +} + +.el-form .el-form-item__label { + font-weight: 700; +} +.el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; +} + +.el-dialog.scrollbar .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; +} + +.el-table { + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9 !important; + color: #515a6e; + height: 40px !important; + font-size: 13px; + } + } + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 表单布局 **/ +.form-header { + font-size:15px; + color:#6379bb; + border-bottom:1px solid #ddd; + margin:8px 10px 25px 10px; + padding-bottom:5px +} + +/** 表格布局 **/ +.pagination-container { + display: flex; + justify-content: flex-end; + margin-top: 20px; + background-color: transparent !important; +} + +/* 弹窗中的分页器 */ +.el-dialog .pagination-container { + position: static !important; + margin: 10px 0 0 0; + padding: 0 !important; + + .el-pagination { + position: static; + } +} + +/* 移动端适配 */ +@media (max-width: 768px) { + .pagination-container { + .el-pagination { + > .el-pagination__jump { + display: none !important; + } + > .el-pagination__sizes { + display: none !important; + } + } + } +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid var(--el-border-color-light, #e5e6e7); + background: var(--el-bg-color, #FFFFFF) none; + border-radius:4px; + width: 100%; +} + +.el-table .fixed-width .el-button--small { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/* horizontal el menu */ +.el-menu--horizontal .el-menu-item .svg-icon + span, +.el-menu--horizontal .el-sub-menu__title .svg-icon + span { + margin-left: 3px; +} + +.el-menu--horizontal .el-menu--popup { + min-width: 120px !important; +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #409EFF; + margin-left: 10px; +} + +.el-table .el-dropdown, .el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px !important; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px !important; +} + +.card-box { + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; +} + +.el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: absolute; + top: 50%; + transform: translate(50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 拖拽列样式 */ +.sortable-ghost{ + opacity: .8; + color: #fff!important; + background: #42b983!important; +} + +/* 表格右侧工具栏样式 */ +.top-right-btn { + margin-left: auto; +} + +/* 分割面板样式 */ +.splitpanes.default-theme .splitpanes__pane { + background-color: var(--splitpanes-default-bg) !important; +} diff --git a/idp/frontend/src/assets/styles/index.scss b/idp/frontend/src/assets/styles/index.scss new file mode 100644 index 0000000..9913e21 --- /dev/null +++ b/idp/frontend/src/assets/styles/index.scss @@ -0,0 +1,179 @@ +//@use './mixin.scss'; +//@use './transition.scss'; +//@use './element-ui.scss'; +//@use './sidebar.scss'; +//@use './btn.scss'; +//@use './idp.scss'; + +body { + height: 100%; + margin: 0; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} diff --git a/idp/frontend/src/assets/styles/mixin.scss b/idp/frontend/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/idp/frontend/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/idp/frontend/src/assets/styles/sidebar.scss b/idp/frontend/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..5ee4ac8 --- /dev/null +++ b/idp/frontend/src/assets/styles/sidebar.scss @@ -0,0 +1,238 @@ +@use './variables.module.scss' as vars; + +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: vars.$base-sidebar-width; + position: relative; + } + + .sidebarHide { + margin-left: 0!important; + } + + .sidebar-container { + transition: width 0.28s; + width: vars.$base-sidebar-width !important; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1); + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 10px !important; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + .el-menu-item, .menu-title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + } + + .el-menu-item .el-menu-tooltip__trigger { + display: inline-block !important; + } + + // menu hover + .sub-menu-title-noDropdown, + .el-sub-menu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-sub-menu__title { + color: vars.$base-menu-color-active !important; + } + + & .nest-menu .el-sub-menu>.el-sub-menu__title, + & .el-sub-menu .el-menu-item { + min-width: vars.$base-sidebar-width !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title, + & .theme-dark .el-sub-menu .el-menu-item { + background-color: vars.$base-sub-menu-background; + + &:hover { + background-color: vars.$base-sub-menu-hover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .sub-menu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-sub-menu { + overflow: hidden; + + &>.el-sub-menu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-sub-menu { + &>.el-sub-menu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + &>i { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-sub-menu { + min-width: vars.$base-sidebar-width !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: vars.$base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-(vars.$base-sidebar-width), 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-sub-menu>.el-sub-menu__title, + .el-menu-item { + &:hover { + // you can use $sub-menuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the sub-menu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/idp/frontend/src/assets/styles/transition.scss b/idp/frontend/src/assets/styles/transition.scss new file mode 100644 index 0000000..1f74a7e --- /dev/null +++ b/idp/frontend/src/assets/styles/transition.scss @@ -0,0 +1,80 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter-from, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform--move, +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter-from { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter-from, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} + +/* 黑暗模式下过渡效果 */ +::view-transition-new(root), ::view-transition-old(root) { + animation: none !important; + backface-visibility: hidden; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.dark::view-transition-old(root) { + z-index: 2147483646; + background: var(--bg-color-dark); +} + +.dark::view-transition-new(root) { + z-index: 1; + background: var(--bg-color); +} + +::view-transition-old(root) { + z-index: 1; + background: var(--bg-color); +} + +::view-transition-new(root) { + z-index: 2147483646; + background: var(--bg-color-dark); +} diff --git a/idp/frontend/src/assets/styles/variables.module.scss b/idp/frontend/src/assets/styles/variables.module.scss new file mode 100644 index 0000000..3a833b5 --- /dev/null +++ b/idp/frontend/src/assets/styles/variables.module.scss @@ -0,0 +1,271 @@ +// base color +$blue: #324157; +$light-blue: #333c46; +$red: #C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow: #FEC171; +$panGreen: #30B08F; + +// 默认主题变量 +$menuText: #bfcbd9; +$menuActiveText: #409eff; +$menuBg: #304156; +$menuHover: #263445; + +// 浅色主题theme-light +$menuLightBg: #ffffff; +$menuLightHover: #f0f1f5; +$menuLightText: #303133; +$menuLightActiveText: #409EFF; + +// 基础变量 +$base-sidebar-width: 200px; +$sideBarWidth: 200px; + +// 菜单暗色变量 +$base-menu-color: #bfcbd9; +$base-menu-color-active: #f4f4f5; +$base-menu-background: #304156; +$base-sub-menu-background: #1f2d3d; +$base-sub-menu-hover: #001528; + +// 组件变量 +$--color-primary: #409EFF; +$--color-success: #67C23A; +$--color-warning: #E6A23C; +$--color-danger: #F56C6C; +$--color-info: #909399; + +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + menuLightBg: $menuLightBg; + menuLightHover: $menuLightHover; + menuLightText: $menuLightText; + menuLightActiveText: $menuLightActiveText; + sideBarWidth: $sideBarWidth; + // 导出基础颜色 + blue: $blue; + lightBlue: $light-blue; + red: $red; + pink: $pink; + green: $green; + tiffany: $tiffany; + yellow: $yellow; + panGreen: $panGreen; + // 导出组件颜色 + colorPrimary: $--color-primary; + colorSuccess: $--color-success; + colorWarning: $--color-warning; + colorDanger: $--color-danger; + colorInfo: $--color-info; +} + +// CSS变量定义 +:root { + /* 亮色模式变量 */ + --sidebar-bg: #{$menuBg}; + --sidebar-text: #{$menuText}; + --menu-hover: #{$menuHover}; + + --navbar-bg: #ffffff; + --navbar-text: #303133; + + /* splitpanes default-theme 变量 */ + --splitpanes-default-bg: #ffffff; + +} + +// 暗黑模式变量 +html.dark { + /* 默认通用 */ + --el-bg-color: #141414; + --el-bg-color-overlay: #1d1e1f; + --el-text-color-primary: #ffffff; + --el-text-color-regular: #d0d0d0; + --el-border-color: #434343; + --el-border-color-light: #434343; + + /* primary */ + --primary-bg: #18212b; + + /* 侧边栏 */ + --sidebar-bg: #141414; + --sidebar-text: #ffffff; + --menu-hover: #2d2d2d; + --menu-active-text: #{$menuActiveText}; + + /* 顶部导航栏 */ + --navbar-bg: #141414; + --navbar-text: #ffffff; + --navbar-hover: #141414; + + /* 标签栏 */ + --tags-bg: #141414; + --tags-item-bg: #1d1e1f; + --tags-item-border: #303030; + --tags-item-text: #d0d0d0; + --tags-item-hover: #2d2d2d; + --tags-close-hover: #64666a; + + /* splitpanes 组件暗黑模式变量 */ + --splitpanes-bg: #141414; + --splitpanes-border: #303030; + --splitpanes-splitter-bg: #1d1e1f; + --splitpanes-splitter-hover-bg: #2d2d2d; + + /* blockquote 暗黑模式变量 */ + --blockquote-bg: #1d1e1f; + --blockquote-border: #303030; + --blockquote-text: #d0d0d0; + + /* Cron 时间表达式 模式变量 */ + --cron-border: #303030; + + /* splitpanes default-theme 暗黑模式变量 */ + --splitpanes-default-bg: #141414; + + /* 侧边栏菜单覆盖 */ + .sidebar-container { + .el-menu-item:not(.is-active), .menu-title { + color: var(--el-text-color-regular); + } + & .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title, + & .theme-dark .el-sub-menu .el-menu-item { + background-color: var(--el-bg-color) !important; + } + } + + .topmenu-container { + .el-menu-item, + .el-sub-menu .el-sub-menu__title { + color: var(--el-text-color-regular) !important; + } + } + + .topbar-menu.el-menu--horizontal > .el-sub-menu .el-sub-menu__title{ + color: var(--el-text-color-regular) !important; + } + + /* 顶部栏栏菜单覆盖 */ + .el-menu--horizontal { + .el-menu-item, .el-sub-menu { + &:not(.is-disabled) { + &:hover, + &:focus { + background-color: var(--navbar-hover) !important; + .el-sub-menu__title { + background-color: var(--navbar-hover) !important; + } + } + } + } + } + + /* 分割窗格覆盖 */ + .splitpanes { + background-color: var(--splitpanes-bg); + + .splitpanes__pane { + background-color: var(--splitpanes-bg); + border-color: var(--splitpanes-border); + } + + .splitpanes__splitter { + background-color: var(--splitpanes-splitter-bg); + border-color: var(--splitpanes-border); + + &:hover { + background-color: var(--splitpanes-splitter-hover-bg); + } + + &:before, + &:after { + background-color: var(--splitpanes-border); + } + } + } + + /* 按钮样式覆盖 */ + .el-button--primary.is-plain { + background-color: var(--primary-bg); + border: 1px solid var(--el-color-primary-light-2); + color: var(--el-color-primary-light-2); + + &:hover { + background-color: var(--el-button-hover-bg-color); + border-color: var(--el-button-hover-border-color); + color: var(--el-button-hover-text-color); + } + + &.is-disabled { + background-color: var(--link-active-bg-color); + border-color: var(--el-color-primary-light-3); + color: var(--el-color-primary-light-3); + opacity: 0.5; + } + } + + /* primary tag 样式覆盖 */ + .el-tag--primary { + background-color: var(--primary-bg); + border: 1px solid var(--el-border-color-light); + color: var(--el-color-primary); + } + + /* 表格样式覆盖 */ + .el-table { + --el-table-header-bg-color: var(--el-bg-color-overlay) !important; + --el-table-header-text-color: var(--el-text-color-regular) !important; + --el-table-border-color: var(--el-border-color-light) !important; + --el-table-row-hover-bg-color: var(--el-bg-color-overlay) !important; + + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + background-color: var(--el-bg-color-overlay, #f8f8f9) !important; + color: var(--el-text-color-regular, #515a6e); + } + } + } + + /* 树组件高亮样式覆盖 */ + .el-tree { + .el-tree-node.is-current > .el-tree-node__content { + background-color: var(--el-bg-color-overlay) !important; + color: var(--el-color-primary); + } + + .el-tree-node__content:hover { + background-color: var(--el-bg-color-overlay); + } + } + + /* 下拉菜单样式覆盖 */ + .el-dropdown-menu__item:not(.is-disabled):focus, .el-dropdown-menu__item:not(.is-disabled):hover{ + background-color: var(--navbar-hover) !important; + } + + /* blockquote样式覆盖 */ + blockquote { + background-color: var(--blockquote-bg) !important; + border-left-color: var(--blockquote-border) !important; + color: var(--blockquote-text) !important; + } + + /* 时间表达式标题样式覆盖 */ + .popup-result .title { + background: var(--cron-border); + } + + /* 底部版权样式覆盖 */ + .copyright { + background-color: var(--el-bg-color) !important; + color: var(--el-text-color-regular) !important; + border-top: 1px solid var(--el-bg-color) !important; + } +} + diff --git a/idp/frontend/src/components/SvgIcon/index.ts b/idp/frontend/src/components/SvgIcon/index.ts new file mode 100644 index 0000000..eb858a7 --- /dev/null +++ b/idp/frontend/src/components/SvgIcon/index.ts @@ -0,0 +1,3 @@ +import SvgIcon from './index.vue' + +export default SvgIcon \ No newline at end of file diff --git a/idp/frontend/src/components/SvgIcon/index.vue b/idp/frontend/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..d33c25d --- /dev/null +++ b/idp/frontend/src/components/SvgIcon/index.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/idp/frontend/src/components/SvgIcon/svgicon.ts b/idp/frontend/src/components/SvgIcon/svgicon.ts new file mode 100644 index 0000000..4b1cedd --- /dev/null +++ b/idp/frontend/src/components/SvgIcon/svgicon.ts @@ -0,0 +1,13 @@ +import { App } from 'vue' +import * as components from '@element-plus/icons-vue' + +export default { + install(app: App): void { + Object.keys(components).forEach((key) => { + const componentConfig = components[key as keyof typeof components] + if (componentConfig && typeof componentConfig === 'object' && 'name' in componentConfig) { + app.component(componentConfig.name, componentConfig) + } + }) + } +} \ No newline at end of file diff --git a/idp/frontend/src/main.ts b/idp/frontend/src/main.ts new file mode 100644 index 0000000..7f6241b --- /dev/null +++ b/idp/frontend/src/main.ts @@ -0,0 +1,18 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' +import router from './router' +import 'virtual:svg-icons-register' +import SvgIcon from '@/components/SvgIcon' +import elementIcons from '@/components/SvgIcon/svgicon' +const app = createApp(App) + +app.use(createPinia()) +app.use(router) +app.use(ElementPlus) +app.use(elementIcons) +app.component('svg-icon', SvgIcon) + +app.mount('#app') \ No newline at end of file diff --git a/idp/frontend/src/router/index.ts b/idp/frontend/src/router/index.ts new file mode 100644 index 0000000..b39e490 --- /dev/null +++ b/idp/frontend/src/router/index.ts @@ -0,0 +1,87 @@ +import {createRouter, createWebHistory} from 'vue-router' +import {getToken} from "@/utils/auth.ts" +import {logout} from "@/api/login.ts"; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + redirect: '/login' + }, + { + path: '/login', + name: 'login', + component: () => import('../views/LoginPage.vue'), + meta: { + auth: false, + loginTypes: ['password', 'sms', 'dingtalk', 'wecom'] + } + }, + { + path: '/sso', + name: 'sso', + component: () => import('../views/login/Sso.vue'), + meta: { auth: false } + } + ] +}) +const parseURL = ( + url: string | null | undefined +): { basePath: string; paramsObject: { [key: string]: string } } => { + // 如果输入为 null 或 undefined,返回空字符串和空对象 + if (url == null) { + return { basePath: '', paramsObject: {} } + } + + // 找到问号 (?) 的位置,它之前是基础路径,之后是查询参数 + const questionMarkIndex = url.indexOf('?') + let basePath = url + const paramsObject: { [key: string]: string } = {} + + // 如果找到了问号,说明有查询参数 + if (questionMarkIndex !== -1) { + // 获取 basePath + basePath = url.substring(0, questionMarkIndex) + + // 从 URL 中获取查询字符串部分 + const queryString = url.substring(questionMarkIndex + 1) + + // 使用 URLSearchParams 遍历参数 + const searchParams = new URLSearchParams(queryString) + searchParams.forEach((value, key) => { + // 封装进 paramsObject 对象 + paramsObject[key] = value + }) + } + + // 返回 basePath 和 paramsObject + return { basePath, paramsObject } +} +router.beforeEach((to, from, next) => { + if(to.path === '/logout'){ + logout().finally(window.location.href = to.query.redirect || import.meta.env.VITE_APP_DEFAULT_PAGE) + } + + if (getToken()) { + if (to.path === '/sso') { + const redirectPath = from.query.redirect || to.path + // 修复跳转时不带参数的问题 + const redirect = decodeURIComponent(redirectPath as string) + const { paramsObject: query } = parseURL(redirect) + const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect, query } + console.log(nextData) + next() + } else { + next() + } + } else { + if (to.path === '/sso') { + next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页 + } else { + next() + } + } +}) + +export default router \ No newline at end of file diff --git a/idp/frontend/src/settings.ts b/idp/frontend/src/settings.ts new file mode 100644 index 0000000..62d0220 --- /dev/null +++ b/idp/frontend/src/settings.ts @@ -0,0 +1,57 @@ +export default { + /** + * 网页标题 + */ + title: import.meta.env.VITE_APP_TITLE, + + /** + * 侧边栏主题 深色主题theme-dark,浅色主题theme-light + */ + sideTheme: 'theme-dark', + + /** + * 是否系统布局配置 + */ + showSettings: true, + + /** + * 菜单导航模式 1、纯左侧 2、混合(左侧+顶部) 3、纯顶部 + */ + navType: 1, + + /** + * 是否显示 tagsView + */ + tagsView: true, + + /** + * 显示页签图标 + */ + tagsIcon: false, + + /** + * 是否固定头部 + */ + fixedHeader: true, + + /** + * 是否显示logo + */ + sidebarLogo: true, + + /** + * 是否显示动态标题 + */ + dynamicTitle: false, + + /** + * 是否显示底部版权 + */ + footerVisible: false, + + /** + * 底部版权文本内容 + */ + footerContent: 'Copyright © 2026-2032 Lingniu. All Rights Reserved.' +} + diff --git a/idp/frontend/src/stores/auth.ts b/idp/frontend/src/stores/auth.ts new file mode 100644 index 0000000..93caa11 --- /dev/null +++ b/idp/frontend/src/stores/auth.ts @@ -0,0 +1,264 @@ +import { defineStore } from 'pinia' +import type { UserInfo, TokenResponse, LoginRecord, ClientInfo } from '@/types' + +export const useAuthStore = defineStore('auth', { + state: (): { + user: UserInfo | null; + token: TokenResponse | null; + loginHistory: LoginRecord[]; + clientInfo: ClientInfo | null; + isRefreshing: boolean; + refreshTimeout: number | null; + } => ({ + user: null, + token: null, + loginHistory: [], + clientInfo: null, + isRefreshing: false, + refreshTimeout: null + }), + + getters: { + isAuthenticated: (state) => !!state.token?.access_token, + getUsername: (state) => state.user?.username || '', + getNickname: (state) => state.user?.nickname || '', + getAvatar: (state) => state.user?.avatar || '', + getAccessToken: (state) => state.token?.access_token || '', + getRefreshToken: (state) => state.token?.refresh_token || '', + isTokenExpired: (state) => { + if (!state.token?.expires_in) return true; + const expireTime = localStorage.getItem('token_expire_time'); + if (!expireTime) return true; + return Date.now() > parseInt(expireTime); + } + }, + + actions: { + // Set user information + setUser(user: UserInfo) { + this.user = user; + localStorage.setItem('user_info', JSON.stringify(user)); + }, + + // Set token information + setToken(token: TokenResponse) { + this.token = token; + // Calculate and store expire time + const expireTime = Date.now() + (token.expires_in * 1000); + localStorage.setItem('auth_token', JSON.stringify(token)); + localStorage.setItem('token_expire_time', expireTime.toString()); + localStorage.setItem('refresh_token', token.refresh_token); + + // Set up automatic refresh before token expires + this.setupTokenRefresh(); + }, + + // Set client information + setClientInfo(clientInfo: ClientInfo) { + this.clientInfo = clientInfo; + }, + + // Add login record + addLoginRecord(record: LoginRecord) { + this.loginHistory.unshift(record); + // Keep only the last 10 records + if (this.loginHistory.length > 10) { + this.loginHistory.pop(); + } + }, + + // Clear all auth information (logout) + logout() { + this.user = null; + this.token = null; + this.clientInfo = null; + // Clear from localStorage + localStorage.removeItem('auth_token'); + localStorage.removeItem('user_info'); + localStorage.removeItem('token_expire_time'); + localStorage.removeItem('refresh_token'); + // Clear refresh timeout + this.clearTokenRefresh(); + }, + + // Load auth information from localStorage + loadFromStorage() { + const token = localStorage.getItem('auth_token'); + const user = localStorage.getItem('user_info'); + + if (token) { + this.token = JSON.parse(token); + // Set up automatic refresh if token is valid + this.setupTokenRefresh(); + } + + if (user) { + this.user = JSON.parse(user); + } + }, + + // Refresh token + async refreshToken() { + if (this.isRefreshing || !this.getRefreshToken) return; + + try { + this.isRefreshing = true; + + const response = await fetch('http://localhost:8080/oauth2/token', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': `Basic ${btoa('system-client:secret')}` + }, + body: new URLSearchParams({ + grant_type: 'refresh_token', + refresh_token: this.getRefreshToken + }) + }); + + if (!response.ok) { + throw new Error('Failed to refresh token'); + } + + const newToken = await response.json(); + this.setToken(newToken); + + return newToken; + } catch (error) { + console.error('Token refresh failed:', error); + this.logout(); + throw error; + } finally { + this.isRefreshing = false; + } + }, + + // Setup automatic token refresh + setupTokenRefresh() { + // Clear existing timeout + this.clearTokenRefresh(); + + if (!this.token?.expires_in) return; + + const expireTime = localStorage.getItem('token_expire_time'); + if (!expireTime) return; + + // Refresh token 30 seconds before expiration + const refreshTime = parseInt(expireTime) - 30000; + const delay = refreshTime - Date.now(); + + if (delay > 0) { + this.refreshTimeout = window.setTimeout(() => { + this.refreshToken(); + }, delay); + } + }, + + // Clear token refresh timeout + clearTokenRefresh() { + if (this.refreshTimeout) { + clearTimeout(this.refreshTimeout); + this.refreshTimeout = null; + } + }, + + // Get user info from UserInfo endpoint + async fetchUserInfo() { + try { + const response = await fetch('http://localhost:8080/userinfo', { + headers: { + 'Authorization': `Bearer ${this.getAccessToken}` + } + }); + + if (!response.ok) { + throw new Error('Failed to fetch user info'); + } + + const userInfo = await response.json(); + this.setUser(userInfo); + return userInfo; + } catch (error) { + console.error('Failed to fetch user info:', error); + // Try to refresh token and retry + try { + await this.refreshToken(); + const response = await fetch('http://localhost:8080/userinfo', { + headers: { + 'Authorization': `Bearer ${this.getAccessToken}` + } + }); + + if (response.ok) { + const userInfo = await response.json(); + this.setUser(userInfo); + return userInfo; + } + } catch (refreshError) { + console.error('Retry failed after token refresh:', refreshError); + } + throw error; + } + }, + + // Login with username and password + async loginWithPassword(username: string, password: string) { + try { + const response = await fetch('http://localhost:8080/oauth2/token', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': `Basic ${btoa('system-client:secret')}` + }, + body: new URLSearchParams({ + grant_type: 'password', + username, + password, + scope: 'openid profile read write' + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error_description || 'Login failed'); + } + + const tokenData = await response.json(); + this.setToken(tokenData); + await this.fetchUserInfo(); + + return tokenData; + } catch (error) { + console.error('Password login failed:', error); + throw error; + } + }, + + // Login with SMS code + async loginWithSms(phone: string, code: string) { + try { + const response = await fetch('http://localhost:8080/api/sms/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ phone, code }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.message || 'SMS login failed'); + } + + const data = await response.json(); + this.setToken(data.data); + await this.fetchUserInfo(); + + return data.data; + } catch (error) { + console.error('SMS login failed:', error); + throw error; + } + } + } +}) \ No newline at end of file diff --git a/idp/frontend/src/stores/index.ts b/idp/frontend/src/stores/index.ts new file mode 100644 index 0000000..f55eb90 --- /dev/null +++ b/idp/frontend/src/stores/index.ts @@ -0,0 +1,5 @@ +import { createPinia } from 'pinia' + +const store = createPinia() + +export default store \ No newline at end of file diff --git a/idp/frontend/src/stores/user.ts b/idp/frontend/src/stores/user.ts new file mode 100644 index 0000000..d7f897b --- /dev/null +++ b/idp/frontend/src/stores/user.ts @@ -0,0 +1,108 @@ +import router from '@/router' +import { ElMessageBox } from 'element-plus' +import { login, logout, getInfo } from '@/api/login' +import { getToken, removeToken } from '@/utils/auth' +import { isHttp, isEmpty } from "@/utils/validate" +import { defineStore } from 'pinia' +import type { GetInfoResponse } from '@/api/login' + +interface LoginUserInfo { + username: string + password: string + code?: string + uuid?: string +} + +interface UserState { + token: string | null | undefined + id: string | number | null + name: string + nickName: string + avatar: string + roles: string[] + permissions: string[] +} + +const useUserStore = defineStore( + 'user', + { + state: (): UserState => ({ + token: getToken(), + id: '', + name: '', + nickName: '', + avatar: '', + roles: [], + permissions: [] + }), + actions: { + // 登录 + login(userInfo: LoginUserInfo): Promise { + const username = userInfo.username.trim() + const password = userInfo.password + const code = userInfo.code + const uuid = userInfo.uuid + return new Promise((resolve, reject) => { + login(username, password, code, uuid).then(() => { + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + // 获取用户信息 + getInfo(): Promise { + return new Promise((resolve, reject) => { + getInfo().then((response) => { + const res = response.data + const user = res.user + let avatar = user.avatar || "" + if (!isHttp(avatar)) { + avatar = (isEmpty(avatar)) ? '' : import.meta.env.VITE_APP_BASE_API + avatar + } + if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 + this.roles = res.roles + this.permissions = res.permissions || [] + } else { + this.roles = ['ROLE_DEFAULT'] + } + this.id = user.userId + this.name = user.userName + this.nickName = user.nickName + this.avatar = avatar + /* 初始密码提示 */ + if(res.isDefaultModifyPwd) { + ElMessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { + router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) + }).catch(() => {}) + } + /* 过期密码提示 */ + if(!res.isDefaultModifyPwd && res.isPasswordExpired) { + ElMessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { + router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) + }).catch(() => {}) + } + resolve(res) + }).catch(error => { + reject(error) + }) + }) + }, + // 退出系统 + logOut(): Promise { + return new Promise((resolve, reject) => { + logout().then(() => { + this.token = '' + this.roles = [] + this.permissions = [] + removeToken() + resolve() + }).catch(error => { + reject(error) + }) + }) + } + } + }) + +export default useUserStore \ No newline at end of file diff --git a/idp/frontend/src/types/crypto-js.d.ts b/idp/frontend/src/types/crypto-js.d.ts new file mode 100644 index 0000000..03a39ff --- /dev/null +++ b/idp/frontend/src/types/crypto-js.d.ts @@ -0,0 +1,36 @@ +declare module 'crypto-js' { + export const AES: { + encrypt: (data: string, key: string | CryptoJS.lib.WordArray, cfg?: any) => CryptoJS.lib.CipherParams; + decrypt: (encryptedData: string | CryptoJS.lib.CipherParams, key: string | CryptoJS.lib.WordArray, cfg?: any) => CryptoJS.lib.WordArray; + }; + + export const enc: { + Utf8: { + parse: (str: string) => CryptoJS.lib.WordArray; + stringify: (wordArray: CryptoJS.lib.WordArray) => string; + }; + Base64: { + parse: (str: string) => CryptoJS.lib.WordArray; + stringify: (wordArray: CryptoJS.lib.WordArray) => string; + }; + }; + + export const lib: { + WordArray: any; + CipherParams: any; + }; + + export const mode: { + CBC: any; + ECB: any; + }; + + export const pad: { + Pkcs7: any; + ZeroPadding: any; + }; + + export function HmacSHA256(message: string | CryptoJS.lib.WordArray, key: string | CryptoJS.lib.WordArray): CryptoJS.lib.WordArray; + export function SHA256(message: string | CryptoJS.lib.WordArray): CryptoJS.lib.WordArray; + export function MD5(message: string | CryptoJS.lib.WordArray): CryptoJS.lib.WordArray; +} \ No newline at end of file diff --git a/idp/frontend/src/types/index.ts b/idp/frontend/src/types/index.ts new file mode 100644 index 0000000..4effd44 --- /dev/null +++ b/idp/frontend/src/types/index.ts @@ -0,0 +1,55 @@ +// User information interface +export interface UserInfo { + id: number; + uuid: string; + username: string; + nickname: string; + real_name: string; + avatar: string; + email: string; + phone: string; + gender: number; + birthday: string; + source: string; + status: number; +} + +// Token response interface +export interface TokenResponse { + access_token: string; + refresh_token: string; + token_type: string; + expires_in: number; + scope: string; +} + +// Login record interface +export interface LoginRecord { + id: number; + auth_type: string; + username: string; + ip_address: string; + login_time: string; + success: boolean; + fail_reason: string; +} + +// Client information interface +export interface ClientInfo { + client_id: string; + client_name: string; + client_type: string; + redirect_uris: string[]; +} + +// Login form data interface +export interface LoginFormData { + username: string; + password: string; +} + +// SMS login form data interface +export interface SmsLoginFormData { + phone: string; + code: string; +} \ No newline at end of file diff --git a/idp/frontend/src/utils/auth.ts b/idp/frontend/src/utils/auth.ts new file mode 100644 index 0000000..252c885 --- /dev/null +++ b/idp/frontend/src/utils/auth.ts @@ -0,0 +1,15 @@ +import {Storage} from "@/utils/storage.ts"; + +const TokenKey = 'Idp-Token' +const store = new Storage() +export function getToken(): any { + return store.get(TokenKey) +} + +export function setToken(token: string): void { + store.set(TokenKey, token) +} + +export function removeToken(): void { + store.remove(TokenKey) +} \ No newline at end of file diff --git a/idp/frontend/src/utils/cache.ts b/idp/frontend/src/utils/cache.ts new file mode 100644 index 0000000..467b9bf --- /dev/null +++ b/idp/frontend/src/utils/cache.ts @@ -0,0 +1,93 @@ +interface CacheMethods { + set(key: string, value: string): void + get(key: string): string | null + setJSON(key: string, jsonValue: any): void + getJSON(key: string): any + remove(key: string): void +} + +interface CacheExport { + session: CacheMethods + local: CacheMethods +} + +const sessionCache: CacheMethods = { + set(key: string, value: string): void { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get(key: string): string | null { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON(key: string, jsonValue: any): void { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON(key: string): any { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + return null + }, + remove(key: string): void { + sessionStorage.removeItem(key) + } +} + +const localCache: CacheMethods = { + set(key: string, value: string): void { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get(key: string): string | null { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON(key: string, jsonValue: any): void { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON(key: string): any { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + return null + }, + remove(key: string): void { + localStorage.removeItem(key) + } +} + +export default { + /** + * 会话级缓存 + */ + session: sessionCache, + /** + * 本地缓存 + */ + local: localCache +} as CacheExport \ No newline at end of file diff --git a/idp/frontend/src/utils/encryptor.ts b/idp/frontend/src/utils/encryptor.ts new file mode 100644 index 0000000..e53ce2f --- /dev/null +++ b/idp/frontend/src/utils/encryptor.ts @@ -0,0 +1,69 @@ +import CryptoJS from 'crypto-js'; + +// AES encryption key and IV should be loaded from environment variables in production +const AES_KEY = import.meta.env.VITE_AES_KEY || 'default-aes-key-1234567890123456'; +const AES_IV = import.meta.env.VITE_AES_IV || 'default-aes-iv-123456'; + +class SensitiveDataEncryptor { + /** + * Encrypt phone number using AES encryption + * @param phone Phone number to encrypt + * @returns Encrypted phone number + */ + encryptPhone(phone: string): string { + try { + const key = CryptoJS.enc.Utf8.parse(AES_KEY); + const iv = CryptoJS.enc.Utf8.parse(AES_IV); + const encrypted = CryptoJS.AES.encrypt(phone, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return encrypted.toString(); + } catch (error) { + console.error('Failed to encrypt phone:', error); + throw new Error('Phone encryption failed'); + } + } + + /** + * Decrypt phone number using AES encryption + * @param encryptedPhone Encrypted phone number + * @returns Decrypted phone number + */ + decryptPhone(encryptedPhone: string): string { + try { + const key = CryptoJS.enc.Utf8.parse(AES_KEY); + const iv = CryptoJS.enc.Utf8.parse(AES_IV); + const decrypted = CryptoJS.AES.decrypt(encryptedPhone, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return decrypted.toString(CryptoJS.enc.Utf8); + } catch (error) { + console.error('Failed to decrypt phone:', error); + throw new Error('Phone decryption failed'); + } + } + + /** + * Encrypt general sensitive data + * @param data Data to encrypt + * @returns Encrypted data + */ + encryptData(data: string): string { + return this.encryptPhone(data); + } + + /** + * Decrypt general sensitive data + * @param encryptedData Encrypted data + * @returns Decrypted data + */ + decryptData(encryptedData: string): string { + return this.decryptPhone(encryptedData); + } +} + +export default new SensitiveDataEncryptor(); \ No newline at end of file diff --git a/idp/frontend/src/utils/errorCode.ts b/idp/frontend/src/utils/errorCode.ts new file mode 100644 index 0000000..4ed6286 --- /dev/null +++ b/idp/frontend/src/utils/errorCode.ts @@ -0,0 +1,20 @@ +export interface ErrorCode { + '401': string + '403': string + '404': string + '500': string + '601': string + 'default': string + [key: string]: string +} + +const errorCode: ErrorCode = { + '401': '认证失败,无法访问系统资源', + '403': '当前操作没有权限', + '404': '访问资源不存在', + '500': '服务器内部错误', + '601': '系统异常', + 'default': '系统未知错误,请反馈给管理员' +} + +export default errorCode diff --git a/idp/frontend/src/utils/jsencrypt.ts b/idp/frontend/src/utils/jsencrypt.ts new file mode 100644 index 0000000..d774c1d --- /dev/null +++ b/idp/frontend/src/utils/jsencrypt.ts @@ -0,0 +1,27 @@ +import JSEncrypt from 'jsencrypt' + +const publicKey: string = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' + +const privateKey: string = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + + 'UP8iWi1Qw0Y=' + +// 加密 +export function encrypt(txt: string): string | false { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(txt) // 对数据进行加密 +} + +// 解密 +export function decrypt(txt: string): string | false { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 设置私钥 + return encryptor.decrypt(txt) // 对数据进行解密 +} \ No newline at end of file diff --git a/idp/frontend/src/utils/request.ts b/idp/frontend/src/utils/request.ts new file mode 100644 index 0000000..67788ec --- /dev/null +++ b/idp/frontend/src/utils/request.ts @@ -0,0 +1,179 @@ +import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from 'axios' +import { ElNotification, ElMessageBox, ElMessage } from 'element-plus' +import {getToken, setToken} from '@/utils/auth' +import errorCode, { type ErrorCode } from '@/utils/errorCode' +import cache from '@/utils/cache' +import useUserStore from '@/stores/user' + +// 定义接口类型 +interface CustomRequestConfig { + isToken?: boolean + repeatSubmit?: boolean + interval?: number + [key: string]: any +} + +type RequestConfig = InternalAxiosRequestConfig & { + headers?: InternalAxiosRequestConfig['headers'] & CustomRequestConfig +} + +interface SessionObject { + url: string + data: string + time: number +} + +interface ReloginStatus { + show: boolean +} + + +// 是否显示重新登录 +export let isRelogin: ReloginStatus = { show: false } + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service: AxiosInstance = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: import.meta.env.VITE_APP_BASE_API, + // 超时 + timeout: 10000 +}) + +// request拦截器 +service.interceptors.request.use( + (config: RequestConfig): RequestConfig => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === true + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + // 间隔时间(ms),小于此时间视为重复提交 + const interval = (config.headers || {}).interval || 1000 + if (getToken() && !isToken) { + config.headers = config.headers || {} + config.headers['Idp'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params) + url = url.slice(0, -1) + config.params = {} + config.url = url + } + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj: SessionObject = { + url: config.url || '', + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data || '', + time: new Date().getTime() + } + const requestSize = Object.keys(JSON.stringify(requestObj)).length // 请求数据大小 + const limitSize = 5 * 1024 * 1024 // 限制存放数据5M + if (requestSize >= limitSize) { + console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。') + return config + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url // 请求地址 + const s_data = sessionObj.data // 请求数据 + const s_time = sessionObj.time // 请求时间 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '数据正在处理,请勿重复提交' + console.warn(`[${s_url}]: ` + message) + throw new Error(message); + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config + }, + (error: AxiosError): Promise => { + console.log(error) + return Promise.reject(error) + } +) + +// 响应拦截器 +service.interceptors.response.use( + (res: AxiosResponse): any => { + if(res.headers['idp']){ + setToken(res.headers['idp']) + } + // 未设置状态码则默认成功状态 + const code = res.data.code || 200 + const isInIframe = window.self !== window.top; + // 获取错误信息 + const msg:string = errorCode[code as keyof ErrorCode] || res.data.msg || errorCode['default'] + if (code === 401) { + if (!isRelogin.show && isInIframe) { + isRelogin.show = true + ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + isRelogin.show = false + useUserStore().logOut().then(() => { + location.href = '/index' + }) + }).catch(() => { + isRelogin.show = false + }) + } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + ElMessage({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === 601) { + ElMessage({ message: msg, type: 'warning' }) + return Promise.reject(new Error(msg)) + } else if (code !== 200) { + ElNotification.error({ title: msg }) + return Promise.reject('error') + } else { + return Promise.resolve(res.data) + } + }, + (error: AxiosError): Promise => { + console.log('err' + error) + let { message } = error + if (message === "Network Error") { + message = "后端接口连接异常" + } else if (message.includes("timeout")) { + message = "系统接口请求超时" + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.slice(-3) + "异常" + } + ElMessage({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + } +) +/** + * 参数处理 + * @param params 参数 + */ +export function tansParams(params: any): string { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName] + var part = encodeURIComponent(propName) + "=" + if (value !== null && value !== "" && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']' + var subPart = encodeURIComponent(params) + "=" + result += subPart + encodeURIComponent(value[key]) + "&" + } + } + } else { + result += part + encodeURIComponent(value) + "&" + } + } + } + return result +} +export default service \ No newline at end of file diff --git a/idp/frontend/src/utils/storage.ts b/idp/frontend/src/utils/storage.ts new file mode 100644 index 0000000..083eda0 --- /dev/null +++ b/idp/frontend/src/utils/storage.ts @@ -0,0 +1,358 @@ +/** + * 存储工具类 + * 支持localStorage、sessionStorage和cookie三种存储方式 + */ + +type StorageType = 'localStorage' | 'sessionStorage' | 'cookie'; + +/** + * 存储工具类 + */ +export class Storage { + private storageType: StorageType; + private prefix: string; + + /** + * 构造函数 + * @param storageType 存储类型 + * @param prefix 存储前缀,默认'unified_login_' + */ + constructor(storageType: StorageType = 'localStorage', prefix: string = 'unified_login_') { + this.storageType = storageType; + this.prefix = prefix; + } + + /** + * 设置存储项 + * @param key 存储键 + * @param value 存储值 + * @param options 可选参数,cookie存储时使用 + */ + set(key: string, value: any, options?: { expires?: number; path?: string; domain?: string; secure?: boolean }): void { + const fullKey = this.prefix + key; + const stringValue = typeof value === 'string' ? value : JSON.stringify(value); + + switch (this.storageType) { + case 'localStorage': + this.setLocalStorage(fullKey, stringValue); + break; + case 'sessionStorage': + this.setSessionStorage(fullKey, stringValue); + break; + case 'cookie': + this.setCookie(fullKey, stringValue, options); + break; + } + } + + /** + * 获取存储项 + * @param key 存储键 + * @returns 存储值 + */ + get(key: string): any { + const fullKey = this.prefix + key; + let value: any; + + switch (this.storageType) { + case 'localStorage': + value = this.getLocalStorage(fullKey); + break; + case 'sessionStorage': + value = this.getSessionStorage(fullKey); + break; + case 'cookie': + value = this.getCookie(fullKey); + break; + default: + value = null; + } + + if (value === null) { + return null; + } + + // 尝试解析JSON + try { + return JSON.parse(value); + } catch (e) { + // 如果不是JSON,直接返回字符串 + return value; + } + } + + /** + * 移除存储项 + * @param key 存储键 + */ + remove(key: string): void { + const fullKey = this.prefix + key; + + switch (this.storageType) { + case 'localStorage': + this.removeLocalStorage(fullKey); + break; + case 'sessionStorage': + this.removeSessionStorage(fullKey); + break; + case 'cookie': + this.removeCookie(fullKey); + break; + } + } + + /** + * 清空所有存储项 + */ + clear(): void { + switch (this.storageType) { + case 'localStorage': + this.clearLocalStorage(); + break; + case 'sessionStorage': + this.clearSessionStorage(); + break; + case 'cookie': + this.clearCookie(); + break; + } + } + + /** + * 检查存储类型是否可用 + * @returns boolean 是否可用 + */ + isAvailable(): boolean { + try { + switch (this.storageType) { + case 'localStorage': + return this.isLocalStorageAvailable(); + case 'sessionStorage': + return this.isSessionStorageAvailable(); + case 'cookie': + return typeof document !== 'undefined'; + default: + return false; + } + } catch (e) { + return false; + } + } + + // ------------------------ localStorage 操作 ------------------------ + + /** + * 设置localStorage + */ + private setLocalStorage(key: string, value: string): void { + if (this.isLocalStorageAvailable()) { + localStorage.setItem(key, value); + } + } + + /** + * 获取localStorage + */ + private getLocalStorage(key: string): string | null { + if (this.isLocalStorageAvailable()) { + return localStorage.getItem(key); + } + return null; + } + + /** + * 移除localStorage + */ + private removeLocalStorage(key: string): void { + if (this.isLocalStorageAvailable()) { + localStorage.removeItem(key); + } + } + + /** + * 清空localStorage中所有带前缀的项 + */ + private clearLocalStorage(): void { + if (this.isLocalStorageAvailable()) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(this.prefix)) { + localStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + + /** + * 检查localStorage是否可用 + */ + private isLocalStorageAvailable(): boolean { + if (typeof localStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + localStorage.setItem(testKey, testKey); + localStorage.removeItem(testKey); + return true; + } catch (e) { + return false; + } + } + + // ------------------------ sessionStorage 操作 ------------------------ + + /** + * 设置sessionStorage + */ + private setSessionStorage(key: string, value: string): void { + if (this.isSessionStorageAvailable()) { + sessionStorage.setItem(key, value); + } + } + + /** + * 获取sessionStorage + */ + private getSessionStorage(key: string): string | null { + if (this.isSessionStorageAvailable()) { + return sessionStorage.getItem(key); + } + return null; + } + + /** + * 移除sessionStorage + */ + private removeSessionStorage(key: string): void { + if (this.isSessionStorageAvailable()) { + sessionStorage.removeItem(key); + } + } + + /** + * 清空sessionStorage中所有带前缀的项 + */ + private clearSessionStorage(): void { + if (this.isSessionStorageAvailable()) { + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i); + if (key && key.startsWith(this.prefix)) { + sessionStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + + /** + * 检查sessionStorage是否可用 + */ + private isSessionStorageAvailable(): boolean { + if (typeof sessionStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + sessionStorage.setItem(testKey, testKey); + sessionStorage.removeItem(testKey); + return true; + } catch (e) { + return false; + } + } + + // ------------------------ cookie 操作 ------------------------ + + /** + * 设置cookie + */ + private setCookie( + key: string, + value: string, + options?: { expires?: number; path?: string; domain?: string; secure?: boolean } + ): void { + if (typeof document === 'undefined') { + return; + } + + let cookieString = `${key}=${encodeURIComponent(value)}`; + + if (options) { + // 设置过期时间(秒) + if (options.expires) { + const date = new Date(); + date.setTime(date.getTime() + options.expires * 1000); + cookieString += `; expires=${date.toUTCString()}`; + } + + // 设置路径 + if (options.path) { + cookieString += `; path=${options.path}`; + } + + // 设置域名 + if (options.domain) { + cookieString += `; domain=${options.domain}`; + } + + // 设置secure + if (options.secure) { + cookieString += '; secure'; + } + } + + document.cookie = cookieString; + } + + /** + * 获取cookie + */ + private getCookie(key: string): string | null { + if (typeof document === 'undefined') { + return null; + } + + const name = `${key}=`; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + + return null; + } + + /** + * 移除cookie + */ + private removeCookie(key: string): void { + this.setCookie(key, '', { expires: -1 }); + } + + /** + * 清空所有带前缀的cookie + */ + private clearCookie(): void { + if (typeof document === 'undefined') { + return; + } + + const cookies = document.cookie.split(';'); + for (const cookie of cookies) { + const eqPos = cookie.indexOf('='); + const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); + if (key.startsWith(this.prefix)) { + this.removeCookie(key); + } + } + } +} diff --git a/idp/frontend/src/utils/validate.ts b/idp/frontend/src/utils/validate.ts new file mode 100644 index 0000000..4910390 --- /dev/null +++ b/idp/frontend/src/utils/validate.ts @@ -0,0 +1,114 @@ +/** + * 路径匹配器 + * @param pattern + * @param path + * @returns {Boolean} + */ +export function isPathMatch(pattern: string, path: string): boolean { + const regexPattern = pattern.replace(/\//g, '\\/').replace(/\*\*/g, '.*').replace(/\*/g, '[^\\/]*') + const regex = new RegExp(`^${regexPattern}$`) + return regex.test(path) +} + +/** + * 判断value字符串是否为空 + * @param value + * @returns {Boolean} + */ +export function isEmpty(value: string | null | undefined): boolean { + if (value == null || value === "" || value === undefined || value === "undefined") { + return true + } + return false +} + +/** + * 判断url是否是http或https + * @param url + * @returns {Boolean} + */ +export function isHttp(url: string): boolean { + return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1 +} + +/** + * 判断path是否为外链 + * @param path + * @returns {Boolean} + */ +export function isExternal(path: string): boolean { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param str + * @returns {Boolean} + */ +export function validUsername(str: string): boolean { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} + +/** + * @param url + * @returns {Boolean} + */ +export function validURL(url: string): boolean { + const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @param str + * @returns {Boolean} + */ +export function validLowerCase(str: string): boolean { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @param str + * @returns {Boolean} + */ +export function validUpperCase(str: string): boolean { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @param str + * @returns {Boolean} + */ +export function validAlphabets(str: string): boolean { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + +/** + * @param email + * @returns {Boolean} + */ +export function validEmail(email: string): boolean { + const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + return reg.test(email) +} + +/** + * @param str + * @returns {Boolean} + */ +export function isString(str: any): str is string { + return typeof str === 'string' || str instanceof String +} + +/** + * @param arg + * @returns {Boolean} + */ +export function isArray(arg: any): arg is any[] { + if (typeof Array.isArray === 'undefined') { + return Object.prototype.toString.call(arg) === '[object Array]' + } + return Array.isArray(arg) +} \ No newline at end of file diff --git a/idp/frontend/src/views/LoginPage.vue b/idp/frontend/src/views/LoginPage.vue new file mode 100644 index 0000000..ce967a8 --- /dev/null +++ b/idp/frontend/src/views/LoginPage.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/idp/frontend/src/views/login/PasswordLogin.vue b/idp/frontend/src/views/login/PasswordLogin.vue new file mode 100644 index 0000000..51af161 --- /dev/null +++ b/idp/frontend/src/views/login/PasswordLogin.vue @@ -0,0 +1,126 @@ + + + + + \ No newline at end of file diff --git a/idp/frontend/src/views/login/SmsLogin.vue b/idp/frontend/src/views/login/SmsLogin.vue new file mode 100644 index 0000000..bbd5226 --- /dev/null +++ b/idp/frontend/src/views/login/SmsLogin.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/idp/frontend/src/views/login/Sso.vue b/idp/frontend/src/views/login/Sso.vue new file mode 100644 index 0000000..7be72d6 --- /dev/null +++ b/idp/frontend/src/views/login/Sso.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/idp/frontend/src/views/login/ThirdPartyLogin.vue b/idp/frontend/src/views/login/ThirdPartyLogin.vue new file mode 100644 index 0000000..d11e718 --- /dev/null +++ b/idp/frontend/src/views/login/ThirdPartyLogin.vue @@ -0,0 +1,193 @@ + + + + + \ No newline at end of file diff --git a/idp/frontend/src/vite-env.d.ts b/idp/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..4cc6b76 --- /dev/null +++ b/idp/frontend/src/vite-env.d.ts @@ -0,0 +1,18 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +interface ImportMetaEnv { + readonly VITE_APP_TITLE: string + readonly VITE_AES_KEY: string + readonly VITE_AES_IV: string + // 更多环境变量... +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} \ No newline at end of file diff --git a/idp/frontend/tsconfig.json b/idp/frontend/tsconfig.json new file mode 100644 index 0000000..7b0b4db --- /dev/null +++ b/idp/frontend/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Path mapping */ + "baseUrl": ".", + "paths": { + "@/*": ["src/*"], + "~/*": ["./*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue","vite/**/*.ts"], + "references": [{ "path": "./tsconfig.node.json" }] +} \ No newline at end of file diff --git a/idp/frontend/tsconfig.node.json b/idp/frontend/tsconfig.node.json new file mode 100644 index 0000000..7178009 --- /dev/null +++ b/idp/frontend/tsconfig.node.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"], + "~/*": ["./*"] + } + }, + "include": ["vite.config.ts", "vite/**/*.ts"] +} \ No newline at end of file diff --git a/idp/frontend/vite-env.d.ts b/idp/frontend/vite-env.d.ts new file mode 100644 index 0000000..3947d68 --- /dev/null +++ b/idp/frontend/vite-env.d.ts @@ -0,0 +1,27 @@ +/// + +interface ImportMetaEnv { + readonly VITE_APP_TITLE: string + // 更多环境变量... +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +// 路径别名类型声明 +declare module '~/*' { + const content: any + export default content +} + +declare module '@/*' { + const content: any + export default content +} diff --git a/idp/frontend/vite.config.ts b/idp/frontend/vite.config.ts new file mode 100644 index 0000000..e8a84e8 --- /dev/null +++ b/idp/frontend/vite.config.ts @@ -0,0 +1,79 @@ +import { defineConfig, loadEnv } from 'vite' +import { resolve } from 'path' +import { fileURLToPath, URL } from 'node:url' +import createVitePlugins from './vite/plugins' + +const baseUrl = 'http://localhost:8000' // 后端接口 + +// https://vitejs.dev/config/ +export default defineConfig(({ mode, command }) => { + const env = loadEnv(mode, process.cwd()) + const { VITE_APP_ENV } = env + return { + // 部署生产环境和开发环境下的URL。 + // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 + base: VITE_APP_ENV === 'production' ? '/' : '/', + plugins: createVitePlugins(env, command === 'build'), + resolve: { + // https://cn.vitejs.dev/config/#resolve-alias + alias: { + // 设置路径 + '~': fileURLToPath(new URL('.', import.meta.url)), + // 设置别名 + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + // https://cn.vitejs.dev/config/#resolve-extensions + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] + }, + // 打包配置 + build: { + // https://vite.dev/config/build-options.html + sourcemap: command === 'build' ? false : 'inline', + outDir: 'dist', + assetsDir: 'assets', + chunkSizeWarningLimit: 2000, + rollupOptions: { + output: { + chunkFileNames: 'static/js/[name]-[hash].js', + entryFileNames: 'static/js/[name]-[hash].js', + assetFileNames: 'static/[ext]/[name]-[hash].[ext]' + } + } + }, + // vite 相关配置 + server: { + port: 80, + host: true, + open: true, + proxy: { + // https://cn.vitejs.dev/config/#server-proxy + '/dev-api': { + target: baseUrl, + changeOrigin: true, + rewrite: (p) => p.replace(/^\/dev-api/, '') + }, + // springdoc proxy + '^/v3/api-docs/(.*)': { + target: baseUrl, + changeOrigin: true, + } + } + }, + css: { + postcss: { + plugins: [ + { + postcssPlugin: 'internal:charset-removal', + AtRule: { + charset: (atRule) => { + if (atRule.name === 'charset') { + atRule.remove() + } + } + } + } + ] + } + } + } +}) diff --git a/idp/frontend/vite/plugins/auto-import.ts b/idp/frontend/vite/plugins/auto-import.ts new file mode 100644 index 0000000..bbe992d --- /dev/null +++ b/idp/frontend/vite/plugins/auto-import.ts @@ -0,0 +1,13 @@ +import autoImport from 'unplugin-auto-import/vite' +import type { Plugin } from 'vite' + +export default function createAutoImport(): Plugin { + return autoImport({ + imports: [ + 'vue', + 'vue-router', + 'pinia' + ], + dts: false + }) +} \ No newline at end of file diff --git a/idp/frontend/vite/plugins/compression.ts b/idp/frontend/vite/plugins/compression.ts new file mode 100644 index 0000000..1993040 --- /dev/null +++ b/idp/frontend/vite/plugins/compression.ts @@ -0,0 +1,33 @@ +import compression from 'vite-plugin-compression' +import type { Plugin } from 'vite' + +interface ViteEnv { + VITE_BUILD_COMPRESS?: string + [key: string]: any +} + +export default function createCompression(env: ViteEnv): Plugin[] { + const { VITE_BUILD_COMPRESS } = env + const plugin: Plugin[] = [] + if (VITE_BUILD_COMPRESS) { + const compressList = VITE_BUILD_COMPRESS.split(',') + if (compressList.includes('gzip')) { + plugin.push( + compression({ + ext: '.gz', + deleteOriginFile: false + }) + ) + } + if (compressList.includes('brotli')) { + plugin.push( + compression({ + ext: '.br', + algorithm: 'brotliCompress', + deleteOriginFile: false + }) + ) + } + } + return plugin +} \ No newline at end of file diff --git a/idp/frontend/vite/plugins/index.ts b/idp/frontend/vite/plugins/index.ts new file mode 100644 index 0000000..fc164ea --- /dev/null +++ b/idp/frontend/vite/plugins/index.ts @@ -0,0 +1,20 @@ +import vue from '@vitejs/plugin-vue' +import type { Plugin } from 'vite' + +import createAutoImport from './auto-import' +import createSvgIcon from './svg-icon' +import createCompression from './compression' +import createSetupExtend from './setup-extend' + +interface ViteEnv { + [key: string]: any +} + +export default function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean = false): Plugin[] { + const vitePlugins: Plugin[] = [vue()] + vitePlugins.push(createAutoImport()) + vitePlugins.push(createSetupExtend()) + vitePlugins.push(createSvgIcon(isBuild)) + isBuild && vitePlugins.push(...createCompression(viteEnv)) + return vitePlugins +} \ No newline at end of file diff --git a/idp/frontend/vite/plugins/setup-extend.ts b/idp/frontend/vite/plugins/setup-extend.ts new file mode 100644 index 0000000..2216100 --- /dev/null +++ b/idp/frontend/vite/plugins/setup-extend.ts @@ -0,0 +1,6 @@ +import setupExtend from 'unplugin-vue-setup-extend-plus/vite' +import type { Plugin } from 'vite' + +export default function createSetupExtend(): Plugin { + return setupExtend({}) +} \ No newline at end of file diff --git a/idp/frontend/vite/plugins/svg-icon.ts b/idp/frontend/vite/plugins/svg-icon.ts new file mode 100644 index 0000000..294efe7 --- /dev/null +++ b/idp/frontend/vite/plugins/svg-icon.ts @@ -0,0 +1,11 @@ +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' +import path from 'path' +import type { Plugin } from 'vite' + +export default function createSvgIcon(isBuild: boolean): Plugin { + return createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')], + symbolId: 'icon-[dir]-[name]', + svgoOptions: isBuild + }) +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/pom.xml b/sdk/backend/oauth2-login-sdk/pom.xml new file mode 100644 index 0000000..4a8d065 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/pom.xml @@ -0,0 +1,135 @@ + + + 4.0.0 + + oauth2-login-sdk + 1.0-SNAPSHOT + org.lingniu + jar + OAuth2 Login SDK + OAuth2登录SDK后端Java版本 + + 17 + 17 + UTF-8 + 6.5.7 + + + + org.springframework.security + spring-security-config + ${spring-security.version} + + + org.springframework.security + spring-security-oauth2-client + ${spring-security.version} + + + org.springframework.security + spring-security-oauth2-resource-server + ${spring-security.version} + + + org.springframework.security + spring-security-oauth2-jose + ${spring-security.version} + + + org.springframework.boot + spring-boot + 3.5.10 + compile + + + org.springframework.boot + spring-boot-autoconfigure + 3.5.10 + compile + + + org.apache.tomcat.embed + tomcat-embed-core + 11.0.15 + compile + + + org.projectlombok + lombok + 1.18.42 + compile + + + org.springframework.boot + spring-boot-starter-data-redis + 3.5.10 + + + com.fasterxml.jackson.core + jackson-core + 2.20.2 + compile + + + com.fasterxml.jackson.core + jackson-databind + 2.20.2 + compile + + + com.alibaba.fastjson2 + fastjson2 + 2.0.60 + compile + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.19.4 + compile + + + + + + com.nimbusds + nimbus-jose-jwt + 10.0.2 + compile + + + io.netty + netty-codec + 4.1.130.Final + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + MIT License + https://opensource.org/licenses/MIT + repo + + + + \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/redis/RedisCache.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/redis/RedisCache.java new file mode 100644 index 0000000..4f01c60 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/redis/RedisCache.java @@ -0,0 +1,271 @@ +package org.lingniu.sdk.common.redis; + +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * spring redis 工具类 + * + * @author portal + **/ +public class RedisCache +{ + public final RedisTemplate redisTemplate; + public RedisCache(RedisTemplate redisTemplate){ + this.redisTemplate = redisTemplate; + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) + { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) + { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) + { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) + { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * @return 有效时间 + */ + public long getExpire(final String key) + { + return redisTemplate.getExpire(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) + { + return redisTemplate.hasKey(key); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) + { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) + { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public boolean deleteObject(final Collection collection) + { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) + { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) + { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) + { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) + { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) + { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) + { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) + { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) + { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) + { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) + { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return 是否成功 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) + { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + public boolean deleteCacheSetValue(final String key, final String hKey) + { + return redisTemplate.opsForSet().remove(key, hKey) > 0; + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) + { + return redisTemplate.keys(pattern); + } + + public void setCacheSet(String key, String value) { + redisTemplate.opsForSet().add(key,value); + } +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..c6be772 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.java @@ -0,0 +1,53 @@ +package org.lingniu.sdk.common.serializer; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.filter.Filter; +import org.lingniu.sdk.constant.Constants; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.Charset; + +/** + * Redis使用FastJson序列化 + * + * @author portal + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer +{ + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); + + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) + { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException + { + if (t == null) + { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException + { + if (bytes == null || bytes.length <= 0) + { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz, AUTO_TYPE_FILTER); + } +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/JacksonConfiguration.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/JacksonConfiguration.java new file mode 100644 index 0000000..c7fdae3 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/JacksonConfiguration.java @@ -0,0 +1,97 @@ +package org.lingniu.sdk.config; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.TimeZone; + +@Configuration +public class JacksonConfiguration { + + /** + * 默认日期时间格式 + */ + public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + /** + * 默认日期格式 + */ + public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; + + /** + * 默认时区 + */ + public static final String DEFAULT_TIME_ZONE = "Asia/Shanghai"; + + @Bean + @Primary + public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { + ObjectMapper objectMapper = builder.createXmlMapper(false).build(); + + // 配置序列化 + objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + + // 配置反序列化 + objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); + + // 配置时区和日期格式 + objectMapper.setTimeZone(TimeZone.getTimeZone(DEFAULT_TIME_ZONE)); + objectMapper.setDateFormat(new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT)); + + // 注册JavaTimeModule + JavaTimeModule javaTimeModule = new JavaTimeModule(); + javaTimeModule.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))); + javaTimeModule.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))); + javaTimeModule.addSerializer(LocalDate.class, + new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))); + javaTimeModule.addDeserializer(LocalDate.class, + new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))); + + objectMapper.registerModule(javaTimeModule); + + return objectMapper; + } + + + /** + * 定制器方式(Spring Boot推荐) + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { + return builder -> { + // 序列化配置 + builder.serializationInclusion(JsonInclude.Include.NON_NULL); + builder.failOnEmptyBeans(false); + builder.failOnUnknownProperties(false); + + // 日期格式配置 + builder.timeZone(TimeZone.getTimeZone(DEFAULT_TIME_ZONE)); + builder.simpleDateFormat(DEFAULT_DATE_TIME_FORMAT); + + // 特性配置 + builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + builder.featuresToEnable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL); + }; + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SdkRedisConfig.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SdkRedisConfig.java new file mode 100644 index 0000000..8081df3 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SdkRedisConfig.java @@ -0,0 +1,68 @@ +package org.lingniu.sdk.config; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import org.lingniu.sdk.common.redis.RedisCache; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.security.jackson2.SecurityJackson2Modules; +import org.springframework.security.oauth2.client.jackson2.OAuth2ClientJackson2Module; + +@Configuration("SdkRedisConfig") +public class SdkRedisConfig { + + @Bean + @ConditionalOnMissingBean(name = "sdkRedisTemplate") + @Lazy + public RedisTemplate sdkRedisTemplate( + RedisConnectionFactory connectionFactory, + ObjectMapper objectMapper) { + + // 配置 ObjectMapper 以支持多态类型 + ObjectMapper redisObjectMapper = objectMapper.copy(); + + // 启用默认类型信息,用于反序列化 + redisObjectMapper.activateDefaultTyping( + LaissezFaireSubTypeValidator.instance, + ObjectMapper.DefaultTyping.NON_FINAL, + JsonTypeInfo.As.PROPERTY + ); + + // 注册 Spring Security 和 OAuth2 模块 + redisObjectMapper.registerModules( + SecurityJackson2Modules.getModules(getClass().getClassLoader()) + ); + redisObjectMapper.registerModule(new OAuth2ClientJackson2Module()); + + // 创建 RedisTemplate + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + // 使用 StringRedisSerializer 来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + // 使用 GenericJackson2JsonRedisSerializer 来序列化和反序列化redis的value值 + GenericJackson2JsonRedisSerializer serializer = + new GenericJackson2JsonRedisSerializer(redisObjectMapper); + + template.setValueSerializer(serializer); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } + @Bean + @ConditionalOnMissingBean(name="redisCache") + public RedisCache redisCache(@Qualifier("redisTemplate")RedisTemplate redisTemplate){ + return new RedisCache(redisTemplate); + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SecurityConfig.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SecurityConfig.java new file mode 100644 index 0000000..e8bb411 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/config/SecurityConfig.java @@ -0,0 +1,105 @@ +/* + * Copyright 2020-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.lingniu.sdk.config; + +import org.lingniu.sdk.filter.IdpAuthenticationFilter; +import org.lingniu.sdk.handler.LoginSuccessHandler; +import org.lingniu.sdk.handler.LogoutIdpSuccessHandler; +import org.lingniu.sdk.handler.RedirectHandler; +import org.lingniu.sdk.service.RedisOAuth2AuthorizedClientService; +import org.lingniu.sdk.service.TokenService; +import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.client.RestOperations; +import org.springframework.web.client.RestTemplate; + +import static org.springframework.security.config.Customizer.withDefaults; + +/** + * @author Joe Grandja + * @author Dmitriy Dubson + * @author Steve Riesenberg + * @since 0.0.1 + */ +@EnableWebSecurity +@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) +@EnableConfigurationProperties({OAuth2ClientProperties.class}) +@Configuration +public class SecurityConfig { + private final LoginSuccessHandler loginSuccessHandler; + private final OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository; + private final RedisOAuth2AuthorizedClientService redisOAuth2AuthorizedClientService; + private final TokenService tokenService; + private final LogoutIdpSuccessHandler logoutIdpSuccessHandler; + private final RedirectHandler redirectHandler; + + public SecurityConfig(LoginSuccessHandler loginSuccessHandler, OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository, RedisOAuth2AuthorizedClientService redisOAuth2AuthorizedClientService, TokenService tokenService, LogoutIdpSuccessHandler logoutIdpSuccessHandler, RedirectHandler redirectHandler) { + this.loginSuccessHandler = loginSuccessHandler; + this.oAuth2AuthorizedClientRepository = oAuth2AuthorizedClientRepository; + this.redisOAuth2AuthorizedClientService = redisOAuth2AuthorizedClientService; + this.tokenService = tokenService; + this.logoutIdpSuccessHandler = logoutIdpSuccessHandler; + this.redirectHandler = redirectHandler; + } + + // @formatter:off + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http, JwtDecoder jwtDecoder) throws Exception { + http + .csrf(AbstractHttpConfigurer::disable) + .authorizeHttpRequests(authorize -> + authorize + .anyRequest().authenticated() + ) + .oauth2Login(oauth2-> + oauth2.authorizationEndpoint(authorization ->authorization.authorizationRedirectStrategy(redirectHandler)) + .successHandler(loginSuccessHandler) + .authorizedClientRepository(oAuth2AuthorizedClientRepository) + .authorizedClientService(redisOAuth2AuthorizedClientService) + ) + .exceptionHandling(withDefaults()) + .addFilterBefore(new IdpAuthenticationFilter(tokenService),UsernamePasswordAuthenticationFilter.class) + .oauth2ResourceServer(resource ->resource.jwt(withDefaults())) + .logout(httpSecurityLogoutConfigurer -> + httpSecurityLogoutConfigurer + .logoutSuccessHandler(logoutIdpSuccessHandler) + ); + return http.build(); + } + // @formatter:on + + @Bean + public JwtDecoder jwtDecoder(OAuth2ClientProperties oAuth2ClientProperties) { + RestOperations rest = new RestTemplate(); + + return NimbusJwtDecoder + .withJwkSetUri(oAuth2ClientProperties.getProvider().get("idp").getJwkSetUri()) + .restOperations(rest) + .build(); + } + +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/CacheConstants.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/CacheConstants.java new file mode 100644 index 0000000..a59afef --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/CacheConstants.java @@ -0,0 +1,24 @@ +package org.lingniu.sdk.constant; + +/** + * 缓存的key 常量 + * + * @author portal + */ +public class CacheConstants +{ + // Access Token存储: String结构 + // 格式: access_token:{token} + public static final String ACCESS_TOKEN_KEY = "app_access_token:%s"; + public static final String ACCESS_TOKEN_USER_KEY = "app_access_token_user:%s"; + + // Refresh Token存储: Hash结构 + // 格式: refresh_token:{token} + public static final String REFRESH_TOKEN_KEY = "app_refresh_token:%s"; + + // 用户会话管理 + public static final String USER_SESSIONS = "app_user_sessions:%s"; // userId -> session列表 + + public static final String OAUTH2_CLIENT_KEY_PREFIX = "oauth2:client:"; + +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/Constants.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/Constants.java new file mode 100644 index 0000000..c4181f7 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/Constants.java @@ -0,0 +1,174 @@ +package org.lingniu.sdk.constant; + +import com.nimbusds.openid.connect.sdk.claims.CommonClaimsSet; + +import java.util.Locale; + +/** + * 通用常量信息 + * + * @author portal + */ +public class Constants +{ + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * 系统语言 + */ + public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE; + + /** + * www主域 + */ + public static final String WWW = "www."; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 注册 + */ + public static final String REGISTER = "Register"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 所有权限标识 + */ + public static final String ALL_PERMISSION = "*:*:*"; + + /** + * 管理员角色权限标识 + */ + public static final String SUPER_ADMIN = "admin"; + + /** + * 角色权限分隔符 + */ + public static final String ROLE_DELIMITER = ","; + + /** + * 权限标识分隔符 + */ + public static final String PERMISSION_DELIMITER = ","; + + /** + * 验证码有效期(分钟) + */ + public static final Integer CAPTCHA_EXPIRATION = 2; + + /** + * 令牌 + */ + public static final String TOKEN = "token"; + + /** + * 令牌前缀 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 令牌前缀 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + + /** + * 用户ID + */ + public static final String JWT_USERID = "userid"; + + /** + * 用户名称 + */ + public static final String JWT_USERNAME = CommonClaimsSet.SUB_CLAIM_NAME; + + /** + * 用户头像 + */ + public static final String JWT_AVATAR = "avatar"; + + /** + * 创建时间 + */ + public static final String JWT_CREATED = "created"; + + /** + * 用户权限 + */ + public static final String JWT_AUTHORITIES = "authorities"; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi:"; + + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 远程方法调用 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; + + /** + * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全) + */ + public static final String[] JSON_WHITELIST_STR = { "com.portal" }; + + /** + * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) + */ + public static final String[] JOB_WHITELIST_STR = { "com.portal.quartz.task" }; + + /** + * 定时任务违规的字符 + */ + public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework", "org.apache", "org.lingniu.idp.utils.file", "org.lingniu.idp.config", "com.portal.generator" }; +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/UserConstants.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/UserConstants.java new file mode 100644 index 0000000..7bb95d9 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/constant/UserConstants.java @@ -0,0 +1,81 @@ +package org.lingniu.sdk.constant; + +/** + * 用户常量信息 + * + * @author portal + */ +public class UserConstants +{ + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** 正常状态 */ + public static final String NORMAL = "0"; + + /** 异常状态 */ + public static final String EXCEPTION = "1"; + + /** 用户封禁状态 */ + public static final String USER_DISABLE = "1"; + + /** 角色正常状态 */ + public static final String ROLE_NORMAL = "0"; + + /** 角色封禁状态 */ + public static final String ROLE_DISABLE = "1"; + + /** 部门正常状态 */ + public static final String DEPT_NORMAL = "0"; + + /** 部门停用状态 */ + public static final String DEPT_DISABLE = "1"; + + /** 字典正常状态 */ + public static final String DICT_NORMAL = "0"; + + /** 是否为系统默认(是) */ + public static final String YES = "Y"; + + /** 是否菜单外链(是) */ + public static final String YES_FRAME = "0"; + + /** 是否菜单外链(否) */ + public static final String NO_FRAME = "1"; + + /** 菜单类型(目录) */ + public static final String TYPE_DIR = "M"; + + /** 菜单类型(菜单) */ + public static final String TYPE_MENU = "C"; + + /** 菜单类型(按钮) */ + public static final String TYPE_BUTTON = "F"; + + /** Layout组件标识 */ + public final static String LAYOUT = "Layout"; + + /** ParentView组件标识 */ + public final static String PARENT_VIEW = "ParentView"; + + /** InnerLink组件标识 */ + public final static String INNER_LINK = "InnerLink"; + + /** 校验是否唯一的返回标识 */ + public final static boolean UNIQUE = true; + public final static boolean NOT_UNIQUE = false; + + /** + * 用户名长度限制 + */ + public static final int USERNAME_MIN_LENGTH = 2; + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 密码长度限制 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/filter/IdpAuthenticationFilter.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/filter/IdpAuthenticationFilter.java new file mode 100644 index 0000000..a95eaf5 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/filter/IdpAuthenticationFilter.java @@ -0,0 +1,54 @@ +package org.lingniu.sdk.filter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.sdk.model.token.AccessTokenInfo; +import org.lingniu.sdk.service.TokenService; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +public class IdpAuthenticationFilter extends OncePerRequestFilter { + private final TokenService tokenService; + + public IdpAuthenticationFilter(TokenService tokenService) { + this.tokenService = tokenService; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + + try { + AccessTokenInfo accessTokenInfo = null; + // 验证令牌 + if (tokenService.validateAccessToken(request)) { + accessTokenInfo = tokenService.getAccessTokenInfo(request); + }else{ + accessTokenInfo = tokenService.refreshToken(request, response); + } + if(accessTokenInfo!=null){ + // 创建认证对象 + OAuth2AuthenticationToken authentication = + new OAuth2AuthenticationToken( + tokenService.convertPrincipal(accessTokenInfo),null,accessTokenInfo.getClientRegistrationId() + ); + + // 设置认证信息到SecurityContext + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + } catch (Exception e) { + // 令牌验证失败,记录日志但不中断请求 + logger.error("token 验证失败", e); + } + + filterChain.doFilter(request, response); + } + +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LoginSuccessHandler.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LoginSuccessHandler.java new file mode 100644 index 0000000..2a49492 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LoginSuccessHandler.java @@ -0,0 +1,61 @@ +package org.lingniu.sdk.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.sdk.model.base.CommonResult; +import org.lingniu.sdk.model.token.TokenInfo; +import org.lingniu.sdk.model.user.UserInfo; +import org.lingniu.sdk.service.TokenService; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.core.oidc.OidcUserInfo; +import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Map; + +@Component +public class LoginSuccessHandler implements AuthenticationSuccessHandler { + + private final TokenService tokenService; + private final ObjectMapper objectMapper; + + public LoginSuccessHandler(TokenService tokenService, ObjectMapper objectMapper) { + this.tokenService = tokenService; + this.objectMapper = objectMapper; + } + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + OAuth2AuthenticationToken oAuth2AuthenticationToken = (OAuth2AuthenticationToken)authentication; + DefaultOidcUser principal = (DefaultOidcUser)oAuth2AuthenticationToken.getPrincipal(); + Map claims = principal.getUserInfo().getClaims(); + String clientRegistrationId = oAuth2AuthenticationToken.getAuthorizedClientRegistrationId(); + String s = objectMapper.writeValueAsString(claims); + // 生成token + TokenInfo token = tokenService.createToken(principal.getName()); + token.getAccessTokenInfo().setAdditionalInfo(s); + token.getAccessTokenInfo().setClientRegistrationId(clientRegistrationId); + token.getRefreshTokenInfo().setClientRegistrationId(clientRegistrationId); + // 保存token + tokenService.storeTokenInfo(token); + // 将短token放入响应头 + tokenService.setAccessTokenHeader(response,token.getAccessTokenInfo().getTokenValue()); + // 设置Refresh Token到HttpOnly Cookie + tokenService.setRefreshTokenCookie(response, token); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.setStatus(HttpStatus.OK.value()); + objectMapper.writeValue(response.getWriter(), CommonResult.success(CommonResult.success(claims))); + } + + +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LogoutIdpSuccessHandler.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LogoutIdpSuccessHandler.java new file mode 100644 index 0000000..4d7c03e --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/LogoutIdpSuccessHandler.java @@ -0,0 +1,36 @@ +package org.lingniu.sdk.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.sdk.model.base.CommonResult; +import org.lingniu.sdk.service.TokenService; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +public class LogoutIdpSuccessHandler implements LogoutSuccessHandler{ + private final ObjectMapper objectMapper; + private final TokenService tokenService; + public LogoutIdpSuccessHandler(ObjectMapper objectMapper, TokenService tokenService) { + this.objectMapper = objectMapper; + this.tokenService = tokenService; + } + + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + tokenService.clearToken(request); + tokenService.clearRefreshTokenCookie(response); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.setStatus(HttpStatus.OK.value()); + + objectMapper.writeValue(response.getWriter(), CommonResult.success("success")); + } +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/RedirectHandler.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/RedirectHandler.java new file mode 100644 index 0000000..f91d360 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/handler/RedirectHandler.java @@ -0,0 +1,30 @@ +package org.lingniu.sdk.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.sdk.model.base.CommonResult; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.web.RedirectStrategy; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Map; + +@Component +public class RedirectHandler implements RedirectStrategy { + private final ObjectMapper objectMapper; + + public RedirectHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + @Override + public void sendRedirect(HttpServletRequest request, HttpServletResponse response, String url) throws IOException { + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.setStatus(HttpStatus.OK.value()); + objectMapper.writeValue(response.getWriter(), CommonResult.success(Map.of("redirect_url",url))); + } +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/base/CommonResult.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/base/CommonResult.java new file mode 100644 index 0000000..b6795ca --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/base/CommonResult.java @@ -0,0 +1,78 @@ +package org.lingniu.sdk.model.base; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.springframework.http.HttpStatus; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Objects; + +/** + * 通用返回 + * + * @param 数据泛型 + */ +@Data +public class CommonResult implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 错误码 + * + */ + private Integer code; + /** + * 错误提示,用户可阅读 + * + */ + private String msg; + /** + * 返回数据 + */ + private T data; + + /** + * 将传入的 result 对象,转换成另外一个泛型结果的对象 + * + * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 + * + * @param result 传入的 result 对象 + * @param 返回的泛型 + * @return 新的 CommonResult 对象 + */ + public static CommonResult error(CommonResult result) { + return error(result.getCode(), result.getMsg()); + } + + public static CommonResult error(Integer code, String message) { + CommonResult result = new CommonResult<>(); + result.code = code; + result.msg = message; + return result; + } + + + public static CommonResult success(T data) { + CommonResult result = new CommonResult<>(); + result.code = HttpStatus.OK.value(); + result.data = data; + result.msg = ""; + return result; + } + + public static boolean isSuccess(Integer code) { + return Objects.equals(code, HttpStatus.OK.value()); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isSuccess() { + return isSuccess(code); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isError() { + return !isSuccess(); + } + +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java new file mode 100644 index 0000000..dc1282e --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java @@ -0,0 +1,152 @@ +package org.lingniu.sdk.model.token; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; + +/** + * Access Token 信息 + * 存储在 Redis String 结构中 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccessTokenInfo { + private String tokenValue; + + /** + * 用户名 + */ + private String username; + + + /** + * 颁发时间 + */ + private Instant issuedAt; + + /** + * 过期时间 + */ + private Instant expiresAt; + + /** + * 关联的刷新Token ID + */ + private String refreshTokenId; + + /** + * JWT ID(如果是JWT token) + */ + private String jti; + + /** + * 附加数据(JSON格式) + */ + private String additionalInfo; + + private String clientRegistrationId; + + /** + * 检查Token是否过期 + */ + public boolean isExpired() { + return expiresAt != null && Instant.now().isAfter(expiresAt); + } + + /** + * 检查Token是否有效 + */ + public boolean isValid() { + return !isExpired(); + } + + /** + * 获取剩余有效时间(秒) + */ + public long getRemainingSeconds() { + if (expiresAt == null) { + return 0; + } + Instant now = Instant.now(); + if (now.isAfter(expiresAt)) { + return 0; + } + return expiresAt.getEpochSecond() - now.getEpochSecond(); + } + + /** + * 获取Token使用时长(秒) + */ + public long getUsedSeconds() { + if (issuedAt == null) { + return 0; + } + Instant end = Instant.now(); + return end.getEpochSecond() - issuedAt.getEpochSecond(); + } + + /** + * 转换为Map,便于Redis存储 + */ + public Map toMap() { + Map map = new HashMap<>(); + map.put("username", username); + map.put("tokenValue",tokenValue); + map.put("issuedAt", issuedAt != null ? issuedAt.toString() : null); + map.put("expiresAt", expiresAt != null ? expiresAt.toString() : null); + map.put("refreshTokenId", refreshTokenId); + map.put("jti", jti); + map.put("clientRegistrationId",clientRegistrationId); + map.put("additionalInfo", additionalInfo); + return map; + } + + /** + * 从Map创建AccessTokenInfo + */ + public static AccessTokenInfo fromMap(Map map) { + if (map == null || map.isEmpty()) { + return null; + } + + AccessTokenInfo.AccessTokenInfoBuilder builder = AccessTokenInfo.builder(); + builder.username((String) map.get("username")); + builder.tokenValue((String) map.get("tokenValue")); + // 处理时间字段 + String issuedAtStr = (String) map.get("issuedAt"); + if (issuedAtStr != null) { + builder.issuedAt(Instant.parse(issuedAtStr)); + } + + String expiresAtStr = (String) map.get("expiresAt"); + if (expiresAtStr != null) { + builder.expiresAt(Instant.parse(expiresAtStr)); + } + + builder.refreshTokenId((String) map.get("refreshTokenId")); + builder.jti((String) map.get("jti")); + builder.clientRegistrationId((String) map.get("clientRegistrationId")); + builder.additionalInfo((String) map.get("additionalInfo")); + + return builder.build(); + } + + /** + * 简化的用户信息(用于接口返回) + */ + public Map toSimpleInfo() { + Map info = new HashMap<>(); + info.put("username", username); + info.put("expiresAt", expiresAt != null ? expiresAt.toEpochMilli() : null); + info.put("issuedAt", issuedAt != null ? issuedAt.toEpochMilli() : null); + info.put("valid", isValid()); + return info; + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/RefreshTokenInfo.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/RefreshTokenInfo.java new file mode 100644 index 0000000..1346e6b --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/RefreshTokenInfo.java @@ -0,0 +1,226 @@ +package org.lingniu.sdk.model.token; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.security.oauth2.core.OAuth2RefreshToken; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; + +/** + * Refresh Token 信息 + * 存储在 Redis Hash 结构中 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RefreshTokenInfo { + private String tokenValue; + + /** + * 用户名 + */ + private String username; + + + /** + * 创建时间 + */ + private Instant createdAt; + + /** + * 最后使用时间 + */ + private Instant lastUsedAt; + + /** + * 过期时间 + */ + private Instant expiresAt; + + /** + * 对应accessToken + */ + private String accessToken; + /** + * 关联的Access Token数量(用于统计) + */ + private int accessTokenCount; + + /** + * 使用次数 + */ + private int usageCount; + + + + /** + * 附加数据(JSON格式) + */ + private String additionalInfo; + + private String clientRegistrationId; + + + /** + * 检查Refresh Token是否过期 + */ + public boolean isExpired() { + return expiresAt != null && Instant.now().isAfter(expiresAt); + } + + /** + * 检查Refresh Token是否有效 + */ + public boolean isValid() { + return !isExpired(); + } + + /** + * 获取剩余有效时间(秒) + */ + public long getRemainingSeconds() { + if (expiresAt == null) { + return 0; + } + Instant now = Instant.now(); + if (now.isAfter(expiresAt)) { + return 0; + } + return expiresAt.getEpochSecond() - now.getEpochSecond(); + } + + /** + * 获取活跃天数(创建到现在) + */ + public long getActiveDays() { + if (createdAt == null) { + return 0; + } + Instant end = Instant.now(); + long seconds = end.getEpochSecond() - createdAt.getEpochSecond(); + return seconds / (24 * 3600); + } + + /** + * 获取闲置天数(最后使用到现在) + */ + public long getIdleDays() { + if (lastUsedAt == null) { + return getActiveDays(); + } + Instant now = Instant.now(); + long seconds = now.getEpochSecond() - lastUsedAt.getEpochSecond(); + return seconds / (24 * 3600); + } + + /** + * 增加使用计数 + */ + public void incrementUsage() { + this.usageCount++; + this.lastUsedAt = Instant.now(); + } + + public void incrementAccessTokenUsage(String accessToken) { + this.accessTokenCount++; + this.accessToken = accessToken; + } + + + /** + * 转换为Map,便于Redis存储 + */ + public Map toMap() { + Map hash = new HashMap<>(); + hash.put("username", username != null ? username : ""); + hash.put("tokenValue", tokenValue != null ? tokenValue : ""); + hash.put("accessToken", accessToken != null ? accessToken : ""); + hash.put("createdAt", createdAt != null ? createdAt.toString() : ""); + hash.put("lastUsedAt", lastUsedAt != null ? lastUsedAt.toString() : ""); + hash.put("expiresAt", expiresAt != null ? expiresAt.toString() : ""); + hash.put("accessTokenCount", Integer.toString(accessTokenCount)); + hash.put("usageCount", Integer.toString(usageCount)); + hash.put("clientRegistrationId", clientRegistrationId); + hash.put("additionalInfo", additionalInfo != null ? additionalInfo : ""); + + return hash; + } + public Map toUpdateMap() { + Map hash = new HashMap<>(); + hash.put("lastUsedAt", lastUsedAt != null ? lastUsedAt.toString() : ""); + hash.put("accessTokenCount", Integer.toString(accessTokenCount)); + hash.put("accessToken", accessToken != null ? accessToken : ""); + hash.put("usageCount", Integer.toString(usageCount)); + return hash; + } + + /** + * 从Redis Hash创建RefreshTokenInfo + */ + public static RefreshTokenInfo fromMap(Map hash) { + if (hash == null || hash.isEmpty()) { + return null; + } + + RefreshTokenInfoBuilder builder = RefreshTokenInfo.builder(); + builder.username((String) hash.getOrDefault("username", "")); + builder.accessToken((String) hash.getOrDefault("accessToken", "")); + builder.tokenValue((String) hash.getOrDefault("tokenValue", "")); + builder.clientRegistrationId((String) hash.getOrDefault("clientRegistrationId", "")); + + // 处理时间字段 + String createdAtStr = (String)hash.get("createdAt"); + if (createdAtStr != null && !createdAtStr.isEmpty()) { + try { + builder.createdAt(Instant.parse(createdAtStr)); + } catch (Exception e) { + // 解析失败,使用当前时间 + builder.createdAt(Instant.now()); + } + } + + String lastUsedAtStr = (String)hash.get("lastUsedAt"); + if (lastUsedAtStr != null && !lastUsedAtStr.isEmpty()) { + try { + builder.lastUsedAt(Instant.parse(lastUsedAtStr)); + } catch (Exception e) { + // 解析失败,忽略 + } + } + + String expiresAtStr = (String)hash.get("expiresAt"); + if (expiresAtStr != null && !expiresAtStr.isEmpty()) { + try { + builder.expiresAt(Instant.parse(expiresAtStr)); + } catch (Exception e) { + // 解析失败,忽略 + } + } + + // 处理数值字段 + String accessTokenCountStr = (String)hash.get("accessTokenCount"); + if (accessTokenCountStr != null && !accessTokenCountStr.isEmpty()) { + try { + builder.accessTokenCount(Integer.parseInt(accessTokenCountStr)); + } catch (NumberFormatException e) { + builder.accessTokenCount(0); + } + } + + String usageCountStr = (String)hash.get("usageCount"); + if (usageCountStr != null && !usageCountStr.isEmpty()) { + try { + builder.usageCount(Integer.parseInt(usageCountStr)); + } catch (NumberFormatException e) { + builder.usageCount(0); + } + } + + return builder.build(); + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/TokenInfo.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/TokenInfo.java new file mode 100644 index 0000000..f759f5a --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/TokenInfo.java @@ -0,0 +1,22 @@ +package org.lingniu.sdk.model.token; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +// TokenInfo.java +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TokenInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private AccessTokenInfo accessTokenInfo; + private RefreshTokenInfo refreshTokenInfo; +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/DataPermission.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/DataPermission.java new file mode 100644 index 0000000..c782163 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/DataPermission.java @@ -0,0 +1,23 @@ +package org.lingniu.sdk.model.user; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +@NoArgsConstructor +public class DataPermission { + /** 允许全部*/ + private boolean allowAll; + /**仅自己*/ + private boolean onlySelf; + /**部门列表*/ + private Set deptList; + /**地区*/ + private Set areas; + +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserDept.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserDept.java new file mode 100644 index 0000000..91fabd2 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserDept.java @@ -0,0 +1,36 @@ +package org.lingniu.sdk.model.user; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +@NoArgsConstructor +public class UserDept implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** 部门ID */ + private Long deptId; + + /** 父部门ID */ + private Long parentId; + + /** 祖级列表 */ + private String ancestors; + + /** 部门名称 */ + private String deptName; + + /** 显示顺序 */ + private Integer orderNum; + + /** 负责人 */ + private String leader; + /** 部门状态:0正常,1停用 */ + private String status; +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserInfo.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserInfo.java new file mode 100644 index 0000000..c652072 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserInfo.java @@ -0,0 +1,78 @@ +package org.lingniu.sdk.model.user; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.oauth2.core.user.OAuth2User; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +@NoArgsConstructor +public class UserInfo implements OAuth2User, Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * userid + */ + private Long userId; + /** + * 用户账号 + */ + private String username; + /** + * 用户名 + */ + private String nickName; + /** + * 性别 + */ + private String sex; + /** + * 当前部门 + */ + private Long currentDeptId; + /** + * 用户部门列表 + */ + private List userDepts; + /** + * 用户岗位列表 + */ + private List userPosts; + /** + * 用户数据权限 + */ + private DataPermission dataPermission; + /** + * 权限列表 + */ + private Set permissions; + /** + * 角色列表 + */ + private Set roles; + + + @Override + public String getName() { + return username; + } + + @Override + public Map getAttributes() { + return Map.of(); + } + + @Override + public Collection getAuthorities() { + return List.of(); + } +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserPost.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserPost.java new file mode 100644 index 0000000..7b78dd2 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/user/UserPost.java @@ -0,0 +1,31 @@ +package org.lingniu.sdk.model.user; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +@NoArgsConstructor +public class UserPost implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** 岗位序号 */ + private Long postId; + + /** 岗位编码 */ + private String postCode; + + /** 岗位名称 */ + private String postName; + + /** 岗位排序 */ + private Integer postSort; + + /** 状态(0正常 1停用) */ + private String status; +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisAccessTokenService.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisAccessTokenService.java new file mode 100644 index 0000000..fa3a1fc --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisAccessTokenService.java @@ -0,0 +1,89 @@ +package org.lingniu.sdk.service; + +import lombok.extern.slf4j.Slf4j; +import org.lingniu.sdk.common.redis.RedisCache; +import org.lingniu.sdk.constant.CacheConstants; +import org.lingniu.sdk.model.token.AccessTokenInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.Map; + +@Component +@Slf4j +public class RedisAccessTokenService { + + @Autowired + private RedisCache redisCache; + + private final long ACCESS_TOKEN_EXPIRE = 3600; // 1小时 + + + /** + * 存储Access Token到Redis + */ + public void storeAccessToken(AccessTokenInfo tokenInfo) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, tokenInfo.getTokenValue()); + try { + redisCache.setCacheMap(key,tokenInfo.toMap()); + Instant expiresAt = tokenInfo.getExpiresAt(); + long expire = ACCESS_TOKEN_EXPIRE; + if(expiresAt!=null){ + expire = expiresAt.getEpochSecond() - Instant.now().getEpochSecond(); + } + + redisCache.expire(key,expire); + } catch (Exception e) { + log.error("存储Access Token失败", e); + } + } + + /** + * 验证Access Token + */ + public boolean validateAccessToken(String token) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + if(!redisCache.hasKey(key)){ + return false; + } + AccessTokenInfo accessTokenInfo = getAccessTokenInfo(token); + if(accessTokenInfo==null){ + return false; + } + return accessTokenInfo.isValid(); + } + + + /** + * 删除Access Token + */ + public boolean removeAccessToken(String token) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + return redisCache.deleteObject(key); + } + + /** + * 获取Access Token信息 + */ + public AccessTokenInfo getAccessTokenInfo(String token) { + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, token); + Map cacheMap = redisCache.getCacheMap(key); + if(cacheMap!=null){ + return AccessTokenInfo.fromMap(cacheMap); + } + return null; + } + + /** + * 作废 删除 + * @param tokenInfo + */ + public void revokeAccessToken(AccessTokenInfo tokenInfo) { + if(tokenInfo==null){ + return; + } + String key = String.format(CacheConstants.ACCESS_TOKEN_KEY, tokenInfo.getTokenValue()); + redisCache.deleteObject(key); + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.java new file mode 100644 index 0000000..a1c1131 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.java @@ -0,0 +1,248 @@ +package org.lingniu.sdk.service; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.lingniu.sdk.constant.CacheConstants; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.core.OAuth2RefreshToken; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisOAuth2AuthorizedClientRepository implements OAuth2AuthorizedClientRepository { + + private final RedisTemplate redisTemplate; + private final ClientRegistrationRepository clientRegistrationRepository; + private final ObjectMapper objectMapper = new ObjectMapper(); + + public RedisOAuth2AuthorizedClientRepository( + RedisTemplate redisTemplate, + ClientRegistrationRepository clientRegistrationRepository) { + this.redisTemplate = redisTemplate; + this.clientRegistrationRepository = clientRegistrationRepository; + } + + @Override + public T loadAuthorizedClient( + String clientRegistrationId, + Authentication principal, + HttpServletRequest request) { + + if (principal == null || !principal.isAuthenticated()) { + return null; + } + + String principalName = principal.getName(); + + String key = buildClientKey(principalName, clientRegistrationId); + + try { + Object data = redisTemplate.opsForValue().get(key); + if (data == null) { + return null; + } + + // 反序列化 + Map clientData = objectMapper.convertValue(data, new TypeReference>() {}); + + // 重建 ClientRegistration + ClientRegistration clientRegistration = clientRegistrationRepository + .findByRegistrationId(clientRegistrationId); + + if (clientRegistration == null) { + return null; + } + + // 重建 OAuth2AccessToken + OAuth2AccessToken accessToken = rebuildAccessToken( + (Map) clientData.get("accessToken") + ); + + // 重建 OAuth2RefreshToken(如果有) + OAuth2RefreshToken refreshToken = null; + if (clientData.containsKey("refreshToken")) { + refreshToken = rebuildRefreshToken( + (Map) clientData.get("refreshToken") + ); + } + + // 重建 OAuth2AuthorizedClient + OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient( + clientRegistration, + principalName, + accessToken, + refreshToken + ); + + + @SuppressWarnings("unchecked") + T result = (T) authorizedClient; + return result; + + } catch (Exception e) { + // 如果反序列化失败,删除损坏的数据 + redisTemplate.delete(key); + return null; + } + } + + @Override + public void saveAuthorizedClient( + OAuth2AuthorizedClient authorizedClient, + Authentication principal, + HttpServletRequest request, + HttpServletResponse response) { + + if (principal == null || !principal.isAuthenticated()) { + return; + } + + String principalName = principal.getName(); + String clientRegistrationId = authorizedClient.getClientRegistration().getRegistrationId(); + String key = buildClientKey(principalName, clientRegistrationId); + try { + // 序列化 OAuth2AuthorizedClient + Map clientData = new HashMap<>(); + + // 存储 ClientRegistrationId + clientData.put("clientRegistrationId", clientRegistrationId); + clientData.put("principalName", principalName); + + // 序列化 AccessToken + OAuth2AccessToken accessToken = authorizedClient.getAccessToken(); + Map accessTokenData = new HashMap<>(); + accessTokenData.put("tokenValue", accessToken.getTokenValue()); + accessTokenData.put("tokenType", accessToken.getTokenType().getValue()); + accessTokenData.put("issuedAt", accessToken.getIssuedAt().toString()); + accessTokenData.put("expiresAt", accessToken.getExpiresAt().toString()); + accessTokenData.put("scopes", new ArrayList<>(accessToken.getScopes())); + clientData.put("accessToken", accessTokenData); + + // 序列化 RefreshToken(如果有) + OAuth2RefreshToken refreshToken = authorizedClient.getRefreshToken(); + if (refreshToken != null) { + Map refreshTokenData = new HashMap<>(); + refreshTokenData.put("tokenValue", refreshToken.getTokenValue()); + if (refreshToken.getIssuedAt() != null) { + refreshTokenData.put("issuedAt", refreshToken.getIssuedAt().toString()); + } + if (refreshToken.getExpiresAt() != null) { + refreshTokenData.put("expiresAt", refreshToken.getExpiresAt().toString()); + } + clientData.put("refreshToken", refreshTokenData); + } + + // 存储到 Redis + redisTemplate.opsForValue().set(key, clientData); + + // 设置过期时间(根据 AccessToken 的过期时间) + Duration expiresIn = Duration.between(Instant.now(), accessToken.getExpiresAt()); + if (!expiresIn.isNegative()) { + redisTemplate.expire(key, 7, TimeUnit.DAYS); + } + + } catch (Exception e) { + throw new RuntimeException("Failed to save OAuth2AuthorizedClient to Redis", e); + } + } + + @Override + public void removeAuthorizedClient( + String clientRegistrationId, + Authentication principal, + HttpServletRequest request, + HttpServletResponse response) { + + if (principal == null) { + return; + } + + String principalName = principal.getName(); + String key = buildClientKey(principalName, clientRegistrationId); + + // 删除客户端数据 + redisTemplate.delete(key); + } + + private String buildClientKey(String principalName, String clientRegistrationId) { + return CacheConstants.OAUTH2_CLIENT_KEY_PREFIX + principalName + ":" + clientRegistrationId; + } + + + private OAuth2AccessToken rebuildAccessToken(Map data) { + String tokenValue = (String) data.get("tokenValue"); + OAuth2AccessToken.TokenType tokenType = OAuth2AccessToken.TokenType.BEARER; + if (data.containsKey("tokenType")) { + String typeStr = (String) data.get("tokenType"); + tokenType = new OAuth2AccessToken.TokenType(typeStr); + } + + Instant issuedAt = Instant.parse((String) data.get("issuedAt")); + Instant expiresAt = Instant.parse((String) data.get("expiresAt")); + + @SuppressWarnings("unchecked") + Set scopes = new HashSet<>((List) data.get("scopes")); + + return new OAuth2AccessToken(tokenType, tokenValue, issuedAt, expiresAt, scopes); + } + + private OAuth2RefreshToken rebuildRefreshToken(Map data) { + String tokenValue = (String) data.get("tokenValue"); + Instant issuedAt = data.containsKey("issuedAt") ? + Instant.parse((String) data.get("issuedAt")) : null; + Instant expiresAt = data.containsKey("expiresAt") ? + Instant.parse((String) data.get("expiresAt")) : null; + + return new OAuth2RefreshToken(tokenValue, issuedAt, expiresAt); + } + + /** + * 获取用户的所有客户端 + */ + public List findByPrincipalName(String principalName) { + String pattern = CacheConstants.OAUTH2_CLIENT_KEY_PREFIX + principalName + ":*"; + Set keys = redisTemplate.keys(pattern); + + List clients = new ArrayList<>(); + for (String key : keys) { + String clientRegistrationId = extractClientRegistrationId(key); + // 这里需要 principal,简化处理 + // 实际使用时可能需要调整 + } + + return clients; + } + + /** + * 清理过期的客户端 + */ + public void cleanupExpiredClients() { + // 可以通过 Redis 的过期策略自动清理 + // 也可以手动扫描并删除过期的 token + String pattern = CacheConstants.OAUTH2_CLIENT_KEY_PREFIX + "*"; + Set keys = redisTemplate.keys(pattern); + + for (String key : keys) { + Long ttl = redisTemplate.getExpire(key, TimeUnit.SECONDS); + if (ttl != null && ttl <= 0) { + redisTemplate.delete(key); + } + } + } + + private String extractClientRegistrationId(String key) { + return key.substring(key.lastIndexOf(":") + 1); + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientService.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientService.java new file mode 100644 index 0000000..4a1eb53 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientService.java @@ -0,0 +1,50 @@ +package org.lingniu.sdk.service; + +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; +import org.springframework.stereotype.Component; + +import java.util.Collections; + +@Component +public class RedisOAuth2AuthorizedClientService implements OAuth2AuthorizedClientService { + + private final RedisOAuth2AuthorizedClientRepository repository; + + public RedisOAuth2AuthorizedClientService(RedisOAuth2AuthorizedClientRepository repository) { + this.repository = repository; + } + + @Override + public T loadAuthorizedClient( + String clientRegistrationId, String principalName) { + + // 从 Redis 加载 + Authentication authentication = createAuthentication(principalName); + return repository.loadAuthorizedClient(clientRegistrationId, authentication, null); + } + + @Override + public void saveAuthorizedClient( + OAuth2AuthorizedClient authorizedClient, Authentication principal) { + + repository.saveAuthorizedClient(authorizedClient, principal, null, null); + } + + @Override + public void removeAuthorizedClient(String clientRegistrationId, String principalName) { + Authentication authentication = createAuthentication(principalName); + repository.removeAuthorizedClient(clientRegistrationId, authentication, null, null); + } + + + private Authentication createAuthentication(String principalName) { + return new UsernamePasswordAuthenticationToken( + principalName, + null, + Collections.emptyList() + ); + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisRefreshTokenService.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisRefreshTokenService.java new file mode 100644 index 0000000..2454ae5 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/RedisRefreshTokenService.java @@ -0,0 +1,81 @@ +package org.lingniu.sdk.service; + +import lombok.extern.slf4j.Slf4j; +import org.lingniu.sdk.common.redis.RedisCache; +import org.lingniu.sdk.constant.CacheConstants; +import org.lingniu.sdk.model.token.RefreshTokenInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.Map; + +@Component +@Slf4j +public class RedisRefreshTokenService { + + @Autowired + private RedisCache redisCache; + + private final long REFRESH_TOKEN_EXPIRE = 30 * 24 * 3600L; // 30天 + + /** + * 存储Refresh Token到Redis Hash + */ + public void storeRefreshToken(RefreshTokenInfo tokenInfo) { + if(tokenInfo==null){ + return; + } + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, tokenInfo.getTokenValue()); + + redisCache.setCacheMap(key,tokenInfo.toMap()); + Instant expiresAt = tokenInfo.getExpiresAt(); + long expire = REFRESH_TOKEN_EXPIRE; + if(expiresAt!=null){ + expire = expiresAt.getEpochSecond() - Instant.now().getEpochSecond(); + } + + redisCache.expire(key,expire); + // 维护用户会话列表 + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, tokenInfo.getUsername()); + redisCache.setCacheSet(userSessionsKey,tokenInfo.getTokenValue()); + redisCache.expire(userSessionsKey,expire); + } + + /** + * 获取Refresh Token信息 + */ + public RefreshTokenInfo getRefreshTokenInfo(String token) { + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, token); + Map cacheMap = redisCache.getCacheMap(key); + if(cacheMap!=null){ + return RefreshTokenInfo.fromMap(cacheMap); + } + return null; + } + + /** + * 更新Refresh Token最后使用时间 + */ + public void updateRefreshToken(RefreshTokenInfo tokenInfo) { + if(tokenInfo==null){ + return; + } + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, tokenInfo.getTokenValue()); + redisCache.setCacheMap(key,tokenInfo.toUpdateMap()); + } + + /** + * 作废 删除 + * @param tokenInfo + */ + public void revokeRefreshToken(RefreshTokenInfo tokenInfo) { + if(tokenInfo==null){ + return; + } + String key = String.format(CacheConstants.REFRESH_TOKEN_KEY, tokenInfo.getTokenValue()); + String userSessionsKey = String.format(CacheConstants.USER_SESSIONS, tokenInfo.getUsername()); + redisCache.deleteCacheSetValue(userSessionsKey,tokenInfo.getTokenValue()); + redisCache.deleteObject(key); + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/TokenService.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/TokenService.java new file mode 100644 index 0000000..d2c3776 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/service/TokenService.java @@ -0,0 +1,240 @@ +package org.lingniu.sdk.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.lingniu.sdk.model.token.AccessTokenInfo; +import org.lingniu.sdk.model.token.RefreshTokenInfo; +import org.lingniu.sdk.model.token.TokenInfo; +import org.lingniu.sdk.model.user.UserInfo; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.OAuth2AuthorizationContext; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.RefreshTokenOAuth2AuthorizedClientProvider; +import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; +import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.core.OAuth2Token; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.security.web.authentication.rememberme.InvalidCookieException; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.time.Clock; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.*; + +@Component +@Slf4j +public class TokenService { + private final ObjectMapper objectMapper; + // 令牌有效期(默认30分钟)单位分钟 + @Value("${token.accessToken.expireTime:30}") + private int accessTokenExpireTime; + // 刷新令牌有效期(默认24小时) 单位小时 + @Value("${token.refreshToken.expireTime:168}") + private int refreshTokenExpireTime; + @Value("${token.header:Authorization}") + private String tokenHeader; + private final RedisRefreshTokenService refreshTokenService; + + private final RedisAccessTokenService accessTokenService; + + + private final RedisOAuth2AuthorizedClientService redisOAuth2AuthorizedClientService; + public TokenService(RedisRefreshTokenService refreshTokenService, RedisAccessTokenService accessTokenService, RedisOAuth2AuthorizedClientService redisOAuth2AuthorizedClientService, ObjectMapper objectMapper) { + this.refreshTokenService = refreshTokenService; + this.accessTokenService = accessTokenService; + this.redisOAuth2AuthorizedClientService = redisOAuth2AuthorizedClientService; + this.objectMapper = objectMapper; + } + + public TokenInfo createToken(String username) throws JsonProcessingException { + String accessToken = UUID.randomUUID().toString().replace("-", ""); + String refreshToken = UUID.randomUUID().toString().replace("-", ""); + Instant issuedAt = Instant.now(); + Instant accessExpiresAt = issuedAt.plusSeconds(accessTokenExpireTime * 60L); + Instant refreshExpiresAt = issuedAt.plus(refreshTokenExpireTime, ChronoUnit.HOURS); + AccessTokenInfo accessTokenInfo = AccessTokenInfo.builder() + .tokenValue(accessToken) + .username(username) + .issuedAt(issuedAt) + .expiresAt(accessExpiresAt) + .refreshTokenId(refreshToken) + .build(); + RefreshTokenInfo refreshTokenInfo = RefreshTokenInfo.builder() + .tokenValue(refreshToken) + .username(username) + .accessToken(accessToken) + .createdAt(issuedAt) + .lastUsedAt(refreshExpiresAt) + .accessTokenCount(1) + .usageCount(0) + .build(); + return new TokenInfo(accessTokenInfo,refreshTokenInfo); + } + public void storeTokenInfo(TokenInfo tokenInfo){ + accessTokenService.storeAccessToken(tokenInfo.getAccessTokenInfo()); + + refreshTokenService.storeRefreshToken(tokenInfo.getRefreshTokenInfo()); + } + public void setAccessTokenHeader(HttpServletResponse response,String accessToken){ + response.addHeader(tokenHeader,accessToken); + + } + + public void setRefreshTokenCookie(HttpServletResponse response, TokenInfo tokenInfo) { + String refreshToken = tokenInfo.getRefreshTokenInfo().getTokenValue(); +// Cookie cookie = new Cookie("refresh_token", refreshToken); +// cookie.setHttpOnly(true); +// cookie.setSecure(true); // 生产环境设为true +// cookie.setPath("/"); +// cookie.setMaxAge(refreshTokenExpireTime * 60 * 60); +// cookie.setDomain(".lingniu.com"); // 设置域名 + + // 添加SameSite属性 + response.addHeader("Set-Cookie", + String.format("app_refresh_token=%s; HttpOnly; Secure; Path=/; Max-Age=%d; SameSite=Strict", + refreshToken, refreshTokenExpireTime * 60 * 60)); + } + public String getCookieRefreshToken(HttpServletRequest request){ + Cookie[] cookies = request.getCookies(); + return Arrays.stream(cookies) + .filter(cookie -> "app_refresh_token".equals(cookie.getName())) + .map(Cookie::getValue) + .findFirst() + .orElse(null); + } + public boolean validateAccessToken(HttpServletRequest request){ + String accessToken = request.getHeader(tokenHeader); + return accessTokenService.validateAccessToken(accessToken); + } + + public AccessTokenInfo getAccessTokenInfo(HttpServletRequest request){ + String accessToken = request.getHeader(tokenHeader); + return accessTokenService.getAccessTokenInfo(accessToken); + } + public RefreshTokenInfo getRefreshTokenInfo(HttpServletRequest request){ + String accessToken = getCookieRefreshToken(request); + return refreshTokenService.getRefreshTokenInfo(accessToken); + } + + public AccessTokenInfo refreshToken(HttpServletRequest request,HttpServletResponse response) throws IOException { + String accessToken = request.getHeader(tokenHeader); + String cookieRefreshToken = getCookieRefreshToken(request); + RefreshTokenInfo refreshTokenInfo = refreshTokenService.getRefreshTokenInfo(cookieRefreshToken); + if(refreshTokenInfo == null || !refreshTokenInfo.isValid()){ + log.error("token 已刷新"); + return null; + } + if(refreshTokenInfo.getAccessToken()!=null && !refreshTokenInfo.getAccessToken().equals(accessToken)){ + log.error("token 已刷新"); + } + String clientRegistrationId = refreshTokenInfo.getClientRegistrationId(); + String username = refreshTokenInfo.getUsername(); + OAuth2AuthorizedClient oAuth2AuthorizedClient = redisOAuth2AuthorizedClientService.loadAuthorizedClient(clientRegistrationId, username); + if(oAuth2AuthorizedClient==null){ + log.error("idp client is expire"); + return null; + } + if(hasTokenExpired(oAuth2AuthorizedClient.getAccessToken())){ + RefreshTokenOAuth2AuthorizedClientProvider refreshTokenOAuth2AuthorizedClientProvider = new RefreshTokenOAuth2AuthorizedClientProvider(); + OAuth2AuthorizationContext oAuth2AuthorizationContext = OAuth2AuthorizationContext.withAuthorizedClient(oAuth2AuthorizedClient).principal(createAuthentication(username)).build(); + oAuth2AuthorizedClient = refreshTokenOAuth2AuthorizedClientProvider.authorize(oAuth2AuthorizationContext); + redisOAuth2AuthorizedClientService.saveAuthorizedClient(oAuth2AuthorizedClient,createAuthentication(username)); + } + if(oAuth2AuthorizedClient==null){ + log.error("idp client is expire"); + return null; + } + DefaultOAuth2UserService defaultOAuth2UserService = new DefaultOAuth2UserService(); + + OAuth2UserRequest oAuth2UserRequest = new OAuth2UserRequest(oAuth2AuthorizedClient.getClientRegistration(),oAuth2AuthorizedClient.getAccessToken()); + + OAuth2User oAuth2User = defaultOAuth2UserService.loadUser(oAuth2UserRequest); + String s = objectMapper.writeValueAsString(oAuth2User.getAttributes()); + + String accessTokenNew = UUID.randomUUID().toString().replace("-", ""); + Instant issuedAt = Instant.now(); + Instant accessExpiresAt = issuedAt.plusSeconds(accessTokenExpireTime * 60L); + AccessTokenInfo accessTokenInfo = AccessTokenInfo.builder() + .tokenValue(accessTokenNew) + .username(refreshTokenInfo.getUsername()) + .username(refreshTokenInfo.getUsername()) + .issuedAt(issuedAt) + .expiresAt(accessExpiresAt) + .additionalInfo(s) + .clientRegistrationId(refreshTokenInfo.getClientRegistrationId()) + .refreshTokenId(refreshTokenInfo.getTokenValue()) + .build(); + accessTokenService.storeAccessToken(accessTokenInfo); + + refreshTokenInfo.incrementUsage(); + refreshTokenInfo.incrementAccessTokenUsage(accessTokenNew); + refreshTokenService.updateRefreshToken(refreshTokenInfo); + setAccessTokenHeader(response,accessTokenNew); + return accessTokenInfo; + } + + public UserInfo convertPrincipal(AccessTokenInfo accessTokenInfo) throws JsonProcessingException { + return objectMapper.convertValue(objectMapper.readValue(accessTokenInfo.getAdditionalInfo(), Map.class), UserInfo.class); + } + public void revokeToken(HttpServletRequest request,HttpServletResponse response){ + String accessToken = request.getHeader(tokenHeader); + String cookieRefreshToken = getCookieRefreshToken(request); + AccessTokenInfo accessTokenInfo = accessTokenService.getAccessTokenInfo(accessToken); + RefreshTokenInfo refreshTokenInfo = refreshTokenService.getRefreshTokenInfo(cookieRefreshToken); + Instant now = Instant.now(); + if(accessTokenInfo!=null){ + accessTokenService.revokeAccessToken(accessTokenInfo); + } + if(refreshTokenInfo!=null){ + refreshTokenService.revokeRefreshToken(refreshTokenInfo); + } + clearRefreshTokenCookie(response); + } + public void clearToken(HttpServletRequest request){ + RefreshTokenInfo refreshTokenInfo = getRefreshTokenInfo(request); + AccessTokenInfo accessTokenInfo = getAccessTokenInfo(request); + accessTokenService.revokeAccessToken(accessTokenInfo); + refreshTokenService.revokeRefreshToken(refreshTokenInfo); + if(refreshTokenInfo!=null){ + AccessTokenInfo accessTokenInfo1 = accessTokenService.getAccessTokenInfo(refreshTokenInfo.getAccessToken()); + accessTokenService.revokeAccessToken(accessTokenInfo1); + } +// redisOAuth2AuthorizedClientService.removeAuthorizedClient(refreshTokenInfo.getClientRegistrationId(),refreshTokenInfo.getUsername()); + } + + public void clearRefreshTokenCookie(HttpServletResponse response) { + Cookie cookie = new Cookie("refresh_token", null); + cookie.setHttpOnly(true); + cookie.setSecure(true); + cookie.setPath("/"); + cookie.setMaxAge(0); + + response.addCookie(cookie); + } + private final Duration clockSkew = Duration.ofSeconds(60); + + private final Clock clock = Clock.systemUTC(); + private boolean hasTokenExpired(OAuth2Token token) { + return this.clock.instant().isAfter(Objects.requireNonNull(token.getExpiresAt()).minus(this.clockSkew)); + } + private Authentication createAuthentication(String principalName) { + return new UsernamePasswordAuthenticationToken( + principalName, + null, + Collections.emptyList() + ); + } +} diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/utils/HttpClientUtils.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/utils/HttpClientUtils.java new file mode 100644 index 0000000..020f8cc --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/utils/HttpClientUtils.java @@ -0,0 +1,111 @@ +package org.lingniu.sdk.utils; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +public class HttpClientUtils { + + private static final HttpClient DEFAULT_CLIENT = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(10)) + .version(HttpClient.Version.HTTP_2) + .build(); + + // GET请求 + public static String get(String url, Map headers) throws Exception { + HttpRequest.Builder builder = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET(); + + if (headers != null) { + headers.forEach(builder::header); + } + + HttpRequest request = builder.build(); + + HttpResponse response = DEFAULT_CLIENT.send( + request, + HttpResponse.BodyHandlers.ofString() + ); + + if (response.statusCode() >= 200 && response.statusCode() < 300) { + return response.body(); + } else { + throw new RuntimeException("HTTP Error: " + response.statusCode()); + } + } + + // POST请求 + public static String post(String url, String body, Map headers) + throws Exception { + HttpRequest.Builder builder = HttpRequest.newBuilder() + .uri(URI.create(url)) + .POST(HttpRequest.BodyPublishers.ofString(body)); + + if (headers != null) { + headers.forEach(builder::header); + } + + HttpRequest request = builder.build(); + + HttpResponse response = DEFAULT_CLIENT.send( + request, + HttpResponse.BodyHandlers.ofString() + ); + + if (response.statusCode() >= 200 && response.statusCode() < 300) { + return response.body(); + } else { + throw new RuntimeException("HTTP Error: " + response.statusCode()); + } + } + + // POST JSON请求 + public static String postJson(String url, String json) throws Exception { + return post(url, json, Map.of( + "Content-Type", "application/json", + "Accept", "application/json" + )); + } + + // 异步GET请求 + public static CompletableFuture getAsync(String url) { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + return DEFAULT_CLIENT.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(response -> { + if (response.statusCode() >= 200 && response.statusCode() < 300) { + return response.body(); + } else { + throw new RuntimeException("HTTP Error: " + response.statusCode()); + } + }); + } + + // 测试示例 + public static void main(String[] args) { + try { + // 同步GET + String response = get( + "https://jsonplaceholder.typicode.com/posts/1", + Map.of("User-Agent", "Java Client") + ); + System.out.println("GET Response: " + response); + + // 异步GET + getAsync("https://jsonplaceholder.typicode.com/posts/2") + .thenAccept(r -> System.out.println("Async Response: " + r)) + .join(); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/web/UserController.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/web/UserController.java new file mode 100644 index 0000000..c3e3630 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/web/UserController.java @@ -0,0 +1,41 @@ +package org.lingniu.sdk.web; + +import com.alibaba.fastjson2.JSON; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.lingniu.sdk.model.base.CommonResult; +import org.lingniu.sdk.model.user.UserInfo; +import org.lingniu.sdk.utils.HttpClientUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RequestMapping("/idp") +@RestController +public class UserController { + + private final OAuth2ClientProperties oAuth2ClientProperties; + private final ObjectMapper objectMapper; + + public UserController(OAuth2ClientProperties oAuth2ClientProperties, ObjectMapper objectMapper) { + this.oAuth2ClientProperties = oAuth2ClientProperties; + this.objectMapper = objectMapper; + } + + @GetMapping("/routes") + public CommonResult getUserMenu(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient oAuth2AuthorizedClient) throws Exception { + OAuth2AccessToken.TokenType tokenType = oAuth2AuthorizedClient.getAccessToken().getTokenType(); + String tokenValue = oAuth2AuthorizedClient.getAccessToken().getTokenValue(); + + String s = HttpClientUtils.get(oAuth2ClientProperties.getProvider().get("idp").getUserInfoUri().replace("userinfo","idp/getRouters"), + Map.of("Authorization",tokenType.getValue() + " " + tokenValue,"Accept","application/json")); + return CommonResult.success(objectMapper.readValue(s,Map.class).get("data")); + } +} diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/common/redis/RedisCache.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/common/redis/RedisCache.class new file mode 100644 index 0000000000000000000000000000000000000000..04eba5ec9229eeeec188e6538cbd8fe77262ca01 GIT binary patch literal 8580 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 YT28e1^0oN#wJ={LmmNp)xyp(B9|;r+$^ZZW literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/common/serializer/FastJson2JsonRedisSerializer.class new file mode 100644 index 0000000000000000000000000000000000000000..6c65e8b50250e69df6e7649e08422519784b65f1 GIT binary patch literal 2779 zcmbtWT~`}b6x}xoOcI8VrY!}OmbOp=DU5BkwhcuHO$r#GB?E|2@g^ByAk45PgIXSZ z^~s;$f1p$?OKl%@Eq|2Db7zJySqX^xGI!>lx##S&&)5C)uV3B*c#NGW0tiY7$!J0| zL&p~XiYsMqY$ywbEv;xXG>_?qZjUnr<3r04gb|StmC*v3VcfJfl(KGY82X-4DQzo7 zb7#jil!|8QysYnQmXhHWd$wX4cg15-E9sS7Rmjj(Ec5++h6~vf!&7BmsU#(|F~muq zLW&B!z?F5N5(sNm!bVhIy1SH zRoAAbCl_;Rm9V)74Bb?Uo7}2swld|e$tbSknuI)Et;f1ie3(cafkAJ zNzIHrh~ggJm+*m%`}mNd%gOl$yfaAarsXE@XahGqD-BLk&OF2;2}v1ac+7C4zCewN z%?-*G(|w@~h>0{_TbZ6w)7hDvx|UNZSQqm?vOM~t_y`jcCS{~B#n5+pb-1)pE%H6v zRA20BZg3gq;tli;oe~Ct%OiNw)05JO8Eu*yrLtyGuA~_r3Lh)Gq6*h7D)_HWYg;LC zn=6)RH~wZ+*MA~8eZz1%2t%jOVJADrR5dxCWVqxHftxo&%M76@vqascJ*ykq{N7GM zvs7Lv(@rdF7I}G@QxBwXZ!=_X>csU#wmu^NrezYG&RX?Eu4f|sKXo7b+g<0cD-ljd zs;!-X`2X{=ojL{sqp=b5vFXWZgbZ#e<_PpNtwn`qA5vx=geDABH;HC#tUccCdYV;Gv{WUWT@Zk}1T?ocH!y|F4` zo8kUHm3e=|;$*noaGz#Um@XX*PY^`6m~M0v=@LVO)_}NIkSyc8KShY%n=noLGqh8n zH9%{0_%+yY;wMNi=_`m?dbZID(iK84A~dr;rms%-Z)7n?Uv$pXK3^kSsLGyJEkC2T z=U612!tS?(LD=n0`~fNWTlgRmdV|*0;33*`N4R*1?w`?nKtF_hP;S!K0J%EogVI}t z(u*8aGI9b%$XqBwwnVaJ(ij8_W5rR;@QKIErzFhdGY{SOWJvfvnD`yx#M>Xx#14MN z)zt*ydX1ZNw}*d(bckEQHyA#`?Gv0aItYvqT?!F%hps&L9ISn=x+>N|e2y>3e{Hw5$MI{*Lx literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/JacksonConfiguration.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/JacksonConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..611f212a20167d02fd44d64f5e595776ee9b1ea5 GIT binary patch literal 5682 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 literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/SecurityConfig.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/config/SecurityConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..843740892825bda11ad2c4401888a17d246dc15c GIT binary patch literal 10219 zcmc&)d0-q>8UMXpn{20TniepHV#PGH31y)aL_-U0D7GPOLXxJm2s+uFB-3nmmf6{a zA|i^Sl*1b@R76F*QOOpHVigqy6cz9LzVG`)e(%l9?(Al=n>Mljk<9GOd*A!M-*>$4 z``$eC_`&-DY!J($s6urFH5zJBC(yW8pU`7TJv9>R8QN>a9f7)Y%#`VD6sTUkX0QSE zXow)HVF5IORhB&xOPZ;Xl$niX5@WHrl^QljV*N%uYn#r#PW4k@Y0?@oQ~lX^+{k3M z>ZwH1um#q3mrfsbU&Xqo5ATpmFVe6WjRGsJO<8Ajo&0Cn=9NaGGie$rr_V@R8Pl=s zeF7IL;+eEf?uKoB+?cfNu~^1qEN1DFKrF82#U_oRSWg9#ih(8#OR-GgB-==sneZw7 zhCN}%4S{o}$(M0o#ri7FR;wMW;W#`=Ky$1yBbBGyIwReIz&J%=xrXC$g1~W9fR%N& zCDNrzIDHzifD*!{D7q(VcrsQBES5Ofw3ED2*UU&y3LO~Q(L@V8NyAgoBG3@eW*lpr zsuWna+NCk0?mQ#w^rzSzQMBUZ2v%!YgEoP!(yl5^*HbCW(H+xDDfJI!&1Ax`GqJ6X zllJXbpeCNNhXt-$t;DKCGr-d9WS9*T1d0YHMO>@lR4Lyv(s-5OOJ@6w%dx1wuy%#O`~T#}D7G_03=EO5O@dFuk4g{MVuwuYxmg`PSa6%@$Q#wSf@ z^n7Dj&nBIWT%<$8IdYLD#uafRE%l^qjP4u(qmf!5DBrM|bPPL26PJ$6Xkf;bb}vxR zqu7A+WRTk=ux2_qzGD_S(3-&rIt2#GiXuaYR7YXK*iKSQG2-;CK8}47Z`STl#U2? z3aqaPs_%oY;GLtonTlYSKzrCssRb{VlUrxN7*8j4$B1GO)luxhB@sMJ!=<=v26YZu zmLt_@xv?c{8#8ScZp?T0n_k;W8@6K_8T!JA;qdo_$sj_b^##v5W-_*2Pj}SgIov|c zM0x>+5RV|C!2l!6LWPe%j6+CApj8@xuV@dqP$)+QE)4@@t^&3AvP3b0y&A@lq>qxf zuF0`}!`W$@rP}RxQBjH( zbY1u!Q)1eM8I@dr4#Hn4{rI`eU@C3JW!4~y&%@ObJYT~#c!5AqSrolJy(CWMy^;Ge zcNwN5ohqZGf6}&=xq+uNqq!{{$Gp*nL~NIkw?r|$N+=&b;{@hfyeNVfYq$YRlF@f@9IjZS8I3;ZV_0{ZFo4 zLM1tG_FhqIuhZ~)yn(e^sem%?QU&E*71UQOUASZ(v7;r{t$0%eZ`SY@+$M1K|K49) zq$SDHsK{Gge->EbL#y8U1u1h0=87Y18cbCHSQ<>}tfPWtIkD&+x8rRQyj{aPWb%Fe z98vZWG=jxtAtDyDvRzNDzt+xW^PB=d(;hY%ZF%L^8?fj&%W@2sPIH=;NW%qq%F z>)Ob4fQYrFC#ru*3_@+2DqwE_AbSe2OHML4yAe?==I+@GYZtKfa_6)Q{9Mah0_j)oB z93pt�?#{R|Xl6|6bW^^ON0qug1zCm)u=WY5LZk(Gc?%1PK($KbPDtwGLkYbl z#4}pfv&|9?tUua6DF|ppEtb#urWbt5&rgt+>l^j-lCVP8KinbRr?RFDS+u;MX9(<@ zv!I?a99{vZ(5UyTJ%Nc(1s(?6N5(~Yc-9Gw%ojXm^JlpQ)VUG}B<2ZaM>PJOa`=`pSlVNx+4673qxcbi9KlaC{1iXqDPAF; zF;f#ftc`W6O_VeAVYWfk$@KzaRrvKtu#grj`+8H@E;AI#)FM`aB(d|1L}p)@CiK7 zhzIzfMn0(3@OeDih(~#pvn`b}Y;}YvPp|6z;~w_cWWM3caY<%crka9s~iA^KH}QgvvO z-^K8*Nq(oIuKZj?UHKu0y7F@jb>-(1yw>w*zZUQ1|M&6Noum@swYBX4L|gk5B5kKk zVPV_aDJ*Ggu9?CyZOye)Xl`q+o5G3@a%2_W&;KWp4tQE#!$a-{Y{Vj*%gQ3@2WoVTjxIo6-R{8M>Y05jvb*;LSeAkiR58=Zc z<#Ju4#&@+JBofGB)j_n&>nUvq5tBFT?!lQkJmWrW*xhzFjyZsHn>Ocg{y{Rtx7#?Z zTi$Hn)t*D|Aq?Ebm0ZbMDUam44%;YI7dhI2lymVc- z8&l*IoR`A^QoM)vHGFa}?&F=5;v>AWj>kv&R?0HLtCYRvJ`Cln zGr&({mGoM^mHb@5cTy|Sb^_O&!&SQqT3@6%y_kC0%~dZ}D;?{O&aV{3C-EtW#;6Pp z9?dg2MxxTtrquGn07(f62&*&}%^if#;IjakVzBWDBt52D+NrshO3htQ?jkw7>=5?z zZeb3u;$=w=uMN<4LF%Om_E43*G_8whoP7kTH^6!jq(|^MvR)-)mbdaoZ)F9?iX7e; zpzreD6QC6h!0-ipQNh3%>d`ujS1GO5mcv^Q;f@^coJOrXfP{uG<0~9rgRk;`6~3mF z*23Rk=kIUu$v5}lTllv8_Z?FH?j;a$s`-0-`+fdxq>=o9D*HKpi9dLEf5KnAyT9R| z-rc|OxOewoQRUu=YEdU-U|2^QBiJMO5gw1IQ=)+`ek=BiD3;)Mu|O>3^$uPaF=1LP JmWZWjeggi;bw&UH literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/constant/CacheConstants.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/constant/CacheConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..01ad05ff543e38f01545f55cf0a85cc7ba31ac78 GIT binary patch literal 667 zcma))O;6iE5Qg6kftWPmBLN!v1sqTd2P|<66bV^IL|91`hp0VS8?z(}W{vDM|BDk6 z2YvuQs$$j(!t~V3$j{pI%pjT*EBp7?!U19k(N{#&&OXB|^lm1?fE?eK6SoGGQGJ9Zq`_k%(2%aRIN9%aHpouSEZZv!5NB25DwUklaVCgJKk;kobjjn%>uL+js! zAWKD(XD#>LlfLVpzV%_D$*^KF5^8uD6iT-l%1(SC7#2OLL^rz`iDbY>5uG%= zIONfgC(`iru&gJNZoK3D=d@{zRX@&>P@G63ZN6W|o*6r~P@#o`mc5R7RKf6psDv8v zLV*{FmkZn=UMcV@@y7zU$i&PqMDY_D?VPF3?gQ9;Ug9%F^BS=5g<>s#p2b&uBVyQ~ HSir5IY{gMyORgk0 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 literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/handler/LoginSuccessHandler.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/handler/LoginSuccessHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..6f5e34566404ce81d75462c84bb22e316edd0d50 GIT binary patch literal 4093 zcmb7H`B&6d6#gE<1je{cwG_L!>wsXatyO2#R#7W0N((q@Pq&bHKp>NhNd~ohYZtrk zyWRKghxXKI?GHWuxqnnozn2U+3?ssUlS$rk?|1M0?tS1jKL%ckzAtf-NbOuGAn1_9{ zAWwV#xDiOJ0IThuows5c2js9>a>70iC_zcI zVx^Ajaf84@;!|Ti?yx7YcRuhU`I9o${%jIAVU>o}I@VyVKxTeWt3?U45LmZk+J!)1 z8DT|4EQPjXFnrXs4C{4lz(#>JT&beq`Sv3+-yOxOUyj&8=tqI-$qOu>ln_yQAXM?D zkTlvgbm-WOPLg*XMKUZe5=mMf|r+$5#?T-S(VuBz)lUjbYzef z*ifs#?k>7PIX_D42t!OGqe7!AX|377KK zn^SA|DMB34aTI+5i-V9ET?L{eJ)>AwJ85cVwmq`?ULF04Y>Q}7G#Bw!X&BUT3^^u< z^5W$<9+qZaRn*&+BgaiYG+7k=2}g#;Xc!ia!+Z?H1N|~6dTt=IRn(v49+lsW6FN@f zK7kcfQEgtP>2O%$$R1xtiUibgdo@)tCV^&__NaCVbj)E}rOq+Q&1p@az_!^L zQxCO3o2Lw^*FXv!n_Zx%0L;5DWiVS*r(5Yo56n%+tgR$PCag-Awj|D{sUD4GE^eG_ zo3T{9u(~4>5Ts^Ps2Y7%jTscJf4B);JDun(=oPYWpAKgCOqEq5mF(Y3Ymx`gShA>k zi9o~G>;a;_lQpBKZ)!%vw*sqcX;wK7r&dwcfLHP@dB|2Nd0m|=&=w_}MCdQ^R#A{S zJFuCq`&`#!304pkFYD$5Yq0b}nyacPDa_+0i#5C%H9+7wK2z#K#w%S)U6lB%#+&d0 zpXd2?Qr+_SyQJd}h>pz{p>=d##G+rLg)j1%LL;B6_*{(^3SNx0c!?vc<862uukeck zA~hmLllW>G}uDGL3DGWnA+QS~E>;O=Yx|abqT-#@1!Dj^DAU zEm6j%Ofz3KHQ!an)=W!VOBuJdHJ7nFe$&d>uig%}@vSFX%dcMb(iyENx9BkS_BP(3?gYNWyLgYzUy4sCY`M8Ss)? zSCKB(n&rrGWEd_a>kPJv%`S;%Qw9tZB}X;*nh3QFo;5taA)L)n`Mf5ysJecwg(5j# zFy8xY^y54k(rQ!sWf^R_j%2u1It(RDw)pCSbA?`{alyhx8w0q+aI>9D484vgMGzZe z$Y)9$Vp9ZKaO1+0n%A{%@&y_U99meBzeO_Cg>1$6yKLhM-e(w$t*pqkK!)|$*sM~U zE`gtD$7I-4ekjSNg&~GfgFI{ol>4i~>&7jH&d00s6Zeg; zjE$^ubkW?di$FM3>N($0H9FpdapWyb*ti4EaO1?F;^b-l9_wXS>+7ezwsENi!1MFiPpWsu59s*WwneNCGvlX-XnT^j;pv`rup9C&Jrut>F zNxZJ&k0{vIMxh&%3|5#By%*E?!orMA&GjY2?ZX6XsG9V6RfLkyszyWkD>95cYO~3M z$xM2$kUc``6RuOBUt!L|yp6B1z%YJ_t|EGGn+PjOdd6BfD99x6!hs_1;UW%x!?1W< zxkBkgWbQfNmQ^kyT_?Ki@z0A@p(PH7m7$V3l@=UH&9VKStuS=VQqCFrORg^;MvbZr zRz=mLm2^ot!mEhDHUF)}4qbPNWOt9)e}}XYS^AZq=w2%{hTq$1>_jWt5S5k!9LxOu zv^y%0eCDmZQ&SQ_gG7`V42#>-FNSW?s#tdza&25|AtbGMyYdY8PLG<1Irq$wO(R{Q zg&!C$#BxK-EH3ZwSon!yKblw#q6B969fr$`76JKHV`67_O{DMB0X|xS>nT znDKo@0%2g7G#tx%QV6Lu$)ag%${4Y}fa~;LrNB_6F>PK3%XMAvp#xy!;9H8+MdN7DST*gCM8A+~T8IS0X48(3&{AC;& zH{W7~X5;1$I&JJs=l;gI@g2Np=KKx@^XaR*xRydbJ+_P6H2;O%4nEk$M=8)5E5D2T z)G!bJ!PE|B-@qD%MdpSm&a32Xm_S`4NF&H&6jSuV7>K#VvAMU_+^druxY<*$iRBW;gE6Lir8; z8a-NzAN&FRQ6BGPL&`Y~hxX)TH#76heeQFgm%RG#pML=?;pY)#Fkm5TV-Q0E<4w6Q z9bX0wXS3E+t`-=&=LMd=FEEfVRC5?c&ccX|QP=|4!>Hl-UeE}<#EI*B&aMpVzKWbJ zRrexZUrW~lcG!X2knOgL1QyC}*m8DctX1^9L85hPwTd`L1%LNu&stM&JgIr_gtwx;x!36iU~|wn6hym(*pUX+>?=( zPOPGRU+ENMjX;%jV@t*DFo>1FSgiDN7-$t}121qsUw$o6MH?=qLUkA)2n;^mUR}6r zd|kBhp>Z^2Ztu!Sx(sq9aKk#ybNC1!TlmDrWn2-sc4|-^LR#u17RYQq5|}N&g>7ks z_}6TFidjGF$8n*f=E>4M z1&9QeaNoi=HonCJfw^}mT!E1TBV{$s!)%ua)l3!c7k<^kvcRo=xsH{a5bn@9P_cMF#ks#={ob)z<#P-Jd`=>ZDdad(zvpT?wZ$M%d-l1pYnGGRXpQ+ JhJcX`6ZjVz5zc1Hr~=mQym82YGC1#?g#S zNSCDPl5TWgQo8(De&L6_Z>nOt_vKP6>1j4lQ>Q=K%``(J!DCB8T=T z4AtC`Vuvkc@DP`kr7wL6sTfWtj^behk68E&jtM*_!3CSr$!it6>|FON8@aVG+{~Tl z&thnY)j%M1aZcdz$dONwr4vW-sD;NcK&H0rQkCq}hkO^FzzG9`7KSh^uy0p17_LbC z;x&Q(!F;QDNe4$PjN&ADShYjD(Zh=?>rNpYH}P2kbm1vHZQvOTpTp;C_Nt*<$|*5= zm3CgQ+9ftlBqJGXNiY|W481J##>x9+`CE;T=AVH#%z%!2KmlgMP+wuW&EGt#fKa@lzcc|5O@{cOZZV+P0QrSW+S z3oBJ#APnYxe!A-Xw7?l>T zx!h)%%T+IQ%g(YJxXh+Ap69cUb0=_abiUx1bJy%3bSiI@OSyHsuo3uP&fXEqJGu8%PamyZr1UfiXA$uRHhFOMZ3!g zYUgt6%E=;QLpbL82A`sbWxa$cFG~+7H(p9@?Ffq5*Y=c12@x z$BZVTQ?pZzt9CT3&YDqYo$%GxTd^bgFffcW*E?(p1q% zUDu*ttrVOYSJt&-s2BgcW;p!3o#=)nIQLKkdTL@N)ydkd^tD0t5BE z;CfsBhLcnHRI#413!z`RA@E)@rDH**^t|n@mYiT<-uE}Eo8t-iabyxB4GWi8hgyig zl8~=OE-@6Vn6^u$MK^SKvj3VlmZbB8GLn;G8Q7!t7Z9`kOxWCwv07`Vmj z%P!|z`DEaC0+0NEQKpt60LOX$o`S%O(C`pm!pm&G!ZRg>SNZV17PWaHi{8AqaQ@3t z`zo(_oxD%JMmd`!=lSNX1=jFg2tLL(_WX(c4y^Du9nFoRASIL>R^hOBtzo3dp3=V- zY43@(Z}Q#2xdVSg>ZK2`cVT4see55}zK=sAbt`@J0(cT8uTI@~8hv;svUp6bjs2k( zxb%qE2x5^aQadQr$T~+9iVdPDp&X-lhwl_EJQ|~z&;A8R?&A119w(YCA!W0DIbzDz zG4=D#4_={6jM4r$?M~nrKMEuh{Ysm>53*-+PNESJn)=+;ow;?+DO?_L@fOFv!G2H7g^-s!N=YqesY7ZphyRNG+xUW9pN!s2V!a8!DSC2b zohvr^$Y{ULHxJ<*?Mt!tZsx}LEg0HuXdTjomVh{yFwwosgdCA30zNuYdrpfcYy9wt zeK`|b(}zF6)SoGzbfh<7Mc-vbjz}vZAL&SyZ&paQ6-{;3q^TZfmEng!g=&7iwNQPi zS@px8LN)Kz^jrovi8_&;3ia`}RIAL}Y9i)3-iXo9^DTErdYIdCe{0fJR;OdqCBd@B zsEk*2LC)=_{|4S{W#v%2R%8YHWGi36S7W-ClfGozwW8{ytY~#Vr7zOYQCuYg#o^bQ zIOK66Uv+TdUQM-WJ0_Z71aTj*|#~?fng@tH`vlJiy6Gbmd+2k)A%M^X%^Vy_!e6R z%f%6Vn=La@0&m6%q4X9>klg=SScdr@^cYBejD7>B_-Bfbaac7wlg$RUHTjLI*v1?q zA~RN(G&h$!<)sQ_txCwc^A_k^m;Ag5bB2M$2rjaYX;}hCs6u6_k<7*6?*_*u$ zWArZOUX$a-m?kGOT0CRQV5+IvF+G}M9HT{MMvtbBwhqmdG8l)Z1DEj~yi3qJF7bqU zmw>wH`*-O`2mhbrDSVGD4O2LT@3W=voQ4D)lP@X1j`Tf>Xrx>S(##LfdsI;GbNC+j zvtARZ$!Lv3u~<4GR+nrZrEo*|1b(nnE?=N^d0-usq)Gz$%x>ethgbxf%V)CaAB>r) q-#z3=bJfw}-TFh^q>&VUgdg*5(&SJ0{0i@}*TvRv@LT*Ing0PKOf&ib literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/AccessTokenInfo$AccessTokenInfoBuilder.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/AccessTokenInfo$AccessTokenInfoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..8f6056a5b519e943401f59fa67dad31d276efea4 GIT binary patch literal 3089 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 literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/RefreshTokenInfo$RefreshTokenInfoBuilder.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/RefreshTokenInfo$RefreshTokenInfoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..bc88f941978f5f07daf5b6e9b33ba9596a56b8f9 GIT binary patch literal 3513 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 literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/TokenInfo$TokenInfoBuilder.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/token/TokenInfo$TokenInfoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..b1968f4db6b01fd984dc34dcddaa6f900d70a73d GIT binary patch literal 2060 zcmbVN3r`b45dOA8uhc395yU4dU<=CmesG`yi9%8_0fI3mCfjzQN3Xl&Zrg-^;?K|o zqtV14;EyuSwrA-p7bKV4-J6^FW_D)w+uwhF`~t9umr2BM%0gcX{fIN9_jrxl9+$iJ z+x(s=XomQLD_#AZ;Z!EOJ%9uTEF@DnjTFOULD2lca3>dqwbZWem^jX+Fo-n8?28>=1f>?Rxk#{$4t>YM zFvC=o|0Z@4Ll`m1I?wPi6X~Wi=1AqPn6leRjNyWX@f0rNQd?;@wNE)`uxi|^inluq z)0tdn<(zDbsA1s@Q_-)aa23}W#wxrlR+KDo{m#`TS_PU*9WXp?1q&^^v3kHWT-vBg z?N-E^ths@k_r#KvN^|WJI>T_zQ_g(WH3j1`)H6cbOvstaK&Le-j|5vr_$vu^#J$0A-*-`(5C1*%(s;XZQuUu1(v(2o|8C9}h7lB??0dYinSt%W8pYOjBx}=K1U>x_8 zcz}l%9+`f7%rJT6z?C)P2D{;>(SomdK`Z}&;Ztk#g^CT(RW6I32qtq%m8<(scfc)@ zHp8uhebGbxLyLZc?Ane@2(iLFZ`0MnN#H5N(oqtctB}+(9hA1nZclVF(;~|fHgDw zm4?rx7DFf0D9K1Agfgq{n29!!=>>Y`*r45;rc;EO5Of}W^&O>uV(9(MAq9JgGv9Eo zcgT(1r+e;x7Pmvp=QNuvjTpS|7&VYI{lH})3U{OjZa?nSlQ-9vYr8HR!d;pZ2 XPwL+#_S#$l8Xpp1ryH$SnH#(a)svfQ|z= zDA2oZ`Z3o8vLmA{&Bqqd`XLI>sDQ zUMAwCj#J1A9N08A%vskd8vY&2r(MVM4afHc&eeiND;u#!8;2y3iiURu`T`CuH@jq( zEyK3HF;;DcmG*+}idpt7*STG|EFf+ObnO^lk@2W>Qho#jTn)2dAh!px)!b{SoIDFB zB(-PGa?FLw=Bim<4*fa2SaE!7(=0gKmS@q$i;m;^hEM0nL+_mJZmzl;*=wd_mJQ!r zBUbO6TQuwygJDrW!cqK^#RVr@rd`!ViQ+ZM+o_S3>*HxVy230ZPCTasPPYb%FUU(I z;mX+JsZUo`*Dsl6ZmEoM*r-1TSfjyolkq^k9IJGJfl$A3qHD=FiW~FBR>Y}#Yq2nY zg^m?ie>`3)w$B7=G_-HH5i8}pJ2leB#MzB1%4UK4ttpCg-Ew1^^4YQER?0>5swMNj zySn$Mq%Q)U3#RAKn=%!dH|a~R>wA9L*qS%}lDp>hB*A0u9zNIbg)GisOSk5-@ ziEJ24Six6~qVJZ!7WlTdb|b|Q^t$1!*`_x<=eiq}t$ZUXH6wKkm%rXJo2cKb(cd|n zYlb3-S;MxMEZ@wh@PNl-m4}g7B29~lq4+*di%|i+;IQ~+ZNu|SNmUggx)?RA@z!e~ zr&-Jzcv23wR%Nb*1mP$T`$N2SPb0zhJ)EKZK98j~oaK*~Z6NakWZQ{$oWpsJ=hz!! zD?h1UAnra#;s?qCdHyHaf|urnNS+R6c#}mdvz(V2>ex@vrF8w({W7R*AeF5Y&Bw+#>c*gsyrG09jWi2CZ3G{hSdDT*fZ=4x)k~sCis_ACjUTZ zMtO;SkD*UylxN87Xbk35sto3m8CB{eU!wOhx-x1exuc{!p{+#C=7daK4}GXIQNk5m zrPuvf!ZmJK8!!6HxX!TzFZCG|C@GvdiW`(v%;PXVrj*1S@rU@ZOZ|gx4XIZc&~S*~ zlz4@Mq1ax}h9aL&5gX@eQ|_87X^^h|-=?WmS5>+pU9Hb3zDpv=zu3x~IhW2~P^JSK zkEHV@l9)=5KZZ8>4DURUxD@@fH zwz44mWWYb;gp7~P3rqmYn#Rg({CESzc{*JSeywWX=liuvN%|z^9Z_Z13{-B@Fg@ Rxr$F$tnvsf!o)f<{{ciH<$eGF literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/DataPermission.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/DataPermission.class new file mode 100644 index 0000000000000000000000000000000000000000..75279f4bb48ac2f7cf6135ececf56ff8b3678be7 GIT binary patch literal 3399 zcma)8TUQfT6#gceNkSMPprEO=^#YcQIK9|f3D_ctqT!-ZY_Y8lVSs_j44s)^ef3wg zed$|y@u6L-+Abfu+84W4e^agf&ddZRAzIcVoU`}YXP<9>d+&4R?|+~D4qzNxEl41l zhO9zCO2VMyu4$HOui0i*^Hw&sinC%^TGcaLZA$m`1;eeFo@Y9?gp6)k&Vvcdk{~S! zKN%G*!b!%lt%oJUS{2Gx6)M`OTrsx%qUre(I*J?mwysru)6z!UsrV=(>)OGv~+t-n_u2A%6?&RNf`I2ID(@RvZhBs5vt@sxcG*O zW6|P#giP#tQ^i|&TSDua;ZN;?>l_$tfS1JyoJ`}CiavoS7l4mJkdQJ2z5w-U74HbA z89JQ^Lpgy#6+;-Na$WbKvDRmpPD--qx+EF~2I|bhFT7 zY=k=sUCinSD$e0U2}dgWrZMT*W!=AH`aIY6eBJgv38Mo`OZ)fk*F;PNu|@|7GR~{` z7#A4!m}#5-#UPkP2`wda&DQ;@%kWOsb2zr&_r-z)Ipm_FXxheHwX$ruxAbL;+q;TR zS+^E-*A#N3l>K#+;D?I`u2CLw>}J*W&5AK&Z=0S;XA`#V_`1&urmwD|O+0FRSUP4@tSp0 z6v9JB;1H$8K6FG(jRne>6vtmTTnTN0!@j*%Y!CD?MK&-9nvn3r)ktb9`FeSCR^N*9 zp)A~-nZ3+IXIKiZ;Z-g6c1z4xsxR7^@ts;lAFh!bFDmwJ$*HYnHm( z_NMJTu#;>biJf@KaeU8r^{rXMUw2l#jugsStiVWPRdg3yvu}@O)82MA4J`~YY`AH? z>^ts53E#&1HZlyIUe)at%kcV&j1_6n0@VTjHx0Qlf1M` zrf(E7FeMb~nI7O`aCeSNXO7n{aWStIjF<;G9hU|rs53UZX429<&+yXV1>L`olxDG} z!Pn!h*PF7WLSlH|B=`elj(npyONeJC82Pe**I6(xP|qhMCW|>=1?tCWp;3}JDnq|O zdK_#S=l@io?7&6N)zAQ+;8RKy(ds3RyhxflN;f*{{9i|WbCBGJDEkvnN$^FkAv)B= zQ5fiC12VohO&qp2I_y5M!zo;jI2+}d5RitBJ%RLd1H^3Lu_v^MNE7fymZS!d)6IRR z59(87ywT?sT#W)R?&2JNf~@eFj8XY2oMH9M&^k#KaiL`GxQXlfyhbs8UB6{YZUSn z@-?A%j#BTaJn|P>^YU|a?m!*M%TIBIl1S;(<8h|+`}#0CSC_It4Nmmib%92Bj=#o2+dI`Tqd+MUj~R literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserDept.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserDept.class new file mode 100644 index 0000000000000000000000000000000000000000..09a63e545d7f8405bcd89c78a3569386e0c8223e GIT binary patch literal 4957 zcmbVQTXP&o89lw)-I-m@N^9A2JlL4X-heK41~52iWCa}gCbP1IWy{3jlF@1`jkTIl zW@eo@-0u)BNqB+cfk#|Lxr$2>rz%CI$V;f=nJ0MSSMY){r{}UeyIxBwY|r-BU!U(x z_t&Q{p@5>mQO{p9nvT2XIxQnu-7q%2Rl8}l0^2vP@#l=a z6$%trSh@`G|k`uGBPqutj)PV^Nlah0goQp}Ok3HHEAgMu@JWf6@0DYb8J7NMG<-_>HhZp4+g(>rP0J z%iOymr~UP8nxnk+<}p)GI=-zZ&BnH%geW^_?WELjR>L`*=lq;{+zT zn%?G$w_%*OUE8-pdzB%jprhoyk4(tKGW9`3s!OViwT!yDmP(r1Bq$YCOwp0>{_Jbg zIg@XaeTfwp+p*4=P_KKBNS35P!3)=IpZqdSHMvd51*t{ecC`{UrhAaUP~6;c#DLCz zk^nM}h#|9K4aXE2Ps|~EAeT}5B^^iH#ds%bcQLKTja(PpliH1GwZb$sHWsX{L=%O@ zEAtCynH7q%=-WZ7$(>kf54Tk7jI31a45D1ibhi}2Tv>Qq-eWx0F@ni~=m%NtW zu+KSC?Ui)ze_E~v0X-4iav!-pQ*U^i#!V{-ZU2?crg4j-2t3!Y+L|;jvOd4&dcM8r zdt0_2I(9%!R-DLp&E0Ulm)(JQ;Z&dVyf6rTYiq#{*S*zXxQOqS@qPS2!4KtL^CN*; zXQOr8+unw4#G{C}pL14&=gl2~UuFfE0Atb%mb==tgIeA5HdT}~WlqlMKn)`~tq% zub+E%%PALXFXxx~_j7c&oO03ka(=l#=YidF$_=EKlehAC?70gp_i$4fo0|L$3i*3e z?;-aq6b9~1{RO#&W0UuBFsjn{(4}MiG4sd&ia|a9KK9&&c3jWj$I%oqZWag`H;Z~f zVv6r$H@Dl&R{91gQx~(bWvdFiQj(W?3&uP&omW^l}Dt!W<;%gsJI+ z5~L*{S{cwuvqI2Gb4ag9&`<)Z=tCLMv^h-Bv{}`MC8(N!hV^O+%HN})2Oe2w_u}NG z%S?>nMOaMtsL-&&tyi7|573}*fZOiBu}UkC^Y{mBS_Pg6f5%N)MKtji)@Uj4@jI;3 zQt>9VGh#Aol?K71a1o6%Xi*%+mjBcI_;A`AM0qu4$%2?p6gUEt$o~ZB~Ue zi_FUk``as8erUy%xj(Wjlj*(c%&GirB+WzBnRNomqd3-HewqM6LSPrtg-{kYH8~8RQ2TDrdyL?{5PgpC{`YGl1CiMRS>&Bp7 literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserInfo.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..7cdeafc779ef48105a007b63988c2b5f253600a0 GIT binary patch literal 8028 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 HA4&T!OR=PM literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserPost.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/model/user/UserPost.class new file mode 100644 index 0000000000000000000000000000000000000000..a3bd049fab571afb00bc0ed5f455f4af7e8ef9d4 GIT binary patch literal 4018 zcma)9YjfLF8h(x=S+=9J!EH+2mTYN5H*p%wE_bJacGC+kPAN?rpyj4GB2i;YL6QsQ zHp2|Fv$K3*Kf&w|*nTN9FhH4Mc6QkP05kjnegOQ8h4LI7$(9|{q*M94=RME+=)9M6 zUgd{hzxfY5iJj&CQ^6h&#@W<8c#J%rczE9M=h-5a4E)49p4aj$-b3l||cktfuppwcKP~jj|*; zU9$ba@!U(blLF$bz)0f7lGSY6I=z+ugn*`Eu(R&C_PKUz+4e6gqGH`^kjEk$iDRV} zt~rduef4b|3hsLUg|-_yExYDka{`AnCtTNKD!4PU6zff|wd}1|&e*Q)TcN!|lYG!E zyj`2ZJ+;KLh!JYzJ*6B6E{&4a(6v#ewR#PG$8qp)*D`{@|qQdw*O|US-HyX2A*57Iu%km%Xw|p^?duh?`_zA=-2@( zWWB2+aLro@c4qN<0X_l)p*+`Zfr;)d<+#_pb-SXx zP)Gf=)d)TRy1*yt>WG1g^eM|-Y1+X=-SgJl8?&1aaZ1x;c=7s%Jpg_sg->qblq#l} zx0=mGC$wjCcthZL65~l#d2{0E!KAAsvdmW^%bZGCh{Ffn&&GAD+OIl#er68Jyt5)*8udi_yrY7me(5(a0vo zaVKrqj)?a!ElISd+j)|%qGctbV>8~I@r<6fA+J%T| zk3z)JmYI-g6@789V}UrCz#dLxyPUE_`Z>=H<{aKGr!2RA&S!9b&^~u;ms6H*Kj*W9 z_gUO7r#uGzoc!Wa`xM`D9AR94oG$+hx^{E=zsUR(`q0g3t}Gla-@;flrBFI|ls{E% z=6ej6wC`}&4VW_}?H2Ay5QnNdA&08jk}fgX?@+vfk&<4@ra(uk20=%vxsoA4xfo=W zaw$-`nkT4SEtK*SRER8e@^^@y-Lh)E%uxg zO@5}w75F$ElBZ9XDV1^fy~C$>;-J%e8He6WkKekAQvA#@N2U))XOC%fQAr#aon2!= zLsd;Kl(cvyC(A@F9jWTk5-TJ!%9ZqFsa(xQOWDp6>qc44RE=nf zB@pR9s>HCg}UNZL){lAqqnyB zhl#4KRA>GgkM-Ye<`!K?gA*0_RUSw1kO>}4{;72tE<7r7oNVy9hBrBr*Wq=%jdxM{ E4Qd|*C;$Ke literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisAccessTokenService.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisAccessTokenService.class new file mode 100644 index 0000000000000000000000000000000000000000..a8c6f914620e543382d8f4897232c8ce5a201aad GIT binary patch literal 3379 zcmb7HSyLQU6#gzVq+#d~LRg|%B$$LHA)QUL5QzjKk`NLZB#R4ah6{9<=^ncqNZj{* z_rigbH4MP@0@%2{nk&v0Jsky zrBH^1fuxCYtP-fXWY5}G)^;bY(_@!pCKOn8#BrUlOCZtOHd4-A{Hw01L<&^~OcSe7 zEns>6q?L8tN!OXNg7Il9kp8Tbk=BqLcY^LrMh3yKH!a8P5$u+YPNAJ2NGF;@3NDN$&zxfedvZ?Raa6 zOrt~#k=jNSqFp8|>=rOdb?@c8a4Es8A! zs+FI-mzhdSN@ZM&^@Q4Y(8M7XDB*f@D#=b0M{pmDBXv}Ph7yoZv|TW8l*(GHdhg|o z%!iKWs*-e@IEEfN&3cmpwYnBTc4Ge}YrvbFlzwLgsO9xHzxnv)i(f_ZYSMzb`T4a! zu76R5<9N_Ozljq#N$IFk7H?;vr0;vaKzj*rMZy`L^1V5GEGs(|tF1U?Vi2d9+>{-h zlvh~C68no~cFgm#(ss%4Ll`oUHZhEc7Z}!4Ahuwo#v>GIn;v_8s*eFDAn&hk*C2VD>)_7Y42gNS`bcq`>ah6@G44 zp|%l{9}NjTn$|_KC>}eEBZ$4es3Qwwg1=Sj<0U#$I{sH|PL^razO_Z3<70=Mrb9b3 zO%cW{t(#R%!8$I@(cC3 zXQ}Ctm1v7r;zO>h)4)4SLQmF(=HbNg*!CO6EF7LV04Lf`nenUU?5q8K~n5gn_Oq?syp&`KhS=jFcq#v=El5y8uQXzGK@V)X;gIFfV?WM(rZ#jY~UWSrq!%hBOYY! z`&o^XMHDm_qBj?!*TvBrNx|!QgDBsm7bW6o<*k?$*6lAe>AJqnAKzV2HC;xGH0}5e z$!i6?OQb!I$IhybiE0)BO%wJo_l}?eXDQBeMKm=PfHuVQjzmiPHA!v}@V{}A{G6<$ct literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository$1.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8b87ccafd98779ff2d4b7651517aa0e8df2186fa GIT binary patch literal 1073 zcmbtT+invv5FMwXxirvFN-1|9@{k6BDUYNLDiNqiX)7gF-yQEHapKs)_7=ilfrOBF z-~;$5#CTIAgg^piS39>Io$-v%eEa_8D*)`n{SxG0r2zQ~T!K{w&#fDBt<2D21D zJ-Txxk#{js{^TGHqo+|=r`}`I)(TDN;>>y#tee+%8LWnp^0g-f)maLwS%xB%3Q(@V z8dMlOl6J}m!UuHkrkan1oOo-vv<`Wg&yb&z=;8n!8i{m{J!MpAF<7bZoH2M&U-CE+ zB;U3PL9cg|!Q*t=M|Udvnj#w=D}_E2PDTGBn2(cSaIjqA+HR9Usi%fUgw#>3LFd0F zvDX=kbHUS~G(Qrv3s(y>vZFRP36OA|laiuL>~wm5KNif^rpbe5@8 zVZPu^1R??}DT1;l4q_r)5E$c^sm@f#5LhE+YbKc zrJ?y2j|uD0`oN&_+8A_gExbn$4`?Tgw4SV5jawNl`qtnw=__Ql=zorMx$*E5u*PR7 zd>}6e>m*mR+-FcFdux#eS7C!Z%Foak$!p~0U=yxqdJArl&cim`g1cE{8}5-V6IQH4 F&kq&)M%(}Z literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisOAuth2AuthorizedClientRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..adf8f3e39f5c61c9009168af8c0bb3ce32d9c84d GIT binary patch literal 11722 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 C;7KR| literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisRefreshTokenService.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/RedisRefreshTokenService.class new file mode 100644 index 0000000000000000000000000000000000000000..a1d9d8f2846faf2fb5d59a3c89745cd4a5089f9a GIT binary patch literal 3190 zcmb7GTT>KA6#g0(mdhXt2vMV=s9Xd`@qz-PNI*d@hDA_JLWZST26ksQGqb3<-}988 zkmtN=B_UL*lE7~&J_r_;O z1;j)g`vux}J50KcA6QOcj#$YxITF43RcN3qE1O;N!XQh5iqe1DuR#+I#?fq`1#bv+ z?{=7RS7h4M)(z)Od;7(atfdl!3a)F&TxkRfDbjHzT;4HdJR-mMJfm&Y%I*@jJszjz?qJ>DE z^9s>9118Q37^HgiN!F%BhRM{yJg~sdNOL@_I>GhgVjPzYT*eim*R?3N5ZI^uWZmRi zLQ*U%TCfvp-&F(GRG@OleXNokFffSgERNJs1)57hp6Fbx!i`8f4=T*(1<#W%#+e$vQfqOr@Vg-_(71o4-Ioua$WHZS? zYPd`|>YD$V^`i2$VBi5BQVyY~{P;OoDs66fgm>b2*T8#N5@=DK;HOtFt(%i>DkZ%! zD;c=nQ-Nw$CtMOZUF>QkZTUX?ZTHRr)o+%8WhAMXw3`xW*lQ$kWH#q0{f#@Dwr?+| z<*?(pffXo)s4ZzXv+Qn|x1}RJ(zP-ma46a`Ut+`6Fh*9*l~s>YdhB`|=CZUL-&_ro zF|9%bb2t~ckJ&NGZC!pCMx@6^IN1d1Cv8Vg=Q7LEo3n^d=aID1^Ok3;_h>N|tl0$I ztK+}U1ZU&}K1r6v!&Bfw#~x3w6j$dwi=?M;IC#&!-gee#L$b~ddz*=V!v@!5r7<)p z9vRG_UUhaNYV5npQC%Xik{eWa#7`pyRGeXm@>a2w^3D6Y$T^C6R0&ii)sd!KwSL#6 zT`f9WO%zaeU4k_4Le-1Cp21EnS=@7d^R2d@nCn4JN4( zeI2MtxH&H=$8067qyKfzpHra(x->WbE_wTb^rRawCv(KjWL-x(!2nM>btwVLdAhO- zA+W-?N=h||e z|HD}Ih;ejoD67yGX=L~&;J^+2h(=zK;#>>P{)O1{h6AzRQTDL>>=qgm+c-4U^)rrl z^Q~RW;l09KL1tn&LOe&&jN{~^7477uo4?MZjrY1UxWkdUh)$%?1)nFn%58|85Py`L z`jy28%&wVJ)T31yy-aa6$5`F;Fi2Ko^l})R{91{}++ByViWlgM<8U0kF>Zc>ry)W3 zfq-H(Ia%OlhnOwgo+cMnJ=?hZOgy7iOsCV#J-`J9>g7G{B9pqrWUgqqU7@!E+>`i_ zFnG|jR3Y3J)Z!z2Ot_!Wiz;2X@+nso*jk8x(5kV1#*bg*Ye`2HGy&RPUCSBPa)vf_U;`W=QZJ31L(pXzVcLl6%1#0UetO^f>SV0_L7I6F+Q8rW>$8Lp8D^2u-`j}nN zQrg1&!Vbh^TA|~FI6=>oggC{TPLtFbs^VS|twRN&{g=V&`>9s jg8Hj&sM*HiPk3L&7rLCP=fDD$;cGt2@J*plzXkpU*487N literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/TokenService.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/service/TokenService.class new file mode 100644 index 0000000000000000000000000000000000000000..642839ba2c9da4233528a978d17600bffa393f30 GIT binary patch literal 15526 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 IjIHGVKkOw-B>(^b literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/utils/HttpClientUtils.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/utils/HttpClientUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..0978ae28639d95680564a1ba5ed6a727254591ac GIT binary patch literal 6993 zcmb_hd3+Sr9sj<~CbL;4Bw0crfDj}??&XlG37`-X2n``62cm6pvKf+v&F(roi>CK| zANIC)wFf<|+7^@8s=chW_OPd|_P$ShpKAMkZ)TI(WOl`V>SIO(S81P_7}Y zV+nMDIyF6M+R+KyPDl6i&tdb*teN4uaMHYLPd1(yGcAGh8k_nG&TVj~b%wDNl^Uva zR3jpw&#f3f+)G1ZmTB0gz`2c%EM?}PZN-!0ogVR=+_?lbSgxT~#|o?zSU)Fep`AJ1 zbT4bg1-7}erB70jM{c2|O4%wMt0f{O`?`n1I0tJrtkY4C^#avOdDf06Tud_pOD)0_ zx6J-jvOk+h2yFEFig}|C8fgLTc*^QFViWV|7nIaABGGTt(T=D<>8Rv@ zz&XVj&{>Wx*s5Whj`OjdbV*s`(FEg~jAx^nv6E4$ETj0P%#ayRcV7w~ij{ zBUXz|%E@H*W^BXGX1Y>iOgLtKuUy=#;{cvWi$@8NKurz}FGDpP%qt@fbQ%uj6spOG zvq?KXX?9;N8B8WdAn+s|hcPIyV$wKil9w^VJ`%SlBtvZ@X)_Yb8+%;`y{R8YKZa%f z8j&-6N&~Cbr8uhLG8y{I1seSvS5-?zejq!Vh-W5L?05Rf^9_d2dQ}*nqT{JJM$85d z4U(Y!MWURqJ(vD|)iqbOIzup6Ckc_wq-YzON}D0Xh`*6eC*lN9Ci#g>Dj5R9Shiag z44LWUIwrt!7f2l!IO=uMtvwzXAHy4Okzv_j5^TXq9SKYlfOJZ33;Vpv+~Vy~miI=L z7%9g$>N}Crk;at*+jhG>m5#?)0or4!$*2rpCb}hrXR|sCXH2VY z_c%cb;kg1!4zO*gcM6)M*YhR4ULdgD8|;ES@>-i?&5Lxr7%ySz88=CqJUM4gk#f8Y zFW2x29k0Zz@{7_`#x}{xl2n$`mplB6r=kPwC2Yz!jY)>K1lP!t^qK{`v#Z~ildr?; zHM~K`8)Y$CrXrg!mOE)$DoHRUuYGLLZ7BD{oWwE)Q<`@Gc?1-sgch+;c+JMPf%X&s-zXN&0`;V#ELf_uaMp`n3e zTiM?E>~1bp?qucJ=XKnPFObcrauRy{3h#oIXJNX8?TfN^yjx&Rk-)Kq3p(9NWnVmL z_Gc$YO>0P&X2z^96*Ceeh834%_hrzYh%;Q9`p&Aiq<9_(*qBEaZ%*`j!ZcVQDX!A_ ztP)MuE`C!DuRQc@@PX1j9?j8?^W{-MotRb^o=>?U%We3Gi|<6Y%M+;0cb`px3&Hk$ zV|O@1Z!fj@%`U3mTtuIb5V@p6bOvFD=IEa-Zt;f0^lW%j?a2 zH{gA{*vH3DUr6qf2iR~4Po%~&m1X!_ z7=OnForiyQ^cNioyV zmr9+?rrjR1K-BXV%68p5{p>$FDvPi6GRu|RWh4@Vaog;y!b7ZtUXKblXCsy6ctoD) z|I6zQA-GjI#ZREuE5L0$d}!so%G<6MR>3M!vcR6g;zlaVL}^%*2~86r_GhA;JN%+} zI_uej@DS9Ki|DmpgY(dS++yh3?adJv+G6nti6u-SxdqpETUN^Is25dOPe+%s=M$AW z{(uLo@L)*rR;-dYO!c{pkrPGDf^%<9p+u@y3Rt1zcNnR{NJy+=TB^R$D}qPJUUnW< zSHj3-Oy;;YcX6kC??N=OE_Ys85YEL{5zHUYQZ_eoG=H?##D)TQFg^!qVw1O;2D-h7 zCN}Z5Xi@b25>pdR0&9y;CApm}#(MVJ0k(s@wUAd*{8i51yd&k`FL4y*Q}9{Zd<(=) z{1L!C{3}0$UFVniS9d1hEBGo$E03%=bLKn zyYW`^A9cUYVgR@WL$_0HP?@@w27+lF#B%VixAWP74H)79 z;TSe5x6XG=$JcN#*V74n9p9j<5g7O;zC|F~(T#88J9M%G7vVm9mpZ=3nY9X0Isbmn zcfLKqZ{O#)Y6Kp_CJi+Y;{pvKjkird;OihKp2iRPD}WynL*68~7@p5(8Q)KNF>IN} zkr_NWfc{qE*xI%L$2NsyN030)1zjXd>q@;yx&sGE4!lS@-wGkwMq}GiL1xsFJFAFa z3-Q|~Zykw3C!d#K2QK5e#Kgr4$z6^Eb4X6{cI{q8nkj{8fRbVg(-O+*QJ4lP#lf`H zgQ=W!B4qVlDeA)1^BFPZi!qG8I6oZMyGLn8Yga4 z0hlLvx3b@fXZ4)@)%cmRe?D;K^04X(KgEDa;UxS5(yOTSF(?cl*`1t)1s=Xm&1+o? zjVlil;eK-U5ZN-oi~Yl7F6);OQI_sy}`9*TjUv$ zXGNYfjpt3{g|y(MEwgyF)cxAXo2K#RS-f2i-gO4=IdU4IzLqoiz)dPZ&1fSpOH?AY zGv9$Lh}|faTtNzqp$_9rn+X~i=Y9GlXP+cF5+p@Z8C%b_75s04`xId9bnI97wUWFI zzrk-QPX75wd?zVpS)e8=^r6a!X=l^ABRI^t2fUFE&w234KQ|2O(05pv+) zrqSA&pPQ&!F_ q?GoppT&(4@p5sgTem%!@Ks0bX!~Zms^KR$!yi4lDM$ssmQTIO`CBY#8 literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/web/UserController.class b/sdk/backend/oauth2-login-sdk/target/classes/org/lingniu/sdk/web/UserController.class new file mode 100644 index 0000000000000000000000000000000000000000..7ca9ec6e30ae746275a04d4d972f4558ebc6cd57 GIT binary patch literal 3870 zcmcgvTX)n{6#h;bn&}YQG9XxPLMhM-5JeDVpjrk>(H5{bKtMf{Ii04>BtvpiDBe-= ze)qwjp=(J+9$YLR{ZTIW$z-M(8d&XO>BHo5W}m&kZ)e}m-~ZhI6Tk`lltB|#X-Mf< zjb?`S89v7in>!`rd|^hIlA-yyy-@Ka!QUB7=Cfq zxFHJ0gfG0j>qyVFZQ(I&bO!=CeK2oZ!jTs|w<0`g37=tdSZ((!9x0gecv;+Vy;-B+ zy3*i*bWPWpvPyv`3}2XmXUTcPrS<89h8e0d&L`^4DU7W;+R)CRyCI7aULmUt`-e@p zY)o-q3h!pwHfFdv>${Fon5OXkad%cY4E^0biC$Qu*Cjtx3CH#m#HZ1rVY7}c*vfEhSr8Ldk*^3_h-!Sk zA{d6A2w7KMQ;2c9j%TogVQtOEB)0=HvVn{&hTND`p+Fltu}edjj@{V9FrGx}Nuz{e z4MCx3oU@85GS=0A1k$n%3V>W1-4ydyv9boe=+m%I$9^0j3L)N_7>SS`hCSUe9@W&z z#i>P08lGji_FoX{s&UD{z(F0)D|f4KQ|WltnQ|vQD~-bp>3|k2T1evvNf1GUq(CExMI6(R({UUp8p=WS+c0RJsMy@3Z+9wAIX}(4F>yT*jwy06S2V209TI)(G+rW? z))IwF%XKmsz)1~x9j6qBQ%T-hUV1DBA<-t1VbEo%@D1uXgCT}ZWj-sYR+(I0wB$5B z`I0-5YSYm;xd>~FR70)9xWLflPBC1L z+lm4uW@`m25uRFbQYMXJOvAVe-3f->%9ZhQtpt5zNXkmJKuxH3hQo0{4dm;Z6PRak z5tlSv*6}*7F!ZgU)H1Yqf)}HraO9EZ!^V`ix$h?>R~pwCQmU3`@Fw2Uz;zU0GVFbr zciAlp+bD2f7Mk`&I>lJWQSdo+mqb0)O)m;lG7GNKvxJp9x6*aJCRg1RMnRe;RFm$ zGUX+?8t>k<%&)ab`mW3OaWq*xtb-w+==+rcp_r7aM_0Sy;PNykw${ZmL@vvON~1{6 z#?m~>GX_Tf&z!!g3J8@9Ujw;z{bG}>|3d)BtdheejYtf)|5xW9j{%R8qo2rij0TRh z%3{*;EsCiD$8lv?_=wV>L=UR43MVgKmo?4^sU|Qr3NWmmt4<1<;i(oyiaHyOT;OVS zq~_IN?NXw(M?^r(_NXXXYC06fXxMsagi~K|%ndwK3|cCQ);CVO2h?|>?vZFciR-B9 znSP9K%Ak(CG7Y|59JdKy`$?Lhed+Pah@kni=(jcFlML?QQw^V~#`ihp_hLL*&K!lg zQ4POpFC65ibiH|opW{U^609m6;!e>PKGg|#HmJlqenY`;sOvwu8~wde(91z@eIgijJ20;7L8dHWO+1j=J9x&Ph}>{J^mN@uJk= ztGuz3&KgZLP&Cm|flfs9lvM|haD`$QMKB0@yR42`bZ_hZ9jv$SF0|f#cd_=@P;iQ_ zS)}N?g|1uCf^BHUc9dvkM|B&fVbL2Y2+gqYNf~M)12dQJ2QU`!T=r1*g#{eV_U~K3%lq%+G@&?~ef1tj?%}m#DcZ8O zBbDu4z~lq;X0L`j@8OMKNPiO)=FMoPYbUv27a`e=1K5Lpy63Ss#D1uXrH=h7Y?KLa z8sl)_l9qN1qk`+iF^>*-^pt{6I#VPiF&A38ftz%1rImU5-MT{c5pUxiTGOaj;@wdE zy-@W1P&7-5Kd6g-h}-nvNAye6+Q;ZJr>C#Uut6lgA-8{v@9`r#{so@H Bt=#|s literal 0 HcmV?d00001 diff --git a/sdk/backend/oauth2-login-sdk/target/maven-archiver/pom.properties b/sdk/backend/oauth2-login-sdk/target/maven-archiver/pom.properties new file mode 100644 index 0000000..e41e776 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Sun Feb 08 09:46:13 CST 2026 +groupId=org.lingniu +artifactId=oauth2-login-sdk +version=1.0-SNAPSHOT diff --git a/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..9f9d485 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,30 @@ +org\lingniu\sdk\model\token\AccessTokenInfo.class +org\lingniu\sdk\service\RedisRefreshTokenService.class +org\lingniu\sdk\constant\UserConstants.class +org\lingniu\sdk\model\token\TokenInfo.class +org\lingniu\sdk\common\redis\RedisCache.class +org\lingniu\sdk\model\base\CommonResult.class +org\lingniu\sdk\model\user\UserPost.class +org\lingniu\sdk\service\RedisOAuth2AuthorizedClientService.class +org\lingniu\sdk\constant\CacheConstants.class +org\lingniu\sdk\service\RedisOAuth2AuthorizedClientRepository$1.class +org\lingniu\sdk\service\RedisAccessTokenService.class +org\lingniu\sdk\model\user\DataPermission.class +org\lingniu\sdk\service\RedisOAuth2AuthorizedClientRepository.class +org\lingniu\sdk\web\UserController.class +org\lingniu\sdk\model\user\UserInfo.class +org\lingniu\sdk\utils\HttpClientUtils.class +org\lingniu\sdk\handler\LoginSuccessHandler.class +org\lingniu\sdk\model\token\TokenInfo$TokenInfoBuilder.class +org\lingniu\sdk\constant\Constants.class +org\lingniu\sdk\service\TokenService.class +org\lingniu\sdk\model\user\UserDept.class +org\lingniu\sdk\model\token\AccessTokenInfo$AccessTokenInfoBuilder.class +org\lingniu\sdk\model\token\RefreshTokenInfo$RefreshTokenInfoBuilder.class +org\lingniu\sdk\config\RedisConfig.class +org\lingniu\sdk\config\JacksonConfiguration.class +org\lingniu\sdk\filter\IdpAuthenticationFilter.class +org\lingniu\sdk\common\serializer\FastJson2JsonRedisSerializer.class +org\lingniu\sdk\handler\LogoutIdpSuccessHandler.class +org\lingniu\sdk\model\token\RefreshTokenInfo.class +org\lingniu\sdk\config\SecurityConfig.class diff --git a/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..d2152f9 --- /dev/null +++ b/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,26 @@ +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\constant\CacheConstants.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\user\DataPermission.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\service\TokenService.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\token\TokenInfo.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\utils\HttpClientUtils.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\user\UserInfo.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\service\RedisOAuth2AuthorizedClientService.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\constant\Constants.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\service\RedisAccessTokenService.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\config\JacksonConfiguration.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\config\RedisConfig.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\base\CommonResult.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\user\UserDept.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\config\SecurityConfig.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\filter\IdpAuthenticationFilter.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\user\UserPost.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\common\redis\RedisCache.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\token\RefreshTokenInfo.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\web\UserController.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\service\RedisOAuth2AuthorizedClientRepository.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\handler\LogoutIdpSuccessHandler.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\service\RedisRefreshTokenService.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\constant\UserConstants.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\handler\LoginSuccessHandler.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\model\token\AccessTokenInfo.java +D:\privateProjects\lingniu-platform\backend\sdk\oauth2-login-sdk\src\main\java\org\lingniu\sdk\common\serializer\FastJson2JsonRedisSerializer.java diff --git a/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/sdk/backend/oauth2-login-sdk/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/sdk/backend/oauth2-login-sdk/target/oauth2-login-sdk-1.0-SNAPSHOT.jar b/sdk/backend/oauth2-login-sdk/target/oauth2-login-sdk-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..6f38072a90e95eedf5a89a7807cdd499b5348aa9 GIT binary patch literal 65432 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%0AXOWfdPy zaimds$()@Gq`6D^vx|tb?5ObVNJc?|hLZ3GY)R9sJkb+sBqUAqcg1NBf%hVmVu~vs zDwdgoNZNxOG+(pwI8djEzvj{)iw;P+3emAqVOfD{wfS(fV6m#Wc92Lxrlv~)HncEo zbAN*?R=-H(x6Y#cP;G_TT-h$e+c~-!!;Cc;Eq`NlAMV$+iCRfKOC9l69gEKnMCnm^lS*Z~U|dU{2j^KLrMB!2RaxvHQkg;|MNu9n>b-bePx%$P zBI(v&88otjU*OT2n_Q)@fRbDVdP{=ScDO%Mmt-5Mneox%78~u5thE)SbSedL(pbk|QNl{GCv7CmIpQmcQpp>$oc!7p*$QiixD8!;gLJ>`jl-fh z;+}g8X9UEglv@lhsrev7UK8M`sQA)Ea6wmuQ~DAqgjB_hJjVot3|a+ znWI&4*QR4sRKMifzTz~ImaayyL#2+cZTrwrETNWm!HY>0bda@>1FdkBI#7?XD!zoO6e2=3A>}&4E8l+=APg%FKc0Tj3NSw*8t(rO z0pfp2qyO{tUo_F24wg%#-z`xF>Ue?JHM1+hevyCa3$8>oL1u7F|&VkW*lqh7bgk z2s;Phn@#PTEGvy(gr%7MPN_`~+(J%-?OTx$ny|t~Z6O!~O^&WI8;PCslv%bt=BdiM zt0k%;1XDEE?UZhdH)po>)@vSn^v*ZhvTavq;GtvEM9cjmkICp_UNAV}N|Ujx4#8UN z;8~Us8)b8Hn5Tvq?eiK1r^2miRa`K7NGp-Ao(v?dg{MP0z&;F{Lf;|t)|O%PFvGuF zCk%bU444zjtF->HWiCx=D0Vq$H2qzRZ8xR_&=`S4>l+$JEEfU))09 zq8gT!#HvRDN17U1)Z*pLD`<0=9gHoMCMt8@bVc@UXda9f8U@VqV#d@I%j3mW_ATs~ zp6iq&mo``G+nsdQbD$H@^#+V|*W7olUfmTWc30)It4cm&c2|_ik1a4`gQx_?$aDYv zh+N2kDlxZ|O~}YnY3S}ROIwrxls}95)N0AoOohD_C@w9-uKf@?^6qTKFlGwf1Jb~B zJw92d=)I476Tt`XK9#lXGftWu;V^pucD#D^P&#{zcF=C@h066^c(VyIZGS7Ul_2`(Ot8HIOVTvi<<)=>aY9tf1r_-&h)vHUf^oH{VFf ze+(=63t`0Tj7Ecc{zB*Mi^WCwg18>*z?H7c3JM8JGmjyg1BF|tQ6lmDbNH5SOHUE*)>6ZYORdPhkuD$84)p;GUfv6Wgi1NIzSZ4C~@K)S?46z;kC z6Io0b7eKX`9Twh|bXm!&^S2#RUB?(LE~WHCy{4F&t!#QoucJ49(MZ})mAM3Nzv}JO zWC6hkN$a}I)VykXTF1>Ie1M+Ujw39qE`1w}SOFpARFlpQsXj#b9FYZGtroRLwzeUw zjtMFc2JYB!9bnbl-FniM~jUNE;>U4^NfR7t^ER&a@)ie zn+=!E%pTo++oc-zONUtoH#|Mc7s=7b-vhf@#4uJtyMfx?pfjf?D>Xa@FSf0&z+!k0 zCAKQkS1@QcUd=tY1gEVu+TIP*M4Q*we)}K@NgWon7_>8$?&7FD145h+xFc(${4YGQ zjRauT`Ux+jGFuL9d6d+4pr{>>a4C&IoD_0b*OJZ0Tn8vPPu4g9Q2TK8~8nCA}HX$~RIz}m; zJpwb|z`Mzf-Khpz?ZVPyu3aNn)`a3Gmo&tJ)fs>aAOFyAmoBM6Dd z1dlJczZ2^;xgWaIlhPymt$C_M#i$a2?4js)ZY7abFV1X6db5Ku8FJ` zwdz8PY@Zme1vQ3POw2nmpqqL1q#dWFqgJ8Irsg66)Dfn#2C3ATBoBK^4g2JtE{j!V z-vu%OZ%{l?o@a6tc*TIxZ7)-Dr3vLp>UfG)W zO{Yoj)ruYBhQEw^B#A4=_DbbNTW_`p9OAeoq>GC5MNt>$mHn7a(0vy1V=;IMk&exE zN$a-=DH{wjfK06>9jY!(u;^U%LO-d(HpY$t-N(Y#?vqXk+2z^gq`h#i(wn{ltR5 zWg4=A>-hNvlq}A{&0ief4XjA`qwpia1PWITwQ%}>NwIc1y9GTi{VlkZ+8Kw2zvNhY zdYN75S#^42TUzJp%o0yj;ULS(@H&~k_MPl@JI?(EeErr(+OP>H00b8Zhy)spy0SVi z)Ui?*R&-jKbQ{(}D%E!M&zZH4qy;N6Xs^`Kgrcy?y!SO(FxH_)B+bu~3MjUi@KQrL z=`e1vn4jVwXRba$g`P7wqqe-jtyBUG{)y}z6|1L(Mx!XT6SZZL%EpBXu}fo1ZFW4! zq$Fi-Yu7CtE{FECb&yEv`kISCJzKB`7Q$EzCu~%}iEg9)zkl8Z^DPV!;0n&|-Fpvb7_tm`Bd(j{=h^NlGEu9mdar*59K5ZWmVR8O6)K=jG@4EQuPZb z*G5G?zj1q;!7B-t6dv5myLwxNfR~E1?xEAf&$x>Ni8d=F-Z!2MNG!RO06G(=1MT5O zgv}zI|B?r@2?F3*0Q(vgGx4x;jvV`cX3!;FMf6T;$g=IIN_s>>J6ekGJK}v)PG4as zTn7`4?4U=Of~6w4U~=6yD7Bt|sbr4^%8=;RTTVRTc61T8OS+F;N#rGsU~W;613kKM-_bHZSDE^9aB>3?;Z4&Z`Fu0>D z#HUa0CyxcmJOT8NSr|V4f<#*i%u!=j!+2+=znhu-0Ht&b{1Y5oP|Ugbv9c(I3OHY= z)-&iCMc=_Q7yT%oRsp|whs>B|!z$5D6i2a%fymcj7C%MtJDd>geoKCDf;f`{k=t9B zK;B3b>zgs@UkCg)bD(f`$sSJE#^!y(xJV-%Y>Hb&7Y`11EO|SRNq3q{9}6;U5z*Hj zPMN(G#Bn-gm`7sr{WXd2b$qUnknPRmSHo)2iB?^GpSR9Pv(8vMCn^_%uS+dtl;|EO z8tNBVaS`(ovI;MM;6>y|*h0_w0kXv_k+iMw<_i-+jktz2=a*CV2 zN>u^uy4zguwsBH^BWtLP69e+i&~Y?avdSPSyb=JqkX4mlZ{hom{O8?eyPUU%#4J%F z`$HDl{YXa%QyaWO?3jA=CMx37&N<<~dGwULA_Pyx2k+*3 zdFYlg3P}oB8c3B4@p}3s+*uq*skV<3FJtaw7@u$%JweReBz&`*_4DtXs(!|F#b)MG zN?)*eY;35PureBbI({Q*C@Oh5ZF&oCcA(D`aseoal@B(C6RnZ?((N`x@Bgi>eM4!| z3-}3g>-+?{DgMvp|38?4!Y20rcZfSjP3u2G++V4L5P={Rnz7acu3M|BnmVU-HknZr z6V*gJr;06BYmNsGNa4X0>iE6C@{mi@9(*O}B;Mv_@!r&DoS7FUn5U&nk}P!RGkBlN zeg4&+N^Lz{81`i$L?}%R0(ed~;=HDPS9QKF|6X@N>qGLb#PaKds%fiK$=>x~)EM84P%?e$jy3`F zzHwaAe9;ce)MXI{;#mG8%k_At1FVWw`VU}`Tr;-Q`Q$YIjy>aJPT zSW+PBg5thWS*6)y!}&yY+#z(93N)wF_|f~ciQU`?bAcp8Fzqzu+>si1if1G)rjl8; zQ6mD~Vf(s5R8Zcrf{&ZDT1J<1Wbg32K4&;L zIcRn4e(7S@=-B5-vjbC23Og6rllW|_72nP>FE+bEQci`TxH4Obl%@(7DT4a=hP2I= zRcGprkSkTxHX7?J3i=rO4Dl+-NUqz~*XN;IlHtxYAJV!)6RuyHCcyARi$Ki#n=9Vy zFZ2tHwQ3B4VVB~;6v0IMVn!g9|JR?4oNU9*n7{yOHLwHQfbrQ?Z3Zqy^e63rj~YCme*X3`RFvHFiu3f14nyUR%oAsf0 zVBHoTbsfnH(0_P~Cm{l-Svjawn>U$##$Y=Wd+#p+k$89A$6_!{J~69TI(7?*iP0^& z_ohJ&e@AX61b$2E3wzEvXT_pUF7ntlZmf9_VPd&|>W)bM_$ch-txMHeam<$Bs)wk3 zC+(SPZmpY&q^ds5yNWiiXo#){Cq^&btJ`sCC|V0hbPSz{t1_kNz8Z|c0#M6dFm0%f zmIQ{dVZ>ZR6VZt1apEb~#W86KrNS;rykjpos|}#29`ZLr>R8t1P57Hg*5-d)1fLCl z@=ab5L2$bN^zwB>Jfk&DzU1`(qSsYEOhTNX@XE>Y0PSL_mUq(@vb80@SY+}4yoNH@ zlENc4Knk|Wr@b}8a->M8Vi9nclEUbrAO$>y!eXu@o}><<3qL0}5>07hPI^gaZ?yuJ z&17K}OC@gBzc*;Bc%tc!ffjnf@zR@$!rtlk&|}&E+Ojo)PMq3O1~ahJlKvtTX3vm0 zp^Y3-li2$r>PhZzGSQOxDTs0W&E}ptbKrO;o4ltQ%LX4l;!f|CXuS((a!FX{Ippl1 z|HdXis}6aN|G!9k=NQZ4uV1rl+tt-&+qP}nwyiGflx^F#ZQHKuE_3RgdndWSH#akr znPlheWdHr$S^KQ@SU%r2_EEY)pZdDJI`vhV{V!gTG?FH0UTH-rlRrib2qZdbnE@K40C{DS=@$)l5}rz8o@60f@Pf8V zTZHZLPGlrzYGxItfs#+gxdu5QKQuvsU=Q?$+jk6^rln3Fzd=IrT*RIG78x}tq{f2fX{(#6B?F`K$0BPme%g#{( z>o`-Bz1tYozG%jQES^H+x1gfv1<_M^TK>1@Q+(IJ(wF`Z`_A$!NvYzAio|Eut@c#V6G{_u zgL)G^tO_8u`Lde|Qn0o#z9-Ondok=euX!QPH(Lo}h4s}Z!9FWf>CRv8yY1$g-v37Y zYkI(di0{PUGV(No;^7ScFszxS!L}!s(4T2>norXnr^IkJ1E{qt(lbY-1#{W4M9wwU zQ&b_&@0lkwN!67eLbm|62V+D9(Gy6)96ul0u+DHw1Y2!H3Jq|Q8LSo7!^MYV;uC7v zN<}s;OaC6SQu4FQ5{DZsD>`^fYSuzI8(b#lz;UsLEKroRlRYO|)FxuAQ>IVH$L4f_ z<#1AL6Wki%?1O3Hv`)~p(^aNTryE#=%^5g)!Z1gy`m(;vuv-Rb;ZUg2d3z))Pi0F~ zPDQ;;&PYwxSfnb@#iut-&w~A21Qq8Ix7F38;JDs-dbk+9#b`H#KTDx`D1JR91{)fRVsX3_>u(oqvea8`M9JfNHcsW^yh>WjUU%!NDxhU*@P3>MLdZ!L8jGyn zgzlHoU}w9V6cZ~jM5nSc?apECfJT)o%nV;5bru;`_c|MTBQxtWLRUMK1W{X2O347f z+r36hh_K})K%!eOleW+TV3^QcCCSO4gJC4V@TXL*&L}hu?0pz(Bq?tM)vTGKj^5lK z-`#0>o|%2m_2lDXNhbG++f~ZW?R$}S1IU%Rp{^9SqB{$(4_pt~_^5oqs5PFg>}Pbk&4 zeIGV6Uv3g}U$8PK>8RPT(A97xPI(^0btSLwQ2xi~O{_EUqi-`?ZavBNwa;fpm5e&R z96RUJ7baVJ>VXiF>?BoIGAuf}3;_QrJpxptrIG>A6KeLylR_hev0_0mLd&&|QS6k9B6GDr zcA`D;F#o+!9KDd-==ye<9lJ&)SnG2g^cXF%ZP`2fOi*NsKGuoVX1L&P%T3@wV9#Hf zfoN^#+!xemWvbI?v(D0|I+;7nr{tdkU?|+ta$#Y){EEqBL3f8%RA3kB%N@6ydWvvQ zAIwgPlRCB;Y$n-~lcAUOSWc=|pgzbD=zkVNJknc0Y8lSTPZ~;cSyNOJ-ezw0>Xe$` z|A7RHcYjI(;V*Eb`6A%YG23BDA162Sud{-dzk~JNYI?I1Q-~!iSxPl7=Tm&-^bgj= zy=TE;8Lnq;2P9oVWSPKmY+IoW4gZ64AoPHk6SjqjA4vj!7-KdF*+0>wJ9~-2p`}bI z)5IcM> zYAYS;)?K^j2sun?uR5&V{AaU=ILoawawsL*8`Qg#acT#+4es_}RZJS>9`yFu!#0q2 z{1dtgrG5j6TiXB{z?4^e;V@0Lq0Gl4y3rP?NTevf+qpEL$%dR zwebI?7?pdL;u>KG|Dc$eYw_M8;t?Hm!c~C4KQ923fO-eZH!v6&g8Lc5txnptEB=SP zDWKTyFY1lfkKBv{)}t}=L!?vPw-M4O#2o^~?jPz2F4@N~9|;=PxM#8kcsM@Tg+;y* z67wr3q@V;6DwmVP4+b8rp>dpJIA?F#Q}G~9)EFl+P!4{asr3a4bE<%U#{FM5)__Ld zzFflaaFMyu?kxPF^(~;%MH7C-aj1o}6y%I6?Js+Dc>a|EhY048wy?!%=w*hf&lu08fY&K=$?=cGc1FDccuU#hY<8VYKl<9pqK%5#YlmO z$G%mC#6A=4y-NzwgncfaNF})3Z|GeCN(A+vfEtz*vOy+y(dm71AqAT3Q@tzJjnsb?~f8Ba~+dk zh!Q#VAlVC}l~4< zVf5d^WF$0-RJ@~2+=M434#Q|}vadcNnZMDMhgf5dNbM4-$i`Xm$HdzywHQTp7d7}s zWa}d-PcmYU4!6*1(++CRHTe2vBO)pHGvtm;?GmZU(lgm0Q~QKtTSNRaHK}!ia`Skn z67Q4&8NX%joQCgy;2QpMhYUS=PH_LM37Jz zw=Sr#xjY0jbmBEgZX}}k?X!K5K5=dxXnzIdQJ6PTic+do0wEas&NHQuz|~4TbDieQ z9oSlVrw8=S$A7+l8V8mmV3x1p4)8>{d9<(9TIHMwxf>KDuIY33kk5Pa{OESTsTrtM zL>>;uynp8QK+m4o0W#)#_N#afZz%GGRn@d1Ch;Aew7}I4JZ3Auu+1XW4=A!dLmhfqVmk1mTwN z?FKq<@AM|Xd_)AkBi>&VurxlhJ+tg9{o+u;ERRF;8mA%OtVlR+AI z-gv#gFQSDiYGo^}b`3}}H-?roqp1dZjUTBs%kYh{x}yTmq5zYl1b!ajcy6(6$uN^d zi7nIIH)gDn9H)N$k-!xmq5k%fxQ~-diI%zvvs&Nk(xp6A8`GVfbGCv9bPD_%NVH4y z8DUvzv$WnS_$Xx&XD_Y27@_T+wmqy-hZ}6MQP#~ocxtG(a2;`AhDJ?+)6Tl28WiYG z%jmJIa;nweD)dvMT@UjN->)=q_Yg>Z=&GPkX=i1y#Hw6wu9o*29FTTj@qqf!8q;n| zHWH#ujmnrFJ!l(tSeU)f)9!Rk;oV!EOcm|+(Ogm)v%4O_?nX)uk~_66sM5kHedrQC z^%Mu5^oYy%x2AASg)NC961t@iJN%Q6NPfpOPF}8ooK=9RTOBL2TJTTCQ@-Og%ela-VPa|m#spwuc#cjn4!^exRQN1BOBgFd`kqb#-9Hk(-;_>{Q?G;$Bgzl|I_ zHSA^ugYsZue?cg@7$3Qd^n@+7FbbuVU)_;;Wl=(>pVPp144QBhT=28MsV$wz=OkQ1dJb%+NaBt7)knG@dZzIiz`4+Dh_!2! zQ$%sjKWdstLN!+EkzIr}p)rh}XwpH(QIm)^iaF#RQv}vi)VhpILRv3L>7P{O_90|` zPn(F=CCi;Fq!s%eg@Bz9ewI8h|LypM5TO?@BFWxjfl;0U z8Bsvr!UF5N`j~M{c+VZ;lIt3S9~a9_Ti^0K-u$~$zJw=iXcOs0+_G!4L|JqcmLZ>eJ=84Pz+ZxOUdPZ0{Q zU#~EPsJ1Gebs7Td;%wHubz5aMhr)0>i5^kKJycs_6(tw+t2d#G0IY-qK1B~jNkt|_ z8^v624+4uGn#91#0{VxBJVG+s)|pw4^4IMW8|O=rd`@b$Gmanx?80D4{^lB?aKT6p z*_E@#*v(jVIQKic9q|+Y{|xl`@R4`w{uCi8C^u|4ClPitUrApF z^NG5BzKk+W&RtqS)DZO%X_Df%O8yR}@&_v@^(M=lHkzw>p> z4ivYS1g7?@gxD?*gqn3px512t*_bowq`Y4GH@=02=bYPBp0sdPvuzQ`MQuq947AE6 z16-9*48-Ci*>v=^442!^!)U3jz6Z0LR+_NU)>G%A<^KENO_PJtepeXlHZN~?`O?{4 zIcj%sVYj*bGvcGwT~5LP(|G(4dMmWUf1y$ovfjk!_FV=Yx<@*?z%lz0u&~3Rk;B5w<8a`4VYw|ZR1HDvY z*;B`xNR&4Jh%^lbL}cT@DQ$amntKo2k||qb27tS%rF|MEL))G6m>OwzC{ zN$_*B^CqJJCfZOg9oy}C1H(=8(hg@PNVwtghKOlm6%<)nQUZOtuDfD|RaOpCcP1?p zU~N_tNYB|Ez<6CU95qk9RAKp<>rWFo_vGYYY8z3O{_?W-emZ|_DgU-*`9q`C0vKNkN0Czm8#_#yAD$Ik*Io#GUrXfbn=;ZKl2WUx|4IiinFqax; zzV%bFZFXWB2-tpb!dyxaVfQZ}gTokAOByd|k6^F7xxdiO;eJG~iG3h6)V+j_K#h5MquAWo;^8MuxRo+H`xK?FLf9C+30B0Vrw>Wi^#1 zTWatF+)cb6xS3n*l?k?E4qnmkoF1{y&aXGkv#NQq4`t`LonNVrjR zlF=J$*llAKVS6}{4_K-PKpMFT+Zt_X&)t>>~^H1 z__V{e9l{%KCe-tGL&{KyP+uS|Ly72l9>M1)qkw{ls-g zdEB=9_`V{29ZgrTaz_K1^$XqZxbbTIn-0w%h8aeYD$}h9JD}7CHUh1_YEG|w|I!Tt zZpC2}yP$0b{A@~WVXIs3<~AaU?21vmF!x#iy*GNq>S@&lmRiB1a!cvY9)iyx`vB5> zypZY3+r;mfY7)cLIWk4A*q$!i)JJb#_>YpG=R#s3W&{@JRj1Kw4~#^vF^foM=4lif z#zuJ{P8{EuRfcMslK=_*vHVBO*qr{ds_G@}3C)S)D|aXLz}&Arnd7`;Ay0Yuh~-Ti zgGk_eWO~Fpdh}^lP(IA4KH1|#Dln`Xj~nu(K=z!$Xe=$LU|+_qNgK`z z8iip*m~_;D=2d_c(F5m>(s4syc@B!(ZLqB47s{^MfE{%^CCCDbm}DM^g(KKb)lu7w0n$F0UT?ABp4Y#`Ir5 z_D+^wrY6ERmOmObB~u4`XG<4*Cr=W_|53k+m1XTw8IkZyU+wbp0ZM$6MByx|jK>li zc_@LAfEFdC#~Tmwh@=>N8+)P;>Ubm+NIxKc7{;B40EJM2_2rr9(MJ0n9?PGl#V33q z1j9}+Yz<0*77)%cW)I7&_)#guW~sI)vaS4X6%hPXG~8>8t8w^-zhkOumU z`nZikQ2)GBjP<)LL~#y|)jq0pUGR)QrQ;lSlypC8t&!hvGxbr8Goo8h>8gxg)0sD8 zK+k$Xs$jc03iW*q%pl8G#ML5@C`k7TQwe||=U1{Ac-!cn10^=q9S{N2+Mk#|UsXnT z?S9i5`MH^)9tOi`ySTVs6GK$|`eo<=Xa1z2>SB;YWCLCaOi}ay5}uj;WJ+2kT<&#) zX4u`oVr@mzLMH)uy?#s!tsYVuqa(=Q6WZ1DEynwJTpmK)nnjN$%T{X>Nb{{Q>|?t{ zWunj6e~(9QFb!gA6<$P2;i?j*OPlHQq}-ep!CMXRf5kYR`y$wtKH@r%KV~|l`e3x| z@$pD8|JXRI%_%{6dx8G*bS12iQ-UJ{0Zq^X0SW*AJzf9fY;|kF{s0#|zx`XTs3%uF zIpl%{h@rt8Y{-8DgN%6^a3eSxahG3nq}_ES*c%NukQ7yRZ3qztV@P3JFWy_^;~EDy znG(a<$ZRCr*=popcl4`?bv74!H&+3gbz7N!z2`dDnyjb9#DGTltBe2O7P4<&zk6=i zW_uo&^noVb13PyjF|SB+2F`Dy68xEn3rx%iG?#ny%QWsQ0YI^A8H0s0EK zl5inU8kVDS_;`OppEMJ`Tz(T=G~-#jv+P`UubYu3xlsXu4x3VhTjmW6(M(}fNf$kZ z8O^`!c(9;KJwJsnxLNtL82#*d?pSzf3y+*@R})02JkSnLE$-C*b5{U5t2=s ztELx6ih|3sJAligY%^F8ZUU2PFT#wmPzqX~ci91KSK9g}7j&)-q0pdXdE1s|4}qyJ zPil*26)h^BE%kG-q>IlJCGqt)WKwDJH~!+}a~1FAeDyA6O)l|qM^nN$zEOe++5 zE`igbSYs&U&}^X!SZ>n*f5H(ocD;-)Tc*EN%l9ddm_#yz5<|KFbep(G>nsdVK@}-h zi*=^34DWb3t9xFfD0Xh$} zC6JfwsRFP0cqsv6su-&9a904ZNNm@+F7-U`3VJ47Psms>@^ZDiP-#SN_dAe;S%B#< zS~6U-DoaZ4E_hfjG?5-fR*Nw?HhBRb75mD3hjg^i!0=P0nHL!W4-E{Db%lbk&#-H^ z4^qZQ!IJx9Mp7B(??!Ur)u?O`lW*b#^hF+G<_i>`6yAiL3T)6cGm52VEQ;=_*_P3s zF&SS?$hrsBADEA$m83H^zo?Q$?9SGHMUZW~gQT|LmvLI!ovs1-*%>*PK7{6>#aMLr zv90VEUeH{od&}XiEk|yNP02QagHiJ`?so&G2_*Npj>)0z3yR{-ldB-YXQr~n1d#|@UuC(#*rLa7k8RSbp8i$`vv(B2 ztksdtLTl>3R63LU37GFsr7nl>hXR3e`tkyaQ00x%B)x|MaG5m&7~M8!fVIyJynA}970_ei= zP;0O-?IuJ}r#qKV#@R!w*)$ zgwGNKD34)Uqi0S^Y_D;-%jL=$OjD-Z8r2%Zd1X-xo&kBKtobse&czGyo+T>dA62QR zDV}=KgnFntI^8}|`WQ;O`#?FVd6ZE{E@mHC-g_w?wZ0CUInYLpqSyS3fJPHW$r9$y zMK8f?JIX!&usW(Wwiv7DfNt-g6!P9n+RNyh7;QPR^BVIvc0+4&Q3d($%S-T9%&?&G z+V!36%Eseum#Y#HdeWS2oS4n)^uTSm3TYx<;X+pAdZTSMs)`=(B)(Gm36E`t!A-QV zQ;Ulsw%d@=oj|XWvUhj+2-W(KWo|V++DR7fU6AJ_DS#if=zVhRdUDts9y#{Llz1uk ze13!4M*5Daj3Mqk6JN2F>6asp3FmQ7m*Q<2?+HrqZL~cwcy(#RDSB15q%ye%dtpYV zY7FblglwtEbukYqDlw-a($uW7U(Hx0p)J~ME|gAtjz*o=+s&{{q7%MEozFy%Sl6w( zx&daKTM%WTfulNRE_!w>`uV9h*9*L*nP1j#$e{gZ-F@Y}x5rz@c&q+Ol~6tchMdfm z=1nk=?x-nwLu0OSn30t-4)Sk|<-zE#O!6Er zJ99CqbKiuN}|Y^MM0#LO{Ua@yc8WryLWR>hq}@3t6EEusBeJDL;in5T5` zteD9lRBS~~FWNNnpuTYTjzyh>=3U^e(>s$fQ9|}sR#A0hRjzMvIS#cVv=!7FWhv+BXE+Bi2nx?G$3|0~A*sL*g=nTA+yo>VU06|GBiasNT zbUOCxrKX%nzbHza2(@v4u{qnK|1{GH69PAfBwY={MlEgoBRGFQYy{ z`t~;%7(i|B|26PjgUg5ulSXImPZYe`po~*Omac=)7eS=!cYXWkTOzhGWl(ilS z@y85DNZKV%cUmUGJpgj!#A*49{02IvXlJPTk)k@j)uAWw^ih63^P-mR0{)>VVi^Jf zm%}SDL>eA&`Itw9yWNc>b=$j6ybR624U<-aT5KxXJag?kztdp_IA#yNAi*^Z%Q0UjLujfu1Df< zBo>6zEXhr580d1IM$vDyUSV7c$grB5H#|F2Ft~79jX$gjG;il&{grokMD;@LfKpo^ zBrcSS3Ee=8%Q1Ud##xms{t6aUTlhheKf*tcD?lt<7Nq!(@7%#STtZ_X_ z)+i6Yr!5>&QF$lkWNvG#dG<_0Pd5n$cUxE0cFu~UMZM1GLVZUao#p4)L;R0owHp`Z z4{!|&(~&FThusV~y3|A-5}sFMcbik{B1qn~7Wz&JbL zl^#x(ji_S@$`>N*8xy>6J?(|0)CDK1ENXMHf+Rg>RlTRft0}4_t)JzkxFYO!K+`Lc z$GF6Ao)z--{0KYu%R;Q39cr)g1{%+<7c73kyH{^Ai*bq!vUH!DAx648c|&q_M;?}v zlwSP7e~nzCT9B&3sjd#EaO+glaC;m}Q!PF(ZFd|H@kMJfo#4F8x`uyUPaN-f+y8f&w@d1Q;Cyetjs%1i^HuJhYrbu%X zV*jMG+vl}@+&(z$5d%R_R?O9&5pX)0zN33NQ>{DMOg1e%FB#@U$N2Ab6+(~gj_ajy zNO{y%W%Q8>shLYJKa*0A>oj7%!bMQQv$PcYRtFH0TUgA*X1wnsM7?ew)KZO&jotW*eo_`ZNtnf_^==R=AAUxX{{4qJ%nJr z3A^|*hkm7$s9b3&6``VMs+uaeq8Oz`QJt%K2j^nZ<^C#qPMN-?XArxR zFIA-3^2$sSc(7B(?VBK{F^$rv*uUeE&8n<+Gs_+oY{L0>?_syycwUi;?hJXuoikJ$1` z@dXVx2tIHKGT=7E!zaSd7DuBKLji4f{rTnj@0#Dy?)S&f(8*nKk|?wuZUJG0v7g~F z?bdPiRB&{A%a4XmIZ~%LidBC#?q+ikO9WxaW&n;O1l?6=xEgg?>*NMxDE+ zJ+UX7=$=KXpKeJuCUw4C?&3^9KLX`ToX3%z8>;cEER zsNwcP+2IJ!&3-((#LD>Fh{BpLiX7nC-n1}du%B2&NP(7>X6G$eTgWq(S@T(iVp#9D zed;~Q8*|%0-D{lI3la7WW(bbL+$j$nWu32vsq%H?ukcC_{$Oi_nnQ>|85=&P1$XO- z=kgo{gRyw@?VR=6$#^9dij)ib!7HrmqDhL4NR@(rt_;DS87iNh2}A{JN52OLm2caN z%y=ns8sw6-;LbCwP*+|%;D*GOwlO-!TYYgTmy$<6F;*9zAcHL%i78E~YlV5{bWP(6 z*$yNp_v>Rzt9wCL@wH^|?PJAlFK?g-g?F4h8%96j3yjl_gjK!Ik48hE)P>zZ?0(Ds z=}tcRi@m1Bs|S)PTk!q#P3i1rFMChSTINO;l_84}X}Isv{)@9cEV7AwrFeTBwsxny zl?G;TOHHJuqkvRcGTeX`3a}r%p-5mm3PlT8zlEj((yee*V?8-niwBv`_wU!!JX>Iv zyFDyZ@J{l&eBc$G)p-Ti@VqBC$x);a)n1Y_ir%0sVvM1gb}wh&j2p4_0UEN$NS?Qc zkbamp@)KoVc*vqt&mrzr{6bD2&b;C*$t9a>$1+1eZNnN&c}GQAv-J5B2es7WD`QU? z$rCQ`5KiKYQ|Ke6e_F>=S1*`Sr9npz1ie%4=G{{8_ihj&IexbC4JT(0_NLwI)C~&-`pzyZz8E z*#4hh{Qs4w{U5J;vYNI!syf;i0!hf^9yn5kny4Z)RO|sbc=T^@@OF)$vb7Y1eK3f` zbQd#_jrVT(PiWtp%BmK?a`VQhTlH6I$6Izf5g3Z?w6NL9)XwhLQ|mLI`Iq1QCLxgB zUZ<8y9#hz#Fp3H=geolSupGuJQeP`W(Gs4(3gAVi?hpafE@L*BN9%6_)-q9DxQsBb zAC{;Ax3t$tQwj}pZD&+v2X!_pGwGvcyG6$$)3t=V=ZIdi8j}an91AZG6K_@*H$Sth zy@!+E%lzm3xgjtk#vpLuQ+EL6rW5br-v=V%W}5H;@>U%95GJQ~PjV=x+j0tD^DQlw zeFeB_9Id-BfmOY}s%{GA4*P0MRJ`Ve7J<*ihmTQB;v{vOL;OST4HDjPiO=SrEp5iG z@_nq>TNHYRJP*swaU7L5b)~Eo2MBZUf*fAMBQOLza=`Oc^bD!i@I10`X_)ibkKn!G48*nO;X|A7#U)+l zS>z&3HG0N+&QVaHaA{E9nT(o2q8Pyz_1{$0l6Wvzk`5x>u!H6xx(?|(3T&V+47qt} zN>bu$m!OsY$Vrzw{u3Sfq-iRHC(iIn^+=R2s*P71ppuKv$u)Hg?DY3Y($M zAQ&0Ak>%*jTMql7_apszmO6ZJoR|LKW`*ws&%2=A{2dzkFl)IX1R@yDIX!QCwgU(2 zH}fTD=!3!_F^?HHn8fDhY`&A_;y(0F#J(>4t)X6?=<%W1LaO?Mqqn6b7qQqxW41X6 z>k@+o3WqWrD}YglU8P`cF_&F<5Jc%JEqa>Bj)E11gDbmLpI9)dMclo$nSg@}=@G?0s zar49t!lR`LXfgp}>mY14bNN=L8|Jm9U8jS(TP8x6)55?Z={(`! z>6BwC`S9dBad&4te5}sl_Ra7`pbFUsUYYEMCpoFOjOfYQWXDk#4C$O^OSi5(*TPd; z5}%2=a|@{^T8_&_Az0bb`2=N1-|yTCkK``3vZVOua|hdqRftFAfp^ny-zojLw{J4_ zw?8Bv%Uu4UXEs7tm`gS z1h$lrd{r-w_o=|!Bl7o%7`E>o6?|%$)D_a9ViRW>Sq{M-EkwCp&kwf2o9;VrXl|UO zvxOla&qF3rb&pf>$c}!pxHnEO0qd;Jn64J8f&l266YR<;C{PtvApo();U-npVkrUo zJmy)R~xeBqOXMz`)Sr8?R=*B}463+K;h`rfq~ z(!c^1;0-<9Ny-%`@wb3W_y(!F8;o4Y@$;71X4U{|2U}_hZ9*sAXGamhPvg$x14}A} zV%FF`T!zYMThL#IA1*YT_9FJsFFY2-IeP36j=w)cPHBk}rB|QCx7%D|A0X+}mvyV6b9tfqab*1TfH-Yg1`jNjPU&}vrO-0-chY;kLSFZrD9zMVE9 zOAmoNsx{ehy5&9HYRq-k&-K5Im<86zZ|=+|k{9n00EU4!?TqdYqqh<9^1VBJ>h(L{PoJi36O*~nTNrq;b$G*8jOz+A3=c{> za2vmK+Bal;y|3d(a_5>wwb#!gbUp_#YfmH^LKr$QyIrB34w=YsSy%!SU3Ce>PLrg7 zTC<*LoT)(Jz;DEsTDpqOsLxIZ(AnVIif2w6P_%d+;ea=386cc6>Bk84MGrF>(qZA6 zE&d^eF^LhN?Fv~}^##2rqnL~rp5gqR|Sk}g-w zoL@B;gNCmLu3TNUWwdM(j9K#*&rAQ6! z^@uvk>fJV1XGlY}%QRGUemb-^C`{D9q~#&Sthfz7KH#k~({;A}5ri(?aH6?TpnSVF zqh~Ea=Bubl+t&q|Qql$6`n1kB;r+a&t>&p0yc9J=Z#~mNLn|4V%QNJ)2qeSh@n92X zg+=Zd2mYv6TUO#`>j8>gTBH<{&bM`Zk!U^To@gkIv%}PUjjCNZw)(WzWfSC~5JhD4 zKawG$B}#)D$~ryQm}}IQ)RO8;DS3Ds^bSC`2G`09Bri@$q{O^`q+PqDE9Oi?-s)FM zyj`@zR|p|D@6eYA_2I5RVRXt5smi(48xPZ=@_A76V5i2O<1OyQ}PD2{H2a2nG}PP-lox2czS6O!pDB_-h> zi7DHbiaa6*z87DsKBV0n-fejRAzr+s^^M*`w@lzQ;$SG#*ojUzA&<9bxtT1!PzHvR zY*MF>>~A_8BKv5Knu8(iD~9D-bB*@vD5mobQEsi7nC%xw5640C#1h*GTCI33DnRHk zF8D<;1_jMy}OiKVL_WzWZFhmJa&WuSY*>CZtVO#TYO^d+1@z z#t*BzNIkz4^_`kzutsRMk)p@yctpB(4MwxGXs_HL@%tw@5RkibZM$jh7LUeS2>*13AP z0%((|N1{9=M_0jn0_~Yl<7U0(V1J_S(^ZY@L+f&?vehD~rsce$t`CYis2F zScWN!xp!f){IDP3{<0Vo*ve^?YA&)GTDw~r^{P{zq^ei9Am4rb>0m1vMg23=I1`O% zxQKhZAm9D|>&Nx3A#HCH4+W(rpiR0p-qIcazL7KJ*rrXWCjNj~0!CkyDss=s)R#6Qvc9+t_$XQLzKWfFO~xbYxUUgHf+Nq%Y&#~Gic7xG6vLme9*1iuw%656-9pQ z(q~hR5$oDZnuVCQij_iV$T4g5r%8%&u)#?w^|weyslhk4Ac8$j|nS=38CgRII@_W196fH6-DC!r7sNkc|3!);QY$HQ+Zlv`#a zr5^C4h3-N5CgaO|fx#D3vyoC1@s*Kbo>bTWRS4Bnb&feGgHErGk9L(XYktb(U>cfE zb4Z?C5kZ?sbWQkSz;H!j)N5U{EWm!{In{CwwB)bYty)4GS|hwmvjeWYx6zuP!q$Y_ zEgAoAxv;&uTA?*%sUfXoF_0%4v1#KCKQptF-@*>N$C~`DK0F#svvNeKNR~5sQ~*~H zJB8v(%}BHByh!-x*&OX#;ojk<;?GKjEtQh)fU~_MQ|YQjY(ZO1+$4L($MGVe5U7v~ zXQYlFzPLV?=`ixwO}j0u0KUN>^Vb=iD`PW^RiRrtA$fAJ!=dDv8bnZpgYE*NJ&FsT ztyy*?w)b>GOP&93n|-j5t@1?-A-XnGZ^|LY)z*zGwzomYObl$NERFpVgrjp8LAx(v za5t!&BtD7f9@#m!jyXv&F%bbFZ#x)tS?w!a=s55dNla&axm2W`q$HDA$XAmBm{PPQ zL3>OS1AxfZ7O0qEG!o@fJ3-#2B;^-WaFf(>Sx2`@-A_kN zyJT~cTU#;0D09r~6-t`2RE-x`&Ma+*x7IjG236=SG-(2CJooN+*g5)D-Xyp#(c+jBWk@vqg$w#5nJ|(P!YY&( zyYA#ns<7$YxidXJH>C{%ZoNj!hGgj_w7H4=M{=^UG z>ppx$JG#6x-ypk`?V7)3?Wx$A33dEJx0nyWqRECuIxDYEX-{w7jZRAssUgi(ZFVhBacp<}=d3UNMHXsH z3N$}9+~zCOQ5Zx!W`3Feek0fRHAiCffyBeY7(x_M=u}lyRQO@E|2jR7YAR7*pN6$s zR_Vx1$Z>9Z+?q}@7CI<>0yR+KHFZe$UfxXOq0d<4#+gZ~aIY(wXrt6@6ztgxMH*vB zMAVKc(Y4qYp^bw^M6Y;aWIu|FibOZ6o59u;I-cMk2P=x;?{h_m)y`x1S4&aZN@9-R z&oYTHR8%0?=FaqKS*}h1cb?bno|v<-mr+Fri}^w2_Ms(mvj8y zzsufNYuVREi)CH3;EEn`dB(dkC_UnSk`r}$y!ZebwWmqKu-7lCID2Q*rGmlI)J&Gq z21By%$tN16!Hw>h|=!fw=~E0Jy147z-0Ykco)`It*?@^7(| z&-?1izTA0!9{<>4jEJql8Fy6CkdmOwG5$JVWKMB^uzyU9x!4{&L=HI*@wSB_)?0=u zy4KpB;`!Gu;qv5J)@DuM9Q>g(+|mU;vshx2L=M}ySqH`UL6s|u$T?!+CH*FvrGodn zcB`%Bo$iAbK{XcnpK9r#YUe7ZW~1JmArp7vvqVzPIb8a#_7*?mLy}`3$l=xYMhEh!Yi94qhp+=)l}hK#wa73$h6U7qYUjV>Ffao3LPX%A!?Q zPQATmQ(nS`{Z=)sa&eJDi7fzU(AFv;48?bxo6&5;nrSDH;Zy=O5k-1EH4L zd8+6$idAQaD<0nA(a$Z`n5}rsG#W*^l3YU9%I(X{ZPJy(`8F?1?e?j)g6kH<<_h8U zMI4`!i|5EfG5yfg$0I6;7`r-i7P}^d5>0b?VvT3frTDvhrj3@nSvn6sG0zh29dMt0 zzVrA&{}u8HMEw;XsDsJ7W;>#HYw^Xm23vHUi~TkASU}o(X7_UIE7peX+$XjV*A(B0 zK8P_`A%}5i5T}%Qh5gh6$)N{3dAV4?S9|7|hPQ3f9)7PO^@JwhQ+-&WX=Qf8erH?t z-Qo&k3x@-0tRcxjC+nd~n3Pmg@>w$%!35)K#6H8pk$1|qn9&qk4K>&3DM4oj_a}q! zjiTPB^78b0tym#$8_S}HI9j?6E|SJ@EN?ke-y*%*82t3klk#>icf%7P*vT2(f!7&# zU^$)7=2@$#u4>w?GIk%m)Dw6QAq12S3u&sP#vlK6Hz6kxc%90o^+Yfm3_PDcC z(Q(a4xV3HD`~jFYd#e<0V7B<4E_Ara&(Au=W3CwSC%Od|mcjI&RNZ}$9Cn};%2U*4 z+PE%(R%3XD-EhqnSPi+G5WY1uq*)mEJLRQBa$g1)!D||aF3d}QJW~^FAT}&Odb};G zJLpPc95!Nb$R6RKQ?^>#*M=}I>b>{^F4q|MG-Vr=cwOum=@gg0jbNYS_@?eYWdI}J znZcQ7=-CS6Z6xuSii93k!AA*>25^*1liFUNyWuG)RQ+)1YSFZ)pMywiSbX!w<<#Jn zz*=N4i1%~$*^xvAN}sSul0OpC^~MVpL>F~tK_&!^%Hg#$1Ji-bp&M*U1yS}|x9&D- z%r!Uq#BimR?ycijr`ePi9(r{UqNe)Qu$5*QC#i;3ED0RVQl)MYwL7(yDH&_PB8pFR zpkq{KZb@Ox-b~k2S**^;%TGwlG;Mra(8;pG4@Z5J5+eR4X7`-4?agt0)*(qo@dGRl z5ufcVw|9&&l;#L`w=_x4Pht~dnkmy-d#JgSx{a=cYTl+4h!>IvKkaAh9POB}KOR0* zPs=RQXBma$%0tQebMR$^=S31HGxA0<%qpT=R8ADclb+tJ+%&+%e9|Et+i`Y-?1>sL zy#Q~BwgS0!SNP_RLxa0HQTQYD#bJj}VGVfUQ_nK-Cn*^1h$of#JTplHYKBU#ALY>Z8)=FjZP=iuih@4l4R4E07&4b+ z4`-#o zJpc5&Y6<>XRhLGJC@Q)7`9XgDT6xQWyvO&$lF1J6uEV_7lwV#so$)w2QB+EJYMmOr zVK}K;t>_sRFeTld$p)`T_w@(kEjMVZbTJQqpQ8 z=qRu?cTTZjf5^MlI#NqIxIoeH*mK8bDp1p2WG2$!<-Dll;^Mm&26K90nY|q*{?I%2 z#1y$sJIKY*yaJ50jDB7T!a0?CqQC;Qh*!2`8N$mG!stUwMA=pj>K1cqWQp6iQs}E> zikvX#)r%!qz(Qa)IZL|fIrE%`Cs(D!L3+9ST$uP(1}uv&y!z7hm%7pHLEPp`CnZ>- ziG@af;X?0TF;~gDNSDqT+Elop8hc)GwN$Grc)U4Vt1WP6@4D_y_BXjZs7I3H6q`31 zlYsD0g<7huFJ4M_M61rIg@sUo-$It6QD=QMp|S_t>G4Md?^75odGiE`b*hL@Zpsx_ zYzAlPHda8_R14oxP7Z@(AYk8;lI(RHNShjDI&zbM8G3AT_g+G3#pD{0C^W+G?b=)G zNjCfCoC4Myp~C6ZmiaRU@0LgeLRq%49AdPbfFg&R?x>r2+R3OxZ2CM6I+O})GhSo- zOx;FaKF-^rWd3QLf?mPgyS-%h)8^$@wFgjB7xT~Wgzs|XlUvs?$!?|#F&Q^Hne-(* zqA_N5H4&T+o36(CI`7kbpdVk~xWg$|uE4pTOHDr>JQpfIBu5t7 zG;p+hGk(ghBJ_U3;?nan_*n%yUkt|Kli0r?Btd^ei1>Ta86bxHhy-9x<6^iO7ZG%;06{GxVYLjV@d6nFP>^WIE+fJQmDJ z;YyInqcbntVkD=jIm}CKwR~_VF`a{9wJxK~a{a){!b6D5-y&Bd>-BCeebc_<-1F;K zmWpJct5%cm%_H?m((N!4f>Q!t4&3vG!Z)TOx~QUV(Dt+7LOGwa4w03G-eCo^YYu;E zKskmD%$vWlrPAytq_9b5Z-MbFGm1)4ljfF+&q}a7#2yeu zf_PGSJ8Q7SDIA_W+-&c>w`jCM@_4bfcn@okie`;TNl9^a#xq-BT7iEmf!<;r#^MPi z$0BiSI@fa$GDy4WTIv^hD>^27DRAb+r)kel*G8wUx~aXPzD*dH5DiM*{Gquq6_kiu zn-+_Yu|r69%7-$dMoh=CKWqfG(+sftgxu;a!_-%|_^_r0ua~aE7LlZAKIMRuaeBgM zq#wiiWNIZeNpo99GBYcet&DnT*Z^YVWU3v98LE<%p>do11kS?+`ikcM4O;7@0Ao~L ztkpCwr=fD1o$?a09o?yFjX_%?hE!Y)FLagBP77*sY`x}!0b zno`3!ETEb{u}m>tQAV0C${cYdyV)p-^I8qxy$&SRSNYAIx@p6`rp_yhN5s_!{E6j0 zZbb8C2~@+LSHMIG*tvbYF(H8|LHL-P!4RDt6Xx9HaleNF1mvPssOp2o!sfK_Rcf)* z#(vP1Ar9sOuom2KN!Ar=pB`+Bht2O*(N~|f5?H@3Q-J!9E7og$)MD(Z?W8GCc7%vA z$vq>VeicOQ8r}mkoSGbY@!9-*sC($E80ihlp^pHd5g%12(cZHQJz?%k`9yyak0BE5jiAq%U!w8 zhNdUs7#_&%?@?I(CivY!$N-AMZoXE%Z(F83%#@98q3ZNq^WED08g&e zE@R|!I7EfQugs~r=Mtyp(QsXh0VPVDxf)Y}UY?`1eO8(_6B~|EZ4WXW;@NWD!==!d zn(Mwilvis@cZ|tr5y5hhCaIf^la&;`pFn;!=$aG^POKooNBmn=11A&;Z-Cz2dhYq~u)#8d+x;jyH^r&yHp zD3^_WG}SjhdR;5kmL1M8-(7UFRFD}rP)j_UGFD!C4}0Jl3C<&o$HoK+p6d6oQR3W+YCw?L=|3kh(cSC#eD>eFRBgmi}2 z`QRpdjWnpo1eKtBJ8-e7ppgWIJnInkc}chOfVfpRCjD50r}R(4WfV2Em}CtSXGqG$ z0_z6nZAXGYRrs|UvDun^0x5gFw}crC{57rI!ouJ57*%CI)Jn}p;S1rUEA@06vWuy0 z5QUQN&{N2^)3qIvcZ9J7HrqBx^5EIA$xdywum^j-3@82I!g(tSH1ZJ7bWvAaxdf!z zA^`Z~Q$Tse(zGLD6LoDHg z0|Tz6P4#>%son20TAIjnp7I}z>^C!|+b3Xd*mH?Btj9ako)DO!DSIX{H{Mz|GA*Ov zO>28K+lVGth_<^u{y@i&hTnP|n{PnAK4k~Ft-7G8Xr@9=4>?nH%=ca9o5ftvGZMc< zcW}_Gl<8t!zfm#BRx0_gj_QNJZ6Qm&hBs+M_ZLlUAM}FX2;2wlG|S}+B>1# zNAT-nd(BK)K%4b8PC?ICgPVvrlypsPv)x_JGr^P~AL=yS+_uI;5hh&9`Wh*klaifX z&RLXcYecqn{i0pf^#PE@aqhUMe9WV#D|@cI z_!QAM6V6xB3+Gg#*dM^%#|)gOE4){nA8)4Q;LyfRp|XZckzvu=dnT{G<7Y5u>EV1# zFd;zNwtjXF>SGmAf$758`4A#0PwftW^I*IN?8*~-w-}JFA5NN|^{GFPyN^$+&?MYQSiD=q z@XG0&Ff+Ki@>9&-Oh&wjdsfGhrjmt7Hu zXn~hR>*H20#;>9lMV?15=-|(?%+GJH@S^T89TuU_pgM3F=+?$HQE=BGr>&Hx>ObU| z3$+y3=4w#2uQXp)`YNM3Z+%on;dG@V~7iwX6{~VmXOBR~Vh&e7% zEke>{-iLUn@mFiM5G7+wlC=QPl#MXPPW z?|~zKxz(g{M`JJ|v3t*>o>BC0OJ7pv1KCPbu+pmXcA-16%?b|=#By1aFB1`IA)FU#d3AfqYv$xjdb*V=& z$r5;E0yYM-N5|AjYb?`fYvXjgg!3yanBIsKVBwvVJ*nwF=N}$n7v^ZYs@vij94vN4{}yf)iS&*%J&jg?Pg9ksJO2MqH6fQ#|z-CBEE)Mo`cDEEh1JO@JjK}?5pzO4XH{GEMW@b(1r^?kGBFKBrhaJ| zgpT*^Vb|`c9}_>-z<+XxZvA1`*;H|z#Qa1EI33!4jKxjf$*JFe(+G>rYd{;fPpcAL z4p0Bu;wq3KesCvL{^Lx1IXLN@=`8Ok4did8Fke?S=U>d_RyTSod%m9g;h4BV`zo+C zew){YVCHPh$!)M7^&wT;{aCSV2l77GIax6-F*?m?xGecBP;Ngj#$$V%$At{F?6Ruu zG35$VI$^KTW8sS)g`eUysYXAae{+bD#`%y$7ldIpT`jEL#8qP;(Yw@YnMj)4@;Rn% zk7dYB5#d?qHZ3h)s~Rm0t?23Q9mzRYYnZ9$CC0+(Xd_T;c@+Ys6+j zUM!fu#duZ^qklrJBlxMnrui+CS31Q_h51+u`8sD^eOMyA>X(wF1`SuR5ywS{d~rKlh@+jgHQ4dnF=$O4S3F6qGk(^De$L1; zDy&<6SX6}f@I)j1&9#t4ahs=Lu&Z5bD%VV0JQCJW;5pnnKA(1^Wvoa`2twN`MS6@6 zHkRv?$b9G82KGlaH1FTpyK`r7_I&Cbty$*esTjG2w)D7Gm`6aagK#%_#Ak#RFv||-{28$n8K)Q{ zJ$h88v>d0#pE_maPCss`9gw0)B(lc8{c2E-?#j}ww8D@9M$BqtTLK}o2c-XpNgMGFcm~miW79n=fa=xy!xlr6L}~_uF#O!wwL)6gx!Mv)SaX zR0eCRP%vw(e8g>MGp{Lo-N|EZ#(TD!%c$wcrhio-23~yITWpNqim9`h5;>JW7?EWV0@A5%lnA^|6l;@mr57v%>x(KV=KDO}g4 zQ&K4%T^=JnTJWIt(lm*Ue&hB=ra^)!g$b`DXIE{tlL<|mG*1CNj}i%m$r_cDUN4cv zAOdg#gU5B>;re>S^d8U^K+W+jx2%kyJ!T9Xl^0y=%-~xb zwLwoCn5=ymitcRrbY2!?OEA#{6sShjobFF8K5ZBv6gpY0f}WyZEC=StNHPnckwX-* zsxzI?Zv~@iS~r9j0%^v~tI;uh=8k05c{ zUwP-om|Vn65F+Lg6X-O5Oh(bk;^K8XzAM0b6g+9$8`YRZz*P}&5AM%*}UzvC!B z9=8Q+(4AK16H}ZgjbP+*-8K1Dkj$&+8j^Q~2Dz37Ec{MeBZyAkQkR-vFJXkn>`5Hh z_X{IZwMz)Sx#2-E2yY_2<}S{mr(lODb)=M1XYm%1J7fq>$S!^)=`;}LYLD+AcT~{) z$MeJ!+|a~Zg!8r(L0)X3MiK$hwWFJ#WuY&_KTwvS4A?W%v!%Uu9teqVSW+)aWnJlZ zgyV|oQtlOFAglvPRhKnSF2!UUrEbHjMCO)BJdjbO-ObEjJw<=UXfGLYgS*nuP><|J zK}Oxq5H)6e0nq@O!2A%aeuBR;2V-BZ+NhZr`3KdebfR5DVQZK=#g57 zM6Bmb`l#>ndK_fgNPw7JYw$?;B^=jPbQzLmrOyc?k^bA}TSDrL1P|_wmp3qneXQVg zd8H{uPEPlJmBy#h-#msVjjY^{@iCd6o=3fraM|k2_>O?q?G-&O^3U5wo2BJO!ZWey z>pbK@qTd7KH;&axQL!Lry@OZzNoGE z&aNwvsW#H4KHupOkNO(rjTb1b6lCrCkXJ&X_d%;|V64jYKu|aeT%v@CAYQjDuKQjF zV=b${e&!vxH!@tJcVQtLOs%xjZ=&8Ip4#f?EC(@7T_e8l#Mxl%M?I4xwB2#M4L!C1 z0t~-ChoOw#pgE?K`3O2~Y}RyuFI@GiLomonxZ1;Z7!ZBN)(DL-Kl>5L5(WmUAgv3S z_#Xu@`7jES>Y{8iic%alhAv>+AG`PdeKFuCxqPvmqZzxkg{_&bh4Wu3vi`lIo#91H z7dC4DJx9PrRV+(P?f$=IhY*Dro}tQ~r4m=5WFMtb`eEove*vO6x{O z*BgwzD|#5&!87m}5e}Um-i4UY_?opKW#U>S{3zeJLT16IX!G}{w+C&C`Vr?<)=&xP zj&qtr2Sob zRXb`SRJOB_kdqn`gncJea3rD5>~4@b7T2sC;e%v?qO5iN(K=Kv16e6J^w?}$)_8t# zZPl$T1^6h|Bp%f+O_M^uUXyqv%qs3VT< zye3(_F}!>IZd0C>e)E&6_emN<-HK9lk6Y@5voh)@$q=~x(Qx6!UQU`ob%!VW?3?SJ z4Gg4fR;)Gijaae=>1Ji4t%N?I@Utgbn`fgo6CJDNGdEJ9b2tyN^w?veXdZ!mb???o zRC$c4VS8RB7LaudLd4yq^}Kj}7hz09FI691MBRSm>Y5>`&rL;2Zjz{y{!7@BbF>HX zCrQ^%)i|lHlHj2DG?NmA&G*y0@7BnmTGFN9=~th<&7YRAQXC8WAg6lcUWRKZA5I!Z z*F*CXruRZdB@bat`z&Fb9o_c866+(1!JG8DtU+ zkb+j&wCj*q<{UA!>J}4OygLGhuCfhPBsRa{-Rgx~iSVNN$Q;Ijl&D=X++wjAA2p~; z(jz7wmnggbUc=LSJAa02F4dF%z95?SbG64{{O@9ws*9%2RlM6z)tvG za;UA>v0#QyZ*5&4a+W2@G0#B5K4Cq%<>52>7^FoXO^;y5(YRC?-u~2@K5&tc!-bka zIib}p9s4!n>l&TsdX=p&iIrKVQ9m%n4o)0^jyzB|`0!wPmOfNPoOtW(%JniGH#@r6 z!J_5xNo*zEm2sM$?qB0UK7>`4gN4Jp0yvX_a@oeBeEIj{4GU&d^y2e}#r;_g8Kx63 zbw=^H*R6pIe1I3;#g*SmwhsgF?MF2QQAHUkNi}tL1*xA1|0WE?)B08}2zLPA0dox) z*FUog9OC&$jg@aTej4~c*Tni>@r#hyKsc`pTHkAaHR^w^P54V~k>AudwzILZySO?1 z83afW@~vEm3;8pM<3-@hzd~L6j`T&E(mz81%OVRyYakGr<6rT9m2dmEc($e%e{US( zUznl=Qg&Zfv9X=46U5LK@;~sR^BWjb3v0-K5Qyj(ULt=3Vs2<_0xT8($_j8Q;9I$9 zvCiM1d`*`8w^qNHlzc507{`CaFfw!k|CJfC?>JxDoC}z6TvqQtGdKVDEZO`K=}Yd> zzXAQK<=o!@0sZewEZ4uG{Ho=t-=KVb()BltpT_7y%UFPAxvZQEFTqa)*)LvoL1b>*c|-T*>D*;4o&w{3IH+*z)So9hJnfU zfd%HYmznzp{g2TqW#|Nvb+WVNymWEdDuK%byrC|;QAe^dN2 zo@EVjW6x&W?tVANgf33zXIsk&FX)VIE!m>V^4EA=^g@=$U_j|Ei@g;J;^@ z;fdYD7~lq!f9>lt&Y!4xK%4vlRSj(H>}UaT|H}36f%7q52c!dbED0EJzc#Huko5dF zz+Vm1mlg$Zzx?|4F!iz~b`J(;i2zMZ0Ls4bM}05ZKK1~mKSTc=b;@g=Tn}J23+OZ# z>yhsz+h>6DFR0%fUw`9Q1|P-M5J2q$y5f!Ru)t@wk24T{`7*!XjH`@^{Y4NJ3kXX|h26fSocYmR5}^MFyq1|~1k-&qGfvwhSQ{saxNvjSGS|A>8kkv5F> z(r+@`(UeWEbcbfG|HwwvW5(e@W^0B3#ZZ{v8>(^W6Uv@RvLN z@3M?v?pBwx*8T*CdGuHC3p@2QhwWw9%SrTp!ghuHN7xIc|6UcBQ=3?dHT(%QWE_5T2`NQ9&S literal 0 HcmV?d00001 diff --git a/sdk/frontend/oauth2-login-sdk/README.md b/sdk/frontend/oauth2-login-sdk/README.md new file mode 100644 index 0000000..24d28b8 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/README.md @@ -0,0 +1,533 @@ + +## 安装 + +```bash +npm install unified-login-sdk --save +# 或 +yarn add unified-login-sdk +``` + +## 快速开始 + +### 基本使用 + +```typescript +import unifiedLoginSDK from 'unified-login-sdk'; + +// 初始化配置 +unifiedLoginSDK.init({ + clientId: 'your-client-id', + authorizationEndpoint: 'https://auth.example.com/authorize', + tokenEndpoint: 'https://auth.example.com/token', + userInfoEndpoint: 'https://auth.example.com/userinfo', + redirectUri: 'https://your-app.example.com/callback', + storageType: 'localStorage', + autoRefreshToken: true, + tenantId: 'your-tenant-id' // 可选,会自动添加到请求头中的tenant-id字段 +}); + +// 登录 +document.getElementById('login-btn')?.addEventListener('click', () => { + unifiedLoginSDK.login(); +}); + +// 处理回调 +if (unifiedLoginSDK.isAuthenticated()) { + // 已登录,获取用户信息 + unifiedLoginSDK.getUserInfo().then(userInfo => { + console.log('User info:', userInfo); + }); +} else if (unifiedLoginSDK.isCallback()) { + // 处理授权回调 + unifiedLoginSDK.handleCallback().then(userInfo => { + console.log('Login successful:', userInfo); + // 跳转到首页 + window.location.href = '/'; + }).catch(error => { + console.error('Login failed:', error); + }); +} + +// 退出登录 +document.getElementById('logout-btn')?.addEventListener('click', () => { + unifiedLoginSDK.logout().then(() => { + console.log('Logout successful'); + window.location.href = '/login'; + }); +}); +``` + +## 核心功能 + +### 初始化配置 + +```typescript +unifiedLoginSDK.init({ + clientId: 'your-client-id', + clientSecret: 'your-client-secret', // 可选,某些场景下需要 + authorizationEndpoint: 'https://auth.example.com/authorize', + tokenEndpoint: 'https://auth.example.com/token', + userInfoEndpoint: 'https://auth.example.com/userinfo', + redirectUri: 'https://your-app.example.com/callback', + storageType: 'localStorage', // 可选,默认localStorage + autoRefreshToken: true, // 可选,默认true + permissionsEndpoint: 'https://auth.example.com/permissions' // 可选,权限端点 +}); +``` + +### 登录流程 + +1. 调用`login()`方法跳转到授权页面 +2. 用户在授权页面登录并授权 +3. 授权服务器重定向到配置的`redirectUri` +4. 调用`handleCallback()`方法处理授权回调,获取用户信息 + +### Token管理 + +```typescript +// 获取访问令牌 +const accessToken = unifiedLoginSDK.getAccessToken(); + +// 刷新令牌 +unifiedLoginSDK.refreshToken().then(() => { + console.log('Token refreshed'); +}).catch(error => { + console.error('Failed to refresh token:', error); +}); + +// 检查是否已认证 +const isAuthenticated = unifiedLoginSDK.isAuthenticated(); +``` + +### 用户信息管理 + +```typescript +// 获取用户信息 +unifiedLoginSDK.getUserInfo().then(userInfo => { + console.log('User info:', userInfo); +}); + +// 获取用户权限列表 +unifiedLoginSDK.getPermissions().then(permissions => { + console.log('Permissions:', permissions); +}); +``` + +### 事件监听 + +```typescript +// 监听登录事件 +unifiedLoginSDK.on('login', () => { + console.log('User logged in'); +}); + +// 监听退出事件 +unifiedLoginSDK.on('logout', () => { + console.log('User logged out'); +}); + +// 监听Token过期事件 +unifiedLoginSDK.on('tokenExpired', () => { + console.log('Token expired'); + // 可以在这里执行自定义逻辑,如跳转到登录页 + unifiedLoginSDK.login(); +}); + +// 移除事件监听 +const handleLogin = () => console.log('User logged in'); +unifiedLoginSDK.on('login', handleLogin); +unifiedLoginSDK.off('login', handleLogin); +``` + +## 框架集成 + +### Vue 2 + +```javascript +// main.js +import Vue from 'vue'; +import { createVuePlugin } from 'unified-login-sdk'; +import App from './App.vue'; +import router from './router'; + +// 创建Vue插件 +const vuePlugin = createVuePlugin('localStorage'); + +// 安装插件 +Vue.use(vuePlugin, { + config: { + clientId: 'your-client-id', + authorizationEndpoint: 'https://auth.example.com/authorize', + tokenEndpoint: 'https://auth.example.com/token', + userInfoEndpoint: 'https://auth.example.com/userinfo', + redirectUri: 'https://your-app.example.com/callback' + } +}); + +new Vue({ + router, + render: h => h(App) +}).$mount('#app'); +``` + +在组件中使用: + +```vue + + + +``` + +### Vue 3 + +```javascript +// main.js +import { createApp } from 'vue'; +import { createVuePlugin } from 'unified-login-sdk'; +import App from './App.vue'; +import router from './router'; + +// 创建Vue插件 +const vuePlugin = createVuePlugin('localStorage'); + +const app = createApp(App); + +// 安装插件 +app.use(vuePlugin, { + config: { + clientId: 'your-client-id', + authorizationEndpoint: 'https://auth.example.com/authorize', + tokenEndpoint: 'https://auth.example.com/token', + userInfoEndpoint: 'https://auth.example.com/userinfo', + redirectUri: 'https://your-app.example.com/callback' + } +}); + +app.use(router); +app.mount('#app'); +``` + +在组件中使用(Composition API): + +```vue + + + +``` +``` + +## API参考 + +### 初始化 + +```typescript +init(config: SDKConfig): void +``` + +初始化SDK配置。 + +### 登录 + +```typescript +login(redirectUri?: string): void +``` + +触发登录流程,可选参数`redirectUri`可覆盖初始化时的配置。 + +### 退出登录 + +```typescript +logout(): Promise +``` + +退出登录,清除本地存储的Token和用户信息。 + +### 处理授权回调 + +```typescript +handleCallback(): Promise +``` + +处理授权回调,获取用户信息。 + +### 获取用户信息 + +```typescript +getUserInfo(): Promise +``` + +获取用户基本信息。 + +### 获取用户权限列表 + +```typescript +getPermissions(): Promise +``` + +获取用户权限列表。 + +### 检查是否已认证 + +```typescript +isAuthenticated(): boolean +``` + +检查用户是否已认证。 + +### 获取访问令牌 + +```typescript +getAccessToken(): string | null +``` + +获取访问令牌。 + +### 刷新访问令牌 + +```typescript +refreshToken(): Promise +``` + +刷新访问令牌。 + +### 事件监听 + +```typescript +on(event: 'login' | 'logout' | 'tokenExpired', callback: Function): void +``` + +监听登录、退出或Token过期事件。 + +### 移除事件监听 + +```typescript +off(event: 'login' | 'logout' | 'tokenExpired', callback: Function): void +``` + +移除事件监听。 + +## 配置选项 + +| 选项 | 类型 | 必填 | 默认值 | 描述 | +|------|------|------|--------|------| +| clientId | string | 是 | - | 客户端ID | +| clientSecret | string | 否 | - | 客户端密钥,某些场景下需要 | +| authorizationEndpoint | string | 是 | - | 授权端点URL | +| tokenEndpoint | string | 是 | - | Token端点URL | +| userInfoEndpoint | string | 是 | - | 用户信息端点URL | +| redirectUri | string | 是 | - | 重定向URL | +| storageType | 'localStorage' 'sessionStorage' 'cookie' | 否 | 'localStorage' | Token存储类型 | +| autoRefreshToken | boolean | 否 | true | 是否自动刷新Token | +| permissionsEndpoint | string | 否 | - | 权限端点URL | +| stateLength | number | 否 | 32 | 状态参数长度 | +| tenantId | string | 否 | - | 租户ID,会自动添加到请求头中的tenant-id字段 | + +## 事件处理 + +| 事件 | 描述 | +|------|------| +| login | 用户登录成功时触发 | +| logout | 用户退出登录时触发 | +| tokenExpired | Token过期时触发 | + +## 路由守卫 + +### Vue路由守卫 + +```javascript +// router/index.js +import VueRouter from 'vue-router'; +import { Auth } from 'unified-login-sdk'; +import { Storage } from 'unified-login-sdk'; +import { RouterGuard } from 'unified-login-sdk'; + +const storage = new Storage('localStorage'); +const auth = new Auth(storage); +const routerGuard = new RouterGuard(auth); + +const router = new VueRouter({ + routes: [ + { + path: '/', + name: 'Home', + component: Home + }, + { + path: '/protected', + name: 'Protected', + component: Protected, + meta: { + auth: { + requiresAuth: true, + requiredPermissions: ['read:protected'] + } + } + } + ] +}); + +// 添加路由守卫 +router.beforeEach(routerGuard.createVueGuard()); + +export default router; +``` + + + +## 错误处理 + +### 网络错误处理 + +```typescript +try { + await unifiedLoginSDK.getUserInfo(); +} catch (error) { + if (error.name === 'HttpError') { + // 处理HTTP错误 + console.error('HTTP Error:', error.status, error.message); + if (error.status === 401) { + // 未授权,跳转到登录页 + unifiedLoginSDK.login(); + } else if (error.status === 403) { + // 权限不足 + window.location.href = '/403'; + } + } else { + // 处理其他错误 + console.error('Error:', error.message); + } +} +``` + +### Token失效处理 + +```typescript +// 监听Token过期事件 +unifiedLoginSDK.on('tokenExpired', () => { + console.log('Token expired'); + // 跳转到登录页 + unifiedLoginSDK.login(); +}); +``` + +## 最佳实践 + +1. **配置安全存储**:根据项目需求选择合适的存储类型,敏感信息建议使用cookie并设置secure和httpOnly标志。 + +2. **合理设置Token过期时间**:根据项目安全性要求设置合适的Token过期时间,建议access token过期时间较短,refresh token过期时间较长。 + +3. **使用路由守卫保护敏感路由**:对需要登录或特定权限的路由使用路由守卫进行保护。 + +4. **处理网络错误**:在调用SDK方法时,使用try-catch捕获并处理可能的错误。 + +5. **监听Token过期事件**:及时处理Token过期情况,避免用户体验下降。 + +6. **不要直接暴露clientSecret**:clientSecret应该只在后端使用,前端SDK尽量避免使用clientSecret。 + +7. **使用HTTPS**:确保所有与授权服务器的通信都使用HTTPS,避免Token被窃取。 + +8. **定期清理存储**:在用户退出登录时,确保清理所有相关存储的信息。 + +## 浏览器兼容性 + +- Chrome (推荐) +- Firefox +- Safari +- Edge + +## 许可证 + +MIT License diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts b/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts new file mode 100644 index 0000000..d96f68e --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts @@ -0,0 +1,101 @@ +/** + * 认证核心逻辑 + * 实现OAuth2授权码模式的完整流程 + */ +import { EventType, RouterInfo, SDKConfig, UserInfo } from '../types'; +import { Storage } from '../utils/storage'; +/** + * 认证核心类 + */ +export declare class Auth { + private config; + private tokenManager; + private httpClient; + private storage; + private eventHandlers; + private userInfoCache; + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage: Storage); + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config: SDKConfig): void; + getToken(): string | null; + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + login(redirectUri?: string): Promise; + /** + * 退出登录 + */ + logout(): Promise; + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + handleCallback(): Promise; + getRoutes(): Promise; + /** + * 获取用户信息 + * @returns UserInfo 用户信息 + */ + getUserInfo(): UserInfo; + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + hasRole(role: string | string[]): Promise; + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + hasAllRoles(roles: string[]): Promise; + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + hasPermission(permission: string | string[]): Promise; + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + hasAllPermissions(permissions: string[]): Promise; + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated(): boolean; + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event: EventType, callback: Function): void; + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event: EventType, callback: Function): void; + /** + * 触发事件 + * @param event 事件类型 + * @param data 事件数据 + */ + private emit; + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback(): boolean; +} +//# sourceMappingURL=auth.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts.map new file mode 100644 index 0000000..7f669aa --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAGzC;;GAEG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,aAAa,CAInB;IACF,OAAO,CAAC,aAAa,CAAyB;IAE9C;;;OAGG;gBACS,OAAO,EAAE,OAAO;IAQ5B;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAM7B,QAAQ,IAAG,MAAM,GAAG,IAAI;IAIxB;;;OAGG;IACG,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAchD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC/B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAYtC;;;OAGG;IACF,WAAW,IAAI,QAAQ;IAOxB;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxD;;;;OAIG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWpD;;;;OAIG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpE;;;;OAIG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhE;;;OAGG;IACH,eAAe,IAAI,OAAO;IAK1B;;;;OAIG;IACH,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI9C;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI/C;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAUZ;;;OAGG;IACH,UAAU,IAAI,OAAO;CAGtB"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.js b/sdk/frontend/oauth2-login-sdk/dist/core/auth.js new file mode 100644 index 0000000..1fea028 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/auth.js @@ -0,0 +1,241 @@ +/** + * 认证核心逻辑 + * 实现OAuth2授权码模式的完整流程 + */ +import { TokenManager } from './token'; +import { HttpClient } from './http'; +import { buildQueryParams, isCallbackUrl, parseQueryParams } from '../utils/url'; +/** + * 认证核心类 + */ +export class Auth { + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage) { + this.config = null; + this.eventHandlers = { + login: [], + logout: [], + tokenExpired: [] + }; + this.userInfoCache = null; + this.storage = storage; + // 先创建HttpClient,初始时tokenManager为undefined + this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null); + // 然后创建TokenManager + this.tokenManager = new TokenManager(storage); + } + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config) { + this.config = config; + // 设置租户ID到HTTP客户端 + this.httpClient.setTenantId(config.tenantId); + } + getToken() { + return this.tokenManager.getToken(); + } + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + async login(redirectUri) { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const registrationId = this.config.registrationId || 'idp'; + const basepath = this.config.basepath || ''; + const path = `${basepath}/oauth2/authorization/${registrationId}`; + const tokenResponse = await this.httpClient.get(path, { needAuth: false }); + const redirect = tokenResponse.data.redirect_url; + const params = parseQueryParams(redirect); + this.storage.set(params.state, window.location.href); + window.location.href = redirect; + } + /** + * 退出登录 + */ + async logout() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + // 清除本地存储的Token和用户信息 + this.tokenManager.clearToken(); + this.userInfoCache = null; + this.storage.remove('userInfo'); + const basepath = this.config.basepath || ''; + await this.httpClient.post(`${basepath}/logout`, null, { needAuth: true }); + // 触发退出事件 + this.emit('logout'); + window.location.href = this.config.idpLogoutUrl + '?redirect=' + this.config.homePage; + } + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + async handleCallback() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const params = parseQueryParams(); + // 检查是否有错误 + if (params.error) { + throw new Error(`Authorization error: ${params.error} - ${params.error_description || ''}`); + } + // 检查是否有授权码 + if (!params.code) { + throw new Error('Authorization code not found'); + } + const registrationId = this.config.registrationId || 'idp'; + const basepath = this.config.basepath || ''; + const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}`; + const tokenResponse = await this.httpClient.get(callback, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + needAuth: false + }); + // 触发登录事件 + this.emit('login'); + this.storage.set('userInfo', tokenResponse.data.data); + this.tokenManager.saveToken(tokenResponse.headers['authorization'] || tokenResponse.headers['Authorization']); + let url = this.config.homePage; + if (params.state) { + url = this.storage.get(params.state) || url; + } + window.location.href = url; + } + async getRoutes() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const basepath = this.config.basepath || ''; + const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`, { needAuth: true }); + if (tokenResponse.status === 401) { + await this.logout(); + } + return tokenResponse.data.data; + } + /** + * 获取用户信息 + * @returns UserInfo 用户信息 + */ + getUserInfo() { + return this.storage.get("userInfo"); + } + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + async hasRole(role) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles || []; + if (Array.isArray(role)) { + // 检查是否有任一角色 + return role.some(r => roleCodes.includes(r)); + } + // 检查是否有单个角色 + return roleCodes.includes(role); + } + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + async hasAllRoles(roles) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles || []; + // 检查是否有所有角色 + return roles.every(r => roleCodes.includes(r)); + } + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + async hasPermission(permission) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const permissions = userInfo.permissions || []; + if (Array.isArray(permission)) { + // 检查是否有任一权限 + return permission.some(p => permissions.includes(p)); + } + // 检查是否有单个权限 + return permissions.includes(permission); + } + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + async hasAllPermissions(permissions) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const userPermissions = userInfo.permissions || []; + // 检查是否有所有权限 + return permissions.every(p => userPermissions.includes(p)); + } + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated() { + // 检查Token是否存在且未过期 + return !!this.tokenManager.getToken(); + } + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event, callback) { + this.eventHandlers[event].push(callback); + } + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event, callback) { + this.eventHandlers[event] = this.eventHandlers[event].filter(handler => handler !== callback); + } + /** + * 触发事件 + * @param event 事件类型 + * @param data 事件数据 + */ + emit(event, data) { + this.eventHandlers[event].forEach(handler => { + try { + handler(data); + } + catch (error) { + console.error(`Error in ${event} event handler:`, error); + } + }); + } + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback() { + return isCallbackUrl(); + } +} +//# sourceMappingURL=auth.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.js.map b/sdk/frontend/oauth2-login-sdk/dist/core/auth.js.map new file mode 100644 index 0000000..f5f40b8 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/auth.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts b/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts new file mode 100644 index 0000000..b26f8fa --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts @@ -0,0 +1,155 @@ +/** + * HTTP客户端 + * 用于与后端API进行通信 + */ +/** + * HTTP请求方法类型 + */ +type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; +/** + * HTTP请求选项 + */ +export interface HttpRequestOptions { + /** 请求方法 */ + method: HttpMethod; + /** 请求URL */ + url: string; + /** 请求头 */ + headers?: Record; + /** 请求体 */ + body?: any; + /** 是否需要认证 */ + needAuth?: boolean; +} +/** + * HTTP响应类型 + */ +export interface HttpResponse { + /** 状态码 */ + status: number; + /** 状态文本 */ + statusText: string; + /** 响应体 */ + data: T; + /** 响应头 */ + headers: Record; +} +/** + * HTTP错误类型 + */ +export declare class HttpError extends Error { + /** 状态码 */ + status: number; + /** 状态文本 */ + statusText: string; + /** 错误数据 */ + data: any; + /** + * 构造函数 + * @param message 错误信息 + * @param status 状态码 + * @param statusText 状态文本 + * @param data 错误数据 + */ + constructor(message: string, status: number, statusText: string, data: any); +} +/** + * HTTP客户端类 + */ +export declare class HttpClient { + private tokenGetter?; + private tenantId?; + /** + * 构造函数 + * @param logout + * @param tokenGetter Token获取函数 + */ + constructor(tokenGetter?: () => string | null); + /** + * 设置Token获取函数 + * @param tokenGetter Token获取函数 + */ + setTokenGetter(tokenGetter: () => string | null): void; + /** + * 设置租户ID + * @param tenantId 租户ID + */ + setTenantId(tenantId?: string): void; + /** + * 发送HTTP请求 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + request(options: HttpRequestOptions): Promise>; + /** + * 处理响应数据 + * @param response 响应对象 + * @param responseData 响应数据 + * @returns HttpResponse 处理后的响应 + */ + private handleResponse; + /** + * 检查是否为业务响应结构 + * @param responseData 响应数据 + * @returns boolean 是否为业务响应结构 + */ + private isBusinessResponse; + /** + * 获取错误信息 + * @param responseData 响应数据 + * @returns string 错误信息 + */ + private getErrorMessage; + /** + * GET请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + get(url: string, options?: Omit): Promise>; + /** + * POST请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + post(url: string, body?: any, options?: Omit): Promise>; + /** + * PUT请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + put(url: string, body?: any, options?: Omit): Promise>; + /** + * DELETE请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + delete(url: string, options?: Omit): Promise>; + /** + * PATCH请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + patch(url: string, body?: any, options?: Omit): Promise>; + /** + * 解析响应体 + * @param response 响应对象 + * @returns Promise 解析后的响应体 + */ + private parseResponse; + /** + * 解析响应头 + * @param headers 响应头对象 + * @returns Record 解析后的响应头 + */ + private parseHeaders; +} +export {}; +//# sourceMappingURL=http.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts.map new file mode 100644 index 0000000..6d65ab1 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.js b/sdk/frontend/oauth2-login-sdk/dist/core/http.js new file mode 100644 index 0000000..edbb21e --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/http.js @@ -0,0 +1,274 @@ +/** + * HTTP客户端 + * 用于与后端API进行通信 + */ +/** + * HTTP错误类型 + */ +export class HttpError extends Error { + /** + * 构造函数 + * @param message 错误信息 + * @param status 状态码 + * @param statusText 状态文本 + * @param data 错误数据 + */ + constructor(message, status, statusText, data) { + super(message); + this.name = 'HttpError'; + this.status = status; + this.statusText = statusText; + this.data = data; + } +} +/** + * HTTP客户端类 + */ +export class HttpClient { + /** + * 构造函数 + * @param logout + * @param tokenGetter Token获取函数 + */ + constructor(tokenGetter) { + this.tokenGetter = tokenGetter; + } + /** + * 设置Token获取函数 + * @param tokenGetter Token获取函数 + */ + setTokenGetter(tokenGetter) { + this.tokenGetter = tokenGetter; + } + /** + * 设置租户ID + * @param tenantId 租户ID + */ + setTenantId(tenantId) { + this.tenantId = tenantId; + } + /** + * 发送HTTP请求 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async request(options) { + const { method, url, headers = {}, body, needAuth = true } = options; + // 构建请求头 + const requestHeaders = { + 'Content-Type': 'application/json', + ...headers + }; + // 添加认证头 + const addAuthHeader = () => { + if (needAuth && this.tokenGetter) { + const token = this.tokenGetter(); + if (token) { + requestHeaders.Authorization = `${token}`; + } + } + }; + // 添加租户ID头 + if (this.tenantId) { + requestHeaders['tenant-id'] = this.tenantId; + } + addAuthHeader(); + // 构建请求配置 + const fetchOptions = { + method, + headers: requestHeaders, + credentials: 'include' // 包含cookie + }; + // 添加请求体 + if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) { + fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body); + } + try { + // 发送请求 + const response = await fetch(url, fetchOptions); + const responseData = await this.parseResponse(response); + // 检查响应状态 + if (!response.ok) { + // 如果是401错误,尝试刷新Token并重试 + if (response.status === 401) { + return { + status: response.status, + statusText: response.statusText, + data: '', + headers: this.parseHeaders(response.headers) + }; + } + // 其他错误,直接抛出 + const errorMsg = this.getErrorMessage(responseData); + throw new HttpError(errorMsg, response.status, response.statusText, responseData); + } + // 处理成功响应的业务逻辑 + return this.handleResponse(response, responseData); + } + catch (error) { + if (error instanceof HttpError) { + throw error; + } + // 网络错误或其他错误 + throw new HttpError(error instanceof Error ? error.message : 'Network Error', 0, 'Network Error', null); + } + } + /** + * 处理响应数据 + * @param response 响应对象 + * @param responseData 响应数据 + * @returns HttpResponse 处理后的响应 + */ + handleResponse(response, responseData) { + // 检查是否为业务响应结构 + if (this.isBusinessResponse(responseData)) { + // 业务响应结构:{ code, msg, data } + const { code, msg, data } = responseData; + // 检查业务状态码 + if (code !== 0 && code !== 200 && code !== '0' && code !== '200') { + // 业务错误,抛出HttpError + throw new HttpError(msg || `Business Error: ${code}`, response.status, response.statusText, responseData); + } + // 业务成功,返回data字段作为实际数据 + return { + status: response.status, + statusText: response.statusText, + data: data, + headers: this.parseHeaders(response.headers) + }; + } + // 非业务响应结构,直接返回原始数据 + return { + status: response.status, + statusText: response.statusText, + data: responseData, + headers: this.parseHeaders(response.headers) + }; + } + /** + * 检查是否为业务响应结构 + * @param responseData 响应数据 + * @returns boolean 是否为业务响应结构 + */ + isBusinessResponse(responseData) { + return typeof responseData === 'object' && + responseData !== null && + ('code' in responseData) && + ('msg' in responseData) && + ('data' in responseData); + } + /** + * 获取错误信息 + * @param responseData 响应数据 + * @returns string 错误信息 + */ + getErrorMessage(responseData) { + // 如果是业务响应结构 + if (this.isBusinessResponse(responseData)) { + return responseData.msg || `Business Error: ${responseData.code}`; + } + // 其他错误结构 + return responseData.message || responseData.error || `HTTP Error`; + } + /** + * GET请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async get(url, options) { + return this.request({ + method: 'GET', + url, + ...options + }); + } + /** + * POST请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async post(url, body, options) { + return this.request({ + method: 'POST', + url, + body, + ...options + }); + } + /** + * PUT请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async put(url, body, options) { + return this.request({ + method: 'PUT', + url, + body, + ...options + }); + } + /** + * DELETE请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async delete(url, options) { + return this.request({ + method: 'DELETE', + url, + ...options + }); + } + /** + * PATCH请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async patch(url, body, options) { + return this.request({ + method: 'PATCH', + url, + body, + ...options + }); + } + /** + * 解析响应体 + * @param response 响应对象 + * @returns Promise 解析后的响应体 + */ + async parseResponse(response) { + const contentType = response.headers.get('content-type') || ''; + if (contentType.includes('application/json')) { + return response.json(); + } + else if (contentType.includes('text/')) { + return response.text(); + } + else { + return response.blob(); + } + } + /** + * 解析响应头 + * @param headers 响应头对象 + * @returns Record 解析后的响应头 + */ + parseHeaders(headers) { + const result = {}; + headers.forEach((value, key) => { + result[key] = value; + }); + return result; + } +} +//# sourceMappingURL=http.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.js.map b/sdk/frontend/oauth2-login-sdk/dist/core/http.js.map new file mode 100644 index 0000000..a7de670 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/http.js.map @@ -0,0 +1 @@ +{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts b/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts new file mode 100644 index 0000000..f2e0f8d --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts @@ -0,0 +1,32 @@ +/** + * Token管理模块 + * 负责Token的存储、获取、刷新和过期处理 + */ +import { Storage } from '../utils/storage'; +/** + * Token管理类 + */ +export declare class TokenManager { + private storage; + /** + * 构造函数 + * @param storage 存储实例 + * @param httpClient HTTP客户端实例 + */ + constructor(storage: Storage); + /** + * 存储Token信息 + * @param tokenInfo Token信息 + */ + saveToken(tokenInfo: string): void; + /** + * 获取Token信息 + * @returns TokenInfo | null Token信息 + */ + getToken(): string | null; + /** + * 清除Token信息 + */ + clearToken(): void; +} +//# sourceMappingURL=token.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts.map new file mode 100644 index 0000000..96d0739 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IAEzB;;;;OAIG;gBACS,OAAO,EAAE,OAAO;IAI5B;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.js b/sdk/frontend/oauth2-login-sdk/dist/core/token.js new file mode 100644 index 0000000..e245fa5 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/token.js @@ -0,0 +1,38 @@ +/** + * Token管理模块 + * 负责Token的存储、获取、刷新和过期处理 + */ +/** + * Token管理类 + */ +export class TokenManager { + /** + * 构造函数 + * @param storage 存储实例 + * @param httpClient HTTP客户端实例 + */ + constructor(storage) { + this.storage = storage; + } + /** + * 存储Token信息 + * @param tokenInfo Token信息 + */ + saveToken(tokenInfo) { + this.storage.set('token', tokenInfo); + } + /** + * 获取Token信息 + * @returns TokenInfo | null Token信息 + */ + getToken() { + return this.storage.get('token'); + } + /** + * 清除Token信息 + */ + clearToken() { + this.storage.remove('token'); + } +} +//# sourceMappingURL=token.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.js.map b/sdk/frontend/oauth2-login-sdk/dist/core/token.js.map new file mode 100644 index 0000000..ecfba31 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/core/token.js.map @@ -0,0 +1 @@ +{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,OAAO,YAAY;IAGvB;;;;OAIG;IACH,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,SAAiB;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;CACF"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts b/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts new file mode 100644 index 0000000..b8691a1 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts @@ -0,0 +1,55 @@ +/** + * 路由守卫模块 + * 提供基于权限的路由拦截和未登录自动跳转登录页功能 + */ +import { Auth } from '../core/auth'; +/** + * 路由守卫选项 + */ +export interface RouterGuardOptions { + /** + * 是否需要登录 + */ + requiresAuth?: boolean; + /** + * 需要的权限列表 + */ + requiredPermissions?: string[]; + /** + * 登录后重定向的URL + */ + redirectUri?: string; + /** + * 权限不足时重定向的URL + */ + unauthorizedRedirectUri?: string; +} +/** + * 路由守卫类 + */ +export declare class RouterGuard { + private auth; + /** + * 构造函数 + * @param auth 认证实例 + */ + constructor(auth: Auth); + /** + * 检查路由权限 + * @param options 路由守卫选项 + * @returns Promise 是否通过权限检查 + */ + check(options: RouterGuardOptions): Promise; + /** + * 创建Vue路由守卫 + * @returns 路由守卫函数 + */ + createVueGuard(): (to: any, from: any, next: any) => Promise; + /** + * 检查当前用户是否有权限访问资源 + * @param permissions 需要的权限列表 + * @returns Promise 是否拥有权限 + */ + hasPermission(permissions: string | string[]): Promise; +} +//# sourceMappingURL=router.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts.map new file mode 100644 index 0000000..a6e0a1f --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/guards/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAO;IAEnB;;;OAGG;gBACS,IAAI,EAAE,IAAI;IAItB;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC1D;;;OAGG;IACH,cAAc,KACE,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG;IAgB7C;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAoBtE"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.js b/sdk/frontend/oauth2-login-sdk/dist/guards/router.js new file mode 100644 index 0000000..2bcadd6 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/guards/router.js @@ -0,0 +1,89 @@ +/** + * 路由守卫模块 + * 提供基于权限的路由拦截和未登录自动跳转登录页功能 + */ +/** + * 路由守卫类 + */ +export class RouterGuard { + /** + * 构造函数 + * @param auth 认证实例 + */ + constructor(auth) { + this.auth = auth; + } + /** + * 检查路由权限 + * @param options 路由守卫选项 + * @returns Promise 是否通过权限检查 + */ + async check(options) { + const { requiresAuth = true, requiredPermissions = [] } = options; + // 检查是否需要登录 + if (requiresAuth) { + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + // 未认证,跳转到登录页 + this.auth.login(options.redirectUri); + return false; + } + // 检查是否需要权限 + if (requiredPermissions.length > 0) { + // 获取用户权限 + const userPermissions = ['']; + // 检查是否拥有所有需要的权限 + const hasPermission = requiredPermissions.every(permission => userPermissions.includes(permission)); + if (!hasPermission) { + // 权限不足,跳转到权限不足页 + if (options.unauthorizedRedirectUri) { + window.location.href = options.unauthorizedRedirectUri; + } + return false; + } + } + } + return true; + } + /** + * 创建Vue路由守卫 + * @returns 路由守卫函数 + */ + createVueGuard() { + return async (to, from, next) => { + var _a; + // 从路由元信息中获取守卫选项 + const options = ((_a = to.meta) === null || _a === void 0 ? void 0 : _a.auth) || {}; + try { + const allowed = await this.check(options); + if (allowed) { + next(); + } + } + catch (error) { + console.error('Route guard error:', error); + next(false); + } + }; + } + /** + * 检查当前用户是否有权限访问资源 + * @param permissions 需要的权限列表 + * @returns Promise 是否拥有权限 + */ + async hasPermission(permissions) { + if (!permissions) { + return true; + } + const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions]; + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + return false; + } + // 获取用户权限 + const userPermissions = ['']; + // 检查是否拥有所有需要的权限 + return requiredPermissions.every(permission => userPermissions.includes(permission)); + } +} +//# sourceMappingURL=router.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.js.map b/sdk/frontend/oauth2-login-sdk/dist/guards/router.js.map new file mode 100644 index 0000000..fc72a2e --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/guards/router.js.map @@ -0,0 +1 @@ +{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/guards/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH;;GAEG;AACH,MAAM,OAAO,WAAW;IAGtB;;;OAGG;IACH,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,OAA2B;QACrC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,mBAAmB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAElE,WAAW;QACX,IAAI,YAAY,EAAE,CAAC;YACjB,UAAU;YACV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;gBACjC,aAAa;gBACb,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACrC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,WAAW;YACX,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,SAAS;gBACT,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC;gBAE7B,gBAAgB;gBAChB,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAC3D,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC,CAAC;gBAEF,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,gBAAgB;oBAChB,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;wBACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,uBAAuB,CAAC;oBACzD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,OAAO,KAAK,EAAE,EAAO,EAAE,IAAS,EAAE,IAAS,EAAE,EAAE;;YAC7C,gBAAgB;YAChB,MAAM,OAAO,GAAuB,CAAA,MAAA,EAAE,CAAC,IAAI,0CAAE,IAAI,KAAI,EAAE,CAAC;YAExD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,EAAE,CAAC;gBACT,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,WAA8B;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAErF,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS;QACT,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC,CAAA;QAE5B,gBAAgB;QAChB,OAAO,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAC5C,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC,CAAC;IACJ,CAAC;CACF"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.d.ts b/sdk/frontend/oauth2-login-sdk/dist/index.d.ts new file mode 100644 index 0000000..c860804 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/index.d.ts @@ -0,0 +1,20 @@ +/** + * 统一登录SDK入口文件 + * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能 + */ +export { Auth } from './core/auth'; +export { TokenManager } from './core/token'; +export { HttpClient, HttpError } from './core/http'; +export { Storage } from './utils/storage'; +export { RouterGuard, RouterGuardOptions } from './guards/router'; +export { generateRandomString, parseQueryParams, buildQueryParams, generateAuthorizationUrl, isCallbackUrl } from './utils/url'; +export * from './types'; +export { VuePlugin, createVuePlugin } from './plugins/vue'; +import { UnifiedLoginSDK } from './types'; +/** + * 默认导出的SDK实例 + */ +export declare const unifiedLoginSDK: UnifiedLoginSDK; +export default unifiedLoginSDK; +export declare const version = "1.0.0"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/index.d.ts.map new file mode 100644 index 0000000..5794fd5 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,aAAa,EACd,MAAM,aAAa,CAAC;AAGrB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAa,eAAe,EAAE,MAAM,SAAS,CAAC;AAUrD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,eA8C7B,CAAC;AAGF,eAAe,eAAe,CAAC;AAG/B,eAAO,MAAM,OAAO,UAAU,CAAC"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.esm.js b/sdk/frontend/oauth2-login-sdk/dist/index.esm.js new file mode 100644 index 0000000..d2ec6d2 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/index.esm.js @@ -0,0 +1,1192 @@ +/** + * Token管理模块 + * 负责Token的存储、获取、刷新和过期处理 + */ +/** + * Token管理类 + */ +class TokenManager { + /** + * 构造函数 + * @param storage 存储实例 + * @param httpClient HTTP客户端实例 + */ + constructor(storage) { + this.storage = storage; + } + /** + * 存储Token信息 + * @param tokenInfo Token信息 + */ + saveToken(tokenInfo) { + this.storage.set('token', tokenInfo); + } + /** + * 获取Token信息 + * @returns TokenInfo | null Token信息 + */ + getToken() { + return this.storage.get('token'); + } + /** + * 清除Token信息 + */ + clearToken() { + this.storage.remove('token'); + } +} + +/** + * HTTP客户端 + * 用于与后端API进行通信 + */ +/** + * HTTP错误类型 + */ +class HttpError extends Error { + /** + * 构造函数 + * @param message 错误信息 + * @param status 状态码 + * @param statusText 状态文本 + * @param data 错误数据 + */ + constructor(message, status, statusText, data) { + super(message); + this.name = 'HttpError'; + this.status = status; + this.statusText = statusText; + this.data = data; + } +} +/** + * HTTP客户端类 + */ +class HttpClient { + /** + * 构造函数 + * @param logout + * @param tokenGetter Token获取函数 + */ + constructor(tokenGetter) { + this.tokenGetter = tokenGetter; + } + /** + * 设置Token获取函数 + * @param tokenGetter Token获取函数 + */ + setTokenGetter(tokenGetter) { + this.tokenGetter = tokenGetter; + } + /** + * 设置租户ID + * @param tenantId 租户ID + */ + setTenantId(tenantId) { + this.tenantId = tenantId; + } + /** + * 发送HTTP请求 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async request(options) { + const { method, url, headers = {}, body, needAuth = true } = options; + // 构建请求头 + const requestHeaders = { + 'Content-Type': 'application/json', + ...headers + }; + // 添加认证头 + const addAuthHeader = () => { + if (needAuth && this.tokenGetter) { + const token = this.tokenGetter(); + if (token) { + requestHeaders.Authorization = `${token}`; + } + } + }; + // 添加租户ID头 + if (this.tenantId) { + requestHeaders['tenant-id'] = this.tenantId; + } + addAuthHeader(); + // 构建请求配置 + const fetchOptions = { + method, + headers: requestHeaders, + credentials: 'include' // 包含cookie + }; + // 添加请求体 + if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) { + fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body); + } + try { + // 发送请求 + const response = await fetch(url, fetchOptions); + const responseData = await this.parseResponse(response); + // 检查响应状态 + if (!response.ok) { + // 如果是401错误,尝试刷新Token并重试 + if (response.status === 401) { + return { + status: response.status, + statusText: response.statusText, + data: '', + headers: this.parseHeaders(response.headers) + }; + } + // 其他错误,直接抛出 + const errorMsg = this.getErrorMessage(responseData); + throw new HttpError(errorMsg, response.status, response.statusText, responseData); + } + // 处理成功响应的业务逻辑 + return this.handleResponse(response, responseData); + } + catch (error) { + if (error instanceof HttpError) { + throw error; + } + // 网络错误或其他错误 + throw new HttpError(error instanceof Error ? error.message : 'Network Error', 0, 'Network Error', null); + } + } + /** + * 处理响应数据 + * @param response 响应对象 + * @param responseData 响应数据 + * @returns HttpResponse 处理后的响应 + */ + handleResponse(response, responseData) { + // 检查是否为业务响应结构 + if (this.isBusinessResponse(responseData)) { + // 业务响应结构:{ code, msg, data } + const { code, msg, data } = responseData; + // 检查业务状态码 + if (code !== 0 && code !== 200 && code !== '0' && code !== '200') { + // 业务错误,抛出HttpError + throw new HttpError(msg || `Business Error: ${code}`, response.status, response.statusText, responseData); + } + // 业务成功,返回data字段作为实际数据 + return { + status: response.status, + statusText: response.statusText, + data: data, + headers: this.parseHeaders(response.headers) + }; + } + // 非业务响应结构,直接返回原始数据 + return { + status: response.status, + statusText: response.statusText, + data: responseData, + headers: this.parseHeaders(response.headers) + }; + } + /** + * 检查是否为业务响应结构 + * @param responseData 响应数据 + * @returns boolean 是否为业务响应结构 + */ + isBusinessResponse(responseData) { + return typeof responseData === 'object' && + responseData !== null && + ('code' in responseData) && + ('msg' in responseData) && + ('data' in responseData); + } + /** + * 获取错误信息 + * @param responseData 响应数据 + * @returns string 错误信息 + */ + getErrorMessage(responseData) { + // 如果是业务响应结构 + if (this.isBusinessResponse(responseData)) { + return responseData.msg || `Business Error: ${responseData.code}`; + } + // 其他错误结构 + return responseData.message || responseData.error || `HTTP Error`; + } + /** + * GET请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async get(url, options) { + return this.request({ + method: 'GET', + url, + ...options + }); + } + /** + * POST请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async post(url, body, options) { + return this.request({ + method: 'POST', + url, + body, + ...options + }); + } + /** + * PUT请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async put(url, body, options) { + return this.request({ + method: 'PUT', + url, + body, + ...options + }); + } + /** + * DELETE请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async delete(url, options) { + return this.request({ + method: 'DELETE', + url, + ...options + }); + } + /** + * PATCH请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async patch(url, body, options) { + return this.request({ + method: 'PATCH', + url, + body, + ...options + }); + } + /** + * 解析响应体 + * @param response 响应对象 + * @returns Promise 解析后的响应体 + */ + async parseResponse(response) { + const contentType = response.headers.get('content-type') || ''; + if (contentType.includes('application/json')) { + return response.json(); + } + else if (contentType.includes('text/')) { + return response.text(); + } + else { + return response.blob(); + } + } + /** + * 解析响应头 + * @param headers 响应头对象 + * @returns Record 解析后的响应头 + */ + parseHeaders(headers) { + const result = {}; + headers.forEach((value, key) => { + result[key] = value; + }); + return result; + } +} + +/** + * URL处理工具 + * 用于生成授权URL、解析URL参数等功能 + */ +/** + * 生成随机字符串 + * @param length 字符串长度,默认32位 + * @returns 随机字符串 + */ +function generateRandomString(length = 32) { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let result = ''; + for (let i = 0; i < length; i++) { + result += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return result; +} +/** + * 解析URL查询参数 + * @param url URL字符串,默认为当前URL + * @returns 查询参数对象 + */ +function parseQueryParams(url = window.location.href) { + const params = {}; + const queryString = url.split('?')[1]; + if (!queryString) { + return params; + } + const pairs = queryString.split('&'); + for (const pair of pairs) { + const [key, value] = pair.split('='); + if (key) { + params[decodeURIComponent(key)] = decodeURIComponent(value || ''); + } + } + return params; +} +/** + * 构建URL查询参数 + * @param params 查询参数对象 + * @returns 查询参数字符串 + */ +function buildQueryParams(params) { + const pairs = []; + for (const [key, value] of Object.entries(params)) { + if (value !== undefined && value !== null) { + pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + } + } + return pairs.length ? `?${pairs.join('&')}` : ''; +} +/** + * 生成OAuth2授权URL + * @param authorizationEndpoint 授权端点URL + * @param clientId 客户端ID + * @param redirectUri 重定向URL + * @param options 可选参数 + * @returns 授权URL + */ +function generateAuthorizationUrl(authorizationEndpoint, clientId, redirectUri, options) { + const { responseType = 'code', scope, state = generateRandomString(32), ...extraParams } = options || {}; + const params = { + client_id: clientId, + redirect_uri: redirectUri, + response_type: responseType, + state, + ...(scope ? { scope } : {}), + ...extraParams + }; + const queryString = buildQueryParams(params); + return `${authorizationEndpoint}${queryString}`; +} +/** + * 检查当前URL是否为授权回调 + * @param url URL字符串,默认为当前URL + * @returns 是否为授权回调 + */ +function isCallbackUrl(url = window.location.href) { + const params = parseQueryParams(url); + return !!params.code || !!params.error; +} + +/** + * 认证核心逻辑 + * 实现OAuth2授权码模式的完整流程 + */ +/** + * 认证核心类 + */ +class Auth { + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage) { + this.config = null; + this.eventHandlers = { + login: [], + logout: [], + tokenExpired: [] + }; + this.userInfoCache = null; + this.storage = storage; + // 先创建HttpClient,初始时tokenManager为undefined + this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null); + // 然后创建TokenManager + this.tokenManager = new TokenManager(storage); + } + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config) { + this.config = config; + // 设置租户ID到HTTP客户端 + this.httpClient.setTenantId(config.tenantId); + } + getToken() { + return this.tokenManager.getToken(); + } + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + async login(redirectUri) { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const registrationId = this.config.registrationId || 'idp'; + const basepath = this.config.basepath || ''; + const path = `${basepath}/oauth2/authorization/${registrationId}`; + const tokenResponse = await this.httpClient.get(path, { needAuth: false }); + const redirect = tokenResponse.data.redirect_url; + const params = parseQueryParams(redirect); + this.storage.set(params.state, window.location.href); + window.location.href = redirect; + } + /** + * 退出登录 + */ + async logout() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + // 清除本地存储的Token和用户信息 + this.tokenManager.clearToken(); + this.userInfoCache = null; + this.storage.remove('userInfo'); + const basepath = this.config.basepath || ''; + await this.httpClient.post(`${basepath}/logout`, null, { needAuth: true }); + // 触发退出事件 + this.emit('logout'); + window.location.href = this.config.idpLogoutUrl + '?redirect=' + this.config.homePage; + } + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + async handleCallback() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const params = parseQueryParams(); + // 检查是否有错误 + if (params.error) { + throw new Error(`Authorization error: ${params.error} - ${params.error_description || ''}`); + } + // 检查是否有授权码 + if (!params.code) { + throw new Error('Authorization code not found'); + } + const registrationId = this.config.registrationId || 'idp'; + const basepath = this.config.basepath || ''; + const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}`; + const tokenResponse = await this.httpClient.get(callback, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + needAuth: false + }); + // 触发登录事件 + this.emit('login'); + this.storage.set('userInfo', tokenResponse.data.data); + this.tokenManager.saveToken(tokenResponse.headers['authorization'] || tokenResponse.headers['Authorization']); + let url = this.config.homePage; + if (params.state) { + url = this.storage.get(params.state) || url; + } + window.location.href = url; + } + async getRoutes() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const basepath = this.config.basepath || ''; + const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`, { needAuth: true }); + if (tokenResponse.status === 401) { + await this.logout(); + } + return tokenResponse.data.data; + } + /** + * 获取用户信息 + * @returns UserInfo 用户信息 + */ + getUserInfo() { + return this.storage.get("userInfo"); + } + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + async hasRole(role) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles || []; + if (Array.isArray(role)) { + // 检查是否有任一角色 + return role.some(r => roleCodes.includes(r)); + } + // 检查是否有单个角色 + return roleCodes.includes(role); + } + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + async hasAllRoles(roles) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles || []; + // 检查是否有所有角色 + return roles.every(r => roleCodes.includes(r)); + } + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + async hasPermission(permission) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const permissions = userInfo.permissions || []; + if (Array.isArray(permission)) { + // 检查是否有任一权限 + return permission.some(p => permissions.includes(p)); + } + // 检查是否有单个权限 + return permissions.includes(permission); + } + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + async hasAllPermissions(permissions) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const userPermissions = userInfo.permissions || []; + // 检查是否有所有权限 + return permissions.every(p => userPermissions.includes(p)); + } + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated() { + // 检查Token是否存在且未过期 + return !!this.tokenManager.getToken(); + } + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event, callback) { + this.eventHandlers[event].push(callback); + } + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event, callback) { + this.eventHandlers[event] = this.eventHandlers[event].filter(handler => handler !== callback); + } + /** + * 触发事件 + * @param event 事件类型 + * @param data 事件数据 + */ + emit(event, data) { + this.eventHandlers[event].forEach(handler => { + try { + handler(data); + } + catch (error) { + console.error(`Error in ${event} event handler:`, error); + } + }); + } + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback() { + return isCallbackUrl(); + } +} + +/** + * 存储工具类 + * 支持localStorage、sessionStorage和cookie三种存储方式 + */ +/** + * 存储工具类 + */ +class Storage { + /** + * 构造函数 + * @param storageType 存储类型 + * @param prefix 存储前缀,默认'unified_login_' + */ + constructor(storageType = 'localStorage', prefix = 'unified_login_') { + this.storageType = storageType; + this.prefix = prefix; + } + /** + * 设置存储项 + * @param key 存储键 + * @param value 存储值 + * @param options 可选参数,cookie存储时使用 + */ + set(key, value, options) { + const fullKey = this.prefix + key; + const stringValue = typeof value === 'string' ? value : JSON.stringify(value); + switch (this.storageType) { + case 'localStorage': + this.setLocalStorage(fullKey, stringValue); + break; + case 'sessionStorage': + this.setSessionStorage(fullKey, stringValue); + break; + case 'cookie': + this.setCookie(fullKey, stringValue, options); + break; + } + } + /** + * 获取存储项 + * @param key 存储键 + * @returns 存储值 + */ + get(key) { + const fullKey = this.prefix + key; + let value; + switch (this.storageType) { + case 'localStorage': + value = this.getLocalStorage(fullKey); + break; + case 'sessionStorage': + value = this.getSessionStorage(fullKey); + break; + case 'cookie': + value = this.getCookie(fullKey); + break; + default: + value = null; + } + if (value === null) { + return null; + } + // 尝试解析JSON + try { + return JSON.parse(value); + } + catch (e) { + // 如果不是JSON,直接返回字符串 + return value; + } + } + /** + * 移除存储项 + * @param key 存储键 + */ + remove(key) { + const fullKey = this.prefix + key; + switch (this.storageType) { + case 'localStorage': + this.removeLocalStorage(fullKey); + break; + case 'sessionStorage': + this.removeSessionStorage(fullKey); + break; + case 'cookie': + this.removeCookie(fullKey); + break; + } + } + /** + * 清空所有存储项 + */ + clear() { + switch (this.storageType) { + case 'localStorage': + this.clearLocalStorage(); + break; + case 'sessionStorage': + this.clearSessionStorage(); + break; + case 'cookie': + this.clearCookie(); + break; + } + } + /** + * 检查存储类型是否可用 + * @returns boolean 是否可用 + */ + isAvailable() { + try { + switch (this.storageType) { + case 'localStorage': + return this.isLocalStorageAvailable(); + case 'sessionStorage': + return this.isSessionStorageAvailable(); + case 'cookie': + return typeof document !== 'undefined'; + default: + return false; + } + } + catch (e) { + return false; + } + } + // ------------------------ localStorage 操作 ------------------------ + /** + * 设置localStorage + */ + setLocalStorage(key, value) { + if (this.isLocalStorageAvailable()) { + localStorage.setItem(key, value); + } + } + /** + * 获取localStorage + */ + getLocalStorage(key) { + if (this.isLocalStorageAvailable()) { + return localStorage.getItem(key); + } + return null; + } + /** + * 移除localStorage + */ + removeLocalStorage(key) { + if (this.isLocalStorageAvailable()) { + localStorage.removeItem(key); + } + } + /** + * 清空localStorage中所有带前缀的项 + */ + clearLocalStorage() { + if (this.isLocalStorageAvailable()) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(this.prefix)) { + localStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + /** + * 检查localStorage是否可用 + */ + isLocalStorageAvailable() { + if (typeof localStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + localStorage.setItem(testKey, testKey); + localStorage.removeItem(testKey); + return true; + } + catch (e) { + return false; + } + } + // ------------------------ sessionStorage 操作 ------------------------ + /** + * 设置sessionStorage + */ + setSessionStorage(key, value) { + if (this.isSessionStorageAvailable()) { + sessionStorage.setItem(key, value); + } + } + /** + * 获取sessionStorage + */ + getSessionStorage(key) { + if (this.isSessionStorageAvailable()) { + return sessionStorage.getItem(key); + } + return null; + } + /** + * 移除sessionStorage + */ + removeSessionStorage(key) { + if (this.isSessionStorageAvailable()) { + sessionStorage.removeItem(key); + } + } + /** + * 清空sessionStorage中所有带前缀的项 + */ + clearSessionStorage() { + if (this.isSessionStorageAvailable()) { + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i); + if (key && key.startsWith(this.prefix)) { + sessionStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + /** + * 检查sessionStorage是否可用 + */ + isSessionStorageAvailable() { + if (typeof sessionStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + sessionStorage.setItem(testKey, testKey); + sessionStorage.removeItem(testKey); + return true; + } + catch (e) { + return false; + } + } + // ------------------------ cookie 操作 ------------------------ + /** + * 设置cookie + */ + setCookie(key, value, options) { + if (typeof document === 'undefined') { + return; + } + let cookieString = `${key}=${encodeURIComponent(value)}`; + if (options) { + // 设置过期时间(秒) + if (options.expires) { + const date = new Date(); + date.setTime(date.getTime() + options.expires * 1000); + cookieString += `; expires=${date.toUTCString()}`; + } + // 设置路径 + if (options.path) { + cookieString += `; path=${options.path}`; + } + // 设置域名 + if (options.domain) { + cookieString += `; domain=${options.domain}`; + } + // 设置secure + if (options.secure) { + cookieString += '; secure'; + } + } + document.cookie = cookieString; + } + /** + * 获取cookie + */ + getCookie(key) { + if (typeof document === 'undefined') { + return null; + } + const name = `${key}=`; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return null; + } + /** + * 移除cookie + */ + removeCookie(key) { + this.setCookie(key, '', { expires: -1 }); + } + /** + * 清空所有带前缀的cookie + */ + clearCookie() { + if (typeof document === 'undefined') { + return; + } + const cookies = document.cookie.split(';'); + for (const cookie of cookies) { + const eqPos = cookie.indexOf('='); + const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); + if (key.startsWith(this.prefix)) { + this.removeCookie(key); + } + } + } +} + +/** + * 路由守卫模块 + * 提供基于权限的路由拦截和未登录自动跳转登录页功能 + */ +/** + * 路由守卫类 + */ +class RouterGuard { + /** + * 构造函数 + * @param auth 认证实例 + */ + constructor(auth) { + this.auth = auth; + } + /** + * 检查路由权限 + * @param options 路由守卫选项 + * @returns Promise 是否通过权限检查 + */ + async check(options) { + const { requiresAuth = true, requiredPermissions = [] } = options; + // 检查是否需要登录 + if (requiresAuth) { + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + // 未认证,跳转到登录页 + this.auth.login(options.redirectUri); + return false; + } + // 检查是否需要权限 + if (requiredPermissions.length > 0) { + // 获取用户权限 + const userPermissions = ['']; + // 检查是否拥有所有需要的权限 + const hasPermission = requiredPermissions.every(permission => userPermissions.includes(permission)); + if (!hasPermission) { + // 权限不足,跳转到权限不足页 + if (options.unauthorizedRedirectUri) { + window.location.href = options.unauthorizedRedirectUri; + } + return false; + } + } + } + return true; + } + /** + * 创建Vue路由守卫 + * @returns 路由守卫函数 + */ + createVueGuard() { + return async (to, from, next) => { + var _a; + // 从路由元信息中获取守卫选项 + const options = ((_a = to.meta) === null || _a === void 0 ? void 0 : _a.auth) || {}; + try { + const allowed = await this.check(options); + if (allowed) { + next(); + } + } + catch (error) { + console.error('Route guard error:', error); + next(false); + } + }; + } + /** + * 检查当前用户是否有权限访问资源 + * @param permissions 需要的权限列表 + * @returns Promise 是否拥有权限 + */ + async hasPermission(permissions) { + if (!permissions) { + return true; + } + const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions]; + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + return false; + } + // 获取用户权限 + const userPermissions = ['']; + // 检查是否拥有所有需要的权限 + return requiredPermissions.every(permission => userPermissions.includes(permission)); + } +} + +/** + * Vue插件模块 + * 提供Vue应用中使用统一登录SDK的能力 + */ +/** + * Vue插件类 + */ +class VuePlugin { + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage) { + this.auth = new Auth(storage); + this.routerGuard = new RouterGuard(this.auth); + } + /** + * 安装Vue插件 + * @param app Vue构造函数或Vue 3应用实例 + * @param options 插件选项 + */ + install(app, options) { + const { config, pluginName = 'unifiedLogin' } = options; + // 初始化SDK + this.auth.init(config); + // 判断是Vue 2还是Vue 3 + const isVue3 = typeof app.config !== 'undefined'; + if (isVue3) { + // Vue 3 + // 在全局属性上挂载SDK实例 + app.config.globalProperties[`${pluginName}`] = this.auth; + app.config.globalProperties.$auth = this.auth; // 兼容简写 + // 提供Vue组件内的注入 + app.provide(pluginName, this.auth); + app.provide('auth', this.auth); // 兼容简写 + // 处理路由守卫 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + else { + // Vue 2 + // 在Vue实例上挂载SDK实例 + app.prototype[`${pluginName}`] = this.auth; + app.prototype.$auth = this.auth; // 兼容简写 + // 全局混入 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + } + /** + * 获取认证实例 + * @returns Auth 认证实例 + */ + getAuth() { + return this.auth; + } + /** + * 获取路由守卫实例 + * @returns RouterGuard 路由守卫实例 + */ + getRouterGuard() { + return this.routerGuard; + } +} +/** + * 创建Vue插件实例 + * @param storageType 存储类型 + * @returns VuePlugin Vue插件实例 + */ +function createVuePlugin(storageType) { + const storage = new Storage(storageType); + return new VuePlugin(storage); +} + +/** + * 统一登录SDK入口文件 + * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能 + */ +// 导出核心类和功能 +/** + * 默认SDK实例 + */ +const defaultStorage = new Storage(); +const defaultAuth = new Auth(defaultStorage); +/** + * 默认导出的SDK实例 + */ +const unifiedLoginSDK = { + init: (config) => { + defaultAuth.init(config); + }, + getToken: () => { + return defaultAuth.getToken(); + }, + login: (redirectUri) => { + return defaultAuth.login(redirectUri); + }, + logout: () => { + return defaultAuth.logout(); + }, + handleCallback: () => { + return defaultAuth.handleCallback(); + }, + getRoutes: () => { + return defaultAuth.getRoutes(); + }, + getUserInfo: () => { + return defaultAuth.getUserInfo(); + }, + isAuthenticated: () => { + return defaultAuth.isAuthenticated(); + }, + hasRole: (role) => { + return defaultAuth.hasRole(role); + }, + hasAllRoles: (roles) => { + return defaultAuth.hasAllRoles(roles); + }, + hasPermission: (permission) => { + return defaultAuth.hasPermission(permission); + }, + hasAllPermissions: (permissions) => { + return defaultAuth.hasAllPermissions(permissions); + }, + on: (event, callback) => { + return defaultAuth.on(event, callback); + }, + off: (event, callback) => { + return defaultAuth.off(event, callback); + }, + isCallback: () => { + return defaultAuth.isCallback(); + } +}; +// 版本信息 +const version = '1.0.0'; + +export { Auth, HttpClient, HttpError, RouterGuard, Storage, TokenManager, VuePlugin, buildQueryParams, createVuePlugin, unifiedLoginSDK as default, generateAuthorizationUrl, generateRandomString, isCallbackUrl, parseQueryParams, unifiedLoginSDK, version }; +//# sourceMappingURL=index.esm.js.map diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.esm.js.map b/sdk/frontend/oauth2-login-sdk/dist/index.esm.js.map new file mode 100644 index 0000000..14968ca --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/index.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.esm.js","sources":["../src/core/token.ts","../src/core/http.ts","../src/utils/url.ts","../src/core/auth.ts","../src/utils/storage.ts","../src/guards/router.ts","../src/plugins/vue.ts","../src/index.ts"],"sourcesContent":["/**\r\n * Token管理模块\r\n * 负责Token的存储、获取、刷新和过期处理\r\n */\r\n\r\nimport { Storage } from '../utils/storage';\r\n\r\n/**\r\n * Token管理类\r\n */\r\nexport class TokenManager {\r\n private storage: Storage;\r\n\r\n /**\r\n * 构造函数\r\n * @param storage 存储实例\r\n * @param httpClient HTTP客户端实例\r\n */\r\n constructor(storage: Storage) {\r\n this.storage = storage;\r\n }\r\n\r\n /**\r\n * 存储Token信息\r\n * @param tokenInfo Token信息\r\n */\r\n saveToken(tokenInfo: string): void {\r\n this.storage.set('token', tokenInfo);\r\n }\r\n\r\n /**\r\n * 获取Token信息\r\n * @returns TokenInfo | null Token信息\r\n */\r\n getToken(): string | null {\r\n return this.storage.get('token');\r\n }\r\n\r\n /**\r\n * 清除Token信息\r\n */\r\n clearToken(): void {\r\n this.storage.remove('token');\r\n }\r\n}\r\n","/**\r\n * HTTP客户端\r\n * 用于与后端API进行通信\r\n */\r\n\r\n/**\r\n * HTTP请求方法类型\r\n */\r\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\r\n\r\n/**\r\n * HTTP请求选项\r\n */\r\nexport interface HttpRequestOptions {\r\n /** 请求方法 */\r\n method: HttpMethod;\r\n /** 请求URL */\r\n url: string;\r\n /** 请求头 */\r\n headers?: Record;\r\n /** 请求体 */\r\n body?: any;\r\n /** 是否需要认证 */\r\n needAuth?: boolean;\r\n}\r\n\r\n/**\r\n * HTTP响应类型\r\n */\r\nexport interface HttpResponse {\r\n /** 状态码 */\r\n status: number;\r\n /** 状态文本 */\r\n statusText: string;\r\n /** 响应体 */\r\n data: T;\r\n /** 响应头 */\r\n headers: Record;\r\n}\r\n\r\n/**\r\n * HTTP错误类型\r\n */\r\nexport class HttpError extends Error {\r\n /** 状态码 */\r\n public status: number;\r\n /** 状态文本 */\r\n public statusText: string;\r\n /** 错误数据 */\r\n public data: any;\r\n\r\n /**\r\n * 构造函数\r\n * @param message 错误信息\r\n * @param status 状态码\r\n * @param statusText 状态文本\r\n * @param data 错误数据\r\n */\r\n constructor(message: string, status: number, statusText: string, data: any) {\r\n super(message);\r\n this.name = 'HttpError';\r\n this.status = status;\r\n this.statusText = statusText;\r\n this.data = data;\r\n }\r\n}\r\n\r\n/**\r\n * HTTP客户端类\r\n */\r\nexport class HttpClient {\r\n private tokenGetter?: () => string | null;\r\n private tenantId?: string;\r\n\r\n /**\r\n * 构造函数\r\n * @param logout\r\n * @param tokenGetter Token获取函数\r\n */\r\n constructor(tokenGetter?: () => string | null) {\r\n this.tokenGetter = tokenGetter;\r\n\r\n }\r\n\r\n /**\r\n * 设置Token获取函数\r\n * @param tokenGetter Token获取函数\r\n */\r\n setTokenGetter(tokenGetter: () => string | null): void {\r\n this.tokenGetter = tokenGetter;\r\n }\r\n\r\n /**\r\n * 设置租户ID\r\n * @param tenantId 租户ID\r\n */\r\n setTenantId(tenantId?: string): void {\r\n this.tenantId = tenantId;\r\n }\r\n\r\n /**\r\n * 发送HTTP请求\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async request(options: HttpRequestOptions): Promise> {\r\n const {\r\n method,\r\n url,\r\n headers = {},\r\n body,\r\n needAuth = true\r\n } = options;\r\n\r\n // 构建请求头\r\n const requestHeaders: Record = {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n };\r\n\r\n // 添加认证头\r\n const addAuthHeader = () => {\r\n if (needAuth && this.tokenGetter) {\r\n const token = this.tokenGetter();\r\n if (token) {\r\n requestHeaders.Authorization = `${token}`;\r\n }\r\n }\r\n };\r\n\r\n // 添加租户ID头\r\n if (this.tenantId) {\r\n requestHeaders['tenant-id'] = this.tenantId;\r\n }\r\n\r\n addAuthHeader();\r\n\r\n // 构建请求配置\r\n const fetchOptions: RequestInit = {\r\n method,\r\n headers: requestHeaders,\r\n credentials: 'include' // 包含cookie\r\n };\r\n\r\n // 添加请求体\r\n if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\r\n fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body);\r\n }\r\n\r\n try {\r\n // 发送请求\r\n const response = await fetch(url, fetchOptions);\r\n const responseData = await this.parseResponse(response);\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n // 如果是401错误,尝试刷新Token并重试\r\n if (response.status === 401) {\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: '' as T,\r\n headers: this.parseHeaders(response.headers)\r\n }\r\n }\r\n \r\n // 其他错误,直接抛出\r\n const errorMsg = this.getErrorMessage(responseData);\r\n throw new HttpError(\r\n errorMsg,\r\n response.status,\r\n response.statusText,\r\n responseData\r\n );\r\n }\r\n\r\n // 处理成功响应的业务逻辑\r\n return this.handleResponse(response, responseData);\r\n } catch (error) {\r\n if (error instanceof HttpError) {\r\n throw error;\r\n }\r\n\r\n // 网络错误或其他错误\r\n throw new HttpError(\r\n error instanceof Error ? error.message : 'Network Error',\r\n 0,\r\n 'Network Error',\r\n null\r\n );\r\n }\r\n }\r\n \r\n\r\n\r\n /**\r\n * 处理响应数据\r\n * @param response 响应对象\r\n * @param responseData 响应数据\r\n * @returns HttpResponse 处理后的响应\r\n */\r\n private handleResponse(response: Response, responseData: any): HttpResponse {\r\n // 检查是否为业务响应结构\r\n if (this.isBusinessResponse(responseData)) {\r\n // 业务响应结构:{ code, msg, data }\r\n const { code, msg, data } = responseData;\r\n \r\n // 检查业务状态码\r\n if (code !== 0 && code !== 200 && code !== '0' && code !== '200') {\r\n // 业务错误,抛出HttpError\r\n throw new HttpError(\r\n msg || `Business Error: ${code}`,\r\n response.status,\r\n response.statusText,\r\n responseData\r\n );\r\n }\r\n \r\n // 业务成功,返回data字段作为实际数据\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: data as T,\r\n headers: this.parseHeaders(response.headers)\r\n };\r\n }\r\n \r\n // 非业务响应结构,直接返回原始数据\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: responseData as T,\r\n headers: this.parseHeaders(response.headers)\r\n };\r\n }\r\n\r\n /**\r\n * 检查是否为业务响应结构\r\n * @param responseData 响应数据\r\n * @returns boolean 是否为业务响应结构\r\n */\r\n private isBusinessResponse(responseData: any): boolean {\r\n return typeof responseData === 'object' && \r\n responseData !== null && \r\n ('code' in responseData) && \r\n ('msg' in responseData) && \r\n ('data' in responseData);\r\n }\r\n\r\n /**\r\n * 获取错误信息\r\n * @param responseData 响应数据\r\n * @returns string 错误信息\r\n */\r\n private getErrorMessage(responseData: any): string {\r\n // 如果是业务响应结构\r\n if (this.isBusinessResponse(responseData)) {\r\n return responseData.msg || `Business Error: ${responseData.code}`;\r\n }\r\n \r\n // 其他错误结构\r\n return responseData.message || responseData.error || `HTTP Error`;\r\n }\r\n\r\n /**\r\n * GET请求\r\n * @param url 请求URL\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async get(url: string, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'GET',\r\n url,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * POST请求\r\n * @param url 请求URL\r\n * @param body 请求体\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async post(url: string, body?: any, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'POST',\r\n url,\r\n body,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * PUT请求\r\n * @param url 请求URL\r\n * @param body 请求体\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async put(url: string, body?: any, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'PUT',\r\n url,\r\n body,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * DELETE请求\r\n * @param url 请求URL\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async delete(url: string, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'DELETE',\r\n url,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * PATCH请求\r\n * @param url 请求URL\r\n * @param body 请求体\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async patch(url: string, body?: any, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'PATCH',\r\n url,\r\n body,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * 解析响应体\r\n * @param response 响应对象\r\n * @returns Promise 解析后的响应体\r\n */\r\n private async parseResponse(response: Response): Promise {\r\n const contentType = response.headers.get('content-type') || '';\r\n \r\n if (contentType.includes('application/json')) {\r\n return response.json();\r\n } else if (contentType.includes('text/')) {\r\n return response.text();\r\n } else {\r\n return response.blob();\r\n }\r\n }\r\n\r\n /**\r\n * 解析响应头\r\n * @param headers 响应头对象\r\n * @returns Record 解析后的响应头\r\n */\r\n private parseHeaders(headers: Headers): Record {\r\n const result: Record = {};\r\n headers.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n }\r\n}\r\n","/**\r\n * URL处理工具\r\n * 用于生成授权URL、解析URL参数等功能\r\n */\r\n\r\n/**\r\n * 生成随机字符串\r\n * @param length 字符串长度,默认32位\r\n * @returns 随机字符串\r\n */\r\nexport function generateRandomString(length: number = 32): string {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let result = '';\r\n for (let i = 0; i < length; i++) {\r\n result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * 解析URL查询参数\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 查询参数对象\r\n */\r\nexport function parseQueryParams(url: string = window.location.href): Record {\r\n const params: Record = {};\r\n const queryString = url.split('?')[1];\r\n if (!queryString) {\r\n return params;\r\n }\r\n\r\n const pairs = queryString.split('&');\r\n for (const pair of pairs) {\r\n const [key, value] = pair.split('=');\r\n if (key) {\r\n params[decodeURIComponent(key)] = decodeURIComponent(value || '');\r\n }\r\n }\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * 构建URL查询参数\r\n * @param params 查询参数对象\r\n * @returns 查询参数字符串\r\n */\r\nexport function buildQueryParams(params: Record): string {\r\n const pairs: string[] = [];\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value !== undefined && value !== null) {\r\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\r\n }\r\n }\r\n return pairs.length ? `?${pairs.join('&')}` : '';\r\n}\r\n\r\n/**\r\n * 生成OAuth2授权URL\r\n * @param authorizationEndpoint 授权端点URL\r\n * @param clientId 客户端ID\r\n * @param redirectUri 重定向URL\r\n * @param options 可选参数\r\n * @returns 授权URL\r\n */\r\nexport function generateAuthorizationUrl(\r\n authorizationEndpoint: string,\r\n clientId: string,\r\n redirectUri: string,\r\n options?: {\r\n responseType?: string;\r\n scope?: string;\r\n state?: string;\r\n [key: string]: any;\r\n }\r\n): string {\r\n const {\r\n responseType = 'code',\r\n scope,\r\n state = generateRandomString(32),\r\n ...extraParams\r\n } = options || {};\r\n\r\n const params = {\r\n client_id: clientId,\r\n redirect_uri: redirectUri,\r\n response_type: responseType,\r\n state,\r\n ...(scope ? { scope } : {}),\r\n ...extraParams\r\n };\r\n\r\n const queryString = buildQueryParams(params);\r\n return `${authorizationEndpoint}${queryString}`;\r\n}\r\n\r\n/**\r\n * 检查当前URL是否为授权回调\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 是否为授权回调\r\n */\r\nexport function isCallbackUrl(url: string = window.location.href): boolean {\r\n const params = parseQueryParams(url);\r\n return !!params.code || !!params.error;\r\n}\r\n\r\n/**\r\n * 获取当前URL的路径名\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 路径名\r\n */\r\nexport function getPathname(url: string = window.location.href): string {\r\n const urlObj = new URL(url);\r\n return urlObj.pathname;\r\n}\r\n\r\n/**\r\n * 获取当前URL的主机名\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 主机名\r\n */\r\nexport function getHostname(url: string = window.location.href): string {\r\n const urlObj = new URL(url);\r\n return urlObj.hostname;\r\n}\r\n","/**\r\n * 认证核心逻辑\r\n * 实现OAuth2授权码模式的完整流程\r\n */\r\n\r\nimport {EventType, RouterInfo, SDKConfig, UserInfo} from '../types';\r\nimport {TokenManager} from './token';\r\nimport {HttpClient} from './http';\r\nimport {Storage} from '../utils/storage';\r\nimport {buildQueryParams, isCallbackUrl, parseQueryParams} from '../utils/url';\r\n\r\n/**\r\n * 认证核心类\r\n */\r\nexport class Auth {\r\n private config: SDKConfig | null = null;\r\n private tokenManager: TokenManager;\r\n private httpClient: HttpClient;\r\n private storage: Storage;\r\n private eventHandlers: Record = {\r\n login: [],\r\n logout: [],\r\n tokenExpired: []\r\n };\r\n private userInfoCache: UserInfo | null = null;\r\n\r\n /**\r\n * 构造函数\r\n * @param storage 存储实例\r\n */\r\n constructor(storage: Storage) {\r\n this.storage = storage;\r\n // 先创建HttpClient,初始时tokenManager为undefined\r\n this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null);\r\n // 然后创建TokenManager\r\n this.tokenManager = new TokenManager(storage);\r\n }\r\n\r\n /**\r\n * 初始化SDK配置\r\n * @param config SDK配置选项\r\n */\r\n init(config: SDKConfig): void {\r\n this.config = config;\r\n // 设置租户ID到HTTP客户端\r\n this.httpClient.setTenantId(config.tenantId);\r\n }\r\n\r\n getToken():string | null{\r\n return this.tokenManager.getToken()\r\n }\r\n\r\n /**\r\n * 触发登录流程\r\n * @param redirectUri 可选的重定向URL,覆盖初始化时的配置\r\n */\r\n async login(redirectUri?: string): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n const registrationId = this.config.registrationId || 'idp'\r\n const basepath = this.config.basepath || ''\r\n const path = `${basepath}/oauth2/authorization/${registrationId}`\r\n const tokenResponse = await this.httpClient.get(path,{needAuth:false})\r\n const redirect = tokenResponse.data.redirect_url\r\n const params = parseQueryParams(redirect)\r\n this.storage.set(params.state,window.location.href)\r\n window.location.href = redirect\r\n }\r\n\r\n /**\r\n * 退出登录\r\n */\r\n async logout(): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n // 清除本地存储的Token和用户信息\r\n this.tokenManager.clearToken();\r\n this.userInfoCache = null;\r\n this.storage.remove('userInfo');\r\n const basepath = this.config.basepath || ''\r\n await this.httpClient.post(`${basepath}/logout`,null,{needAuth:true})\r\n // 触发退出事件\r\n this.emit('logout');\r\n window.location.href = this.config.idpLogoutUrl+'?redirect='+this.config.homePage;\r\n }\r\n\r\n /**\r\n * 处理授权回调\r\n * @returns Promise 用户信息\r\n */\r\n async handleCallback(): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n\r\n const params = parseQueryParams();\r\n \r\n // 检查是否有错误\r\n if (params.error) {\r\n throw new Error(`Authorization error: ${params.error} - ${params.error_description || ''}`);\r\n }\r\n\r\n // 检查是否有授权码\r\n if (!params.code) {\r\n throw new Error('Authorization code not found');\r\n }\r\n\r\n const registrationId = this.config.registrationId || 'idp'\r\n const basepath = this.config.basepath || ''\r\n const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}`\r\n const tokenResponse = await this.httpClient.get(callback,{\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n },\r\n needAuth: false\r\n })\r\n // 触发登录事件\r\n this.emit('login');\r\n this.storage.set('userInfo', tokenResponse.data.data);\r\n this.tokenManager.saveToken(tokenResponse.headers['authorization']||tokenResponse.headers['Authorization'])\r\n let url = this.config.homePage\r\n if(params.state){\r\n url = this.storage.get(params.state) || url;\r\n }\r\n window.location.href = url;\r\n\r\n }\r\n\r\n async getRoutes(): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n const basepath = this.config.basepath || ''\r\n const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`,{needAuth:true})\r\n if(tokenResponse.status===401){\r\n await this.logout()\r\n }\r\n return tokenResponse.data.data\r\n\r\n }\r\n /**\r\n * 获取用户信息\r\n * @returns UserInfo 用户信息\r\n */\r\n getUserInfo(): UserInfo {\r\n return this.storage.get(\"userInfo\");\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n * 检查用户是否有指定角色\r\n * @param role 角色编码或角色编码列表\r\n * @returns Promise 是否有指定角色\r\n */\r\n async hasRole(role: string | string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const roleCodes = userInfo.roles||[];\r\n\r\n if (Array.isArray(role)) {\r\n // 检查是否有任一角色\r\n return role.some(r => roleCodes.includes(r));\r\n }\r\n\r\n // 检查是否有单个角色\r\n return roleCodes.includes(role);\r\n }\r\n\r\n /**\r\n * 检查用户是否有所有指定角色\r\n * @param roles 角色编码列表\r\n * @returns Promise 是否有所有指定角色\r\n */\r\n async hasAllRoles(roles: string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const roleCodes = userInfo.roles||[];\r\n // 检查是否有所有角色\r\n return roles.every(r => roleCodes.includes(r));\r\n }\r\n\r\n /**\r\n * 检查用户是否有指定权限\r\n * @param permission 权限标识或权限标识列表\r\n * @returns Promise 是否有指定权限\r\n */\r\n async hasPermission(permission: string | string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const permissions = userInfo.permissions||[];\r\n\r\n if (Array.isArray(permission)) {\r\n // 检查是否有任一权限\r\n return permission.some(p => permissions.includes(p));\r\n }\r\n\r\n // 检查是否有单个权限\r\n return permissions.includes(permission);\r\n }\r\n\r\n /**\r\n * 检查用户是否有所有指定权限\r\n * @param permissions 权限标识列表\r\n * @returns Promise 是否有所有指定权限\r\n */\r\n async hasAllPermissions(permissions: string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const userPermissions = userInfo.permissions||[];\r\n\r\n // 检查是否有所有权限\r\n return permissions.every(p => userPermissions.includes(p));\r\n }\r\n\r\n /**\r\n * 检查用户是否已认证\r\n * @returns boolean 是否已认证\r\n */\r\n isAuthenticated(): boolean {\r\n // 检查Token是否存在且未过期\r\n return !!this.tokenManager.getToken();\r\n }\r\n\r\n /**\r\n * 事件监听\r\n * @param event 事件类型\r\n * @param callback 回调函数\r\n */\r\n on(event: EventType, callback: Function): void {\r\n this.eventHandlers[event].push(callback);\r\n }\r\n\r\n /**\r\n * 移除事件监听\r\n * @param event 事件类型\r\n * @param callback 回调函数\r\n */\r\n off(event: EventType, callback: Function): void {\r\n this.eventHandlers[event] = this.eventHandlers[event].filter(handler => handler !== callback);\r\n }\r\n\r\n /**\r\n * 触发事件\r\n * @param event 事件类型\r\n * @param data 事件数据\r\n */\r\n private emit(event: EventType, data?: any): void {\r\n this.eventHandlers[event].forEach(handler => {\r\n try {\r\n handler(data);\r\n } catch (error) {\r\n console.error(`Error in ${event} event handler:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 检查当前URL是否为授权回调\r\n * @returns boolean 是否为授权回调\r\n */\r\n isCallback(): boolean {\r\n return isCallbackUrl();\r\n }\r\n}\r\n","/**\r\n * 存储工具类\r\n * 支持localStorage、sessionStorage和cookie三种存储方式\r\n */\r\n\r\ntype StorageType = 'localStorage' | 'sessionStorage' | 'cookie';\r\n\r\n/**\r\n * 存储工具类\r\n */\r\nexport class Storage {\r\n private storageType: StorageType;\r\n private prefix: string;\r\n\r\n /**\r\n * 构造函数\r\n * @param storageType 存储类型\r\n * @param prefix 存储前缀,默认'unified_login_'\r\n */\r\n constructor(storageType: StorageType = 'localStorage', prefix: string = 'unified_login_') {\r\n this.storageType = storageType;\r\n this.prefix = prefix;\r\n }\r\n\r\n /**\r\n * 设置存储项\r\n * @param key 存储键\r\n * @param value 存储值\r\n * @param options 可选参数,cookie存储时使用\r\n */\r\n set(key: string, value: any, options?: { expires?: number; path?: string; domain?: string; secure?: boolean }): void {\r\n const fullKey = this.prefix + key;\r\n const stringValue = typeof value === 'string' ? value : JSON.stringify(value);\r\n\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n this.setLocalStorage(fullKey, stringValue);\r\n break;\r\n case 'sessionStorage':\r\n this.setSessionStorage(fullKey, stringValue);\r\n break;\r\n case 'cookie':\r\n this.setCookie(fullKey, stringValue, options);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 获取存储项\r\n * @param key 存储键\r\n * @returns 存储值\r\n */\r\n get(key: string): any {\r\n const fullKey = this.prefix + key;\r\n let value: any;\r\n\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n value = this.getLocalStorage(fullKey);\r\n break;\r\n case 'sessionStorage':\r\n value = this.getSessionStorage(fullKey);\r\n break;\r\n case 'cookie':\r\n value = this.getCookie(fullKey);\r\n break;\r\n default:\r\n value = null;\r\n }\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n // 尝试解析JSON\r\n try {\r\n return JSON.parse(value);\r\n } catch (e) {\r\n // 如果不是JSON,直接返回字符串\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * 移除存储项\r\n * @param key 存储键\r\n */\r\n remove(key: string): void {\r\n const fullKey = this.prefix + key;\r\n\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n this.removeLocalStorage(fullKey);\r\n break;\r\n case 'sessionStorage':\r\n this.removeSessionStorage(fullKey);\r\n break;\r\n case 'cookie':\r\n this.removeCookie(fullKey);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 清空所有存储项\r\n */\r\n clear(): void {\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n this.clearLocalStorage();\r\n break;\r\n case 'sessionStorage':\r\n this.clearSessionStorage();\r\n break;\r\n case 'cookie':\r\n this.clearCookie();\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 检查存储类型是否可用\r\n * @returns boolean 是否可用\r\n */\r\n isAvailable(): boolean {\r\n try {\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n return this.isLocalStorageAvailable();\r\n case 'sessionStorage':\r\n return this.isSessionStorageAvailable();\r\n case 'cookie':\r\n return typeof document !== 'undefined';\r\n default:\r\n return false;\r\n }\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // ------------------------ localStorage 操作 ------------------------\r\n\r\n /**\r\n * 设置localStorage\r\n */\r\n private setLocalStorage(key: string, value: string): void {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n /**\r\n * 获取localStorage\r\n */\r\n private getLocalStorage(key: string): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 移除localStorage\r\n */\r\n private removeLocalStorage(key: string): void {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * 清空localStorage中所有带前缀的项\r\n */\r\n private clearLocalStorage(): void {\r\n if (this.isLocalStorageAvailable()) {\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key && key.startsWith(this.prefix)) {\r\n localStorage.removeItem(key);\r\n i--; // 索引调整\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 检查localStorage是否可用\r\n */\r\n private isLocalStorageAvailable(): boolean {\r\n if (typeof localStorage === 'undefined') {\r\n return false;\r\n }\r\n try {\r\n const testKey = '__storage_test__';\r\n localStorage.setItem(testKey, testKey);\r\n localStorage.removeItem(testKey);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // ------------------------ sessionStorage 操作 ------------------------\r\n\r\n /**\r\n * 设置sessionStorage\r\n */\r\n private setSessionStorage(key: string, value: string): void {\r\n if (this.isSessionStorageAvailable()) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n /**\r\n * 获取sessionStorage\r\n */\r\n private getSessionStorage(key: string): string | null {\r\n if (this.isSessionStorageAvailable()) {\r\n return sessionStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 移除sessionStorage\r\n */\r\n private removeSessionStorage(key: string): void {\r\n if (this.isSessionStorageAvailable()) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * 清空sessionStorage中所有带前缀的项\r\n */\r\n private clearSessionStorage(): void {\r\n if (this.isSessionStorageAvailable()) {\r\n for (let i = 0; i < sessionStorage.length; i++) {\r\n const key = sessionStorage.key(i);\r\n if (key && key.startsWith(this.prefix)) {\r\n sessionStorage.removeItem(key);\r\n i--; // 索引调整\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 检查sessionStorage是否可用\r\n */\r\n private isSessionStorageAvailable(): boolean {\r\n if (typeof sessionStorage === 'undefined') {\r\n return false;\r\n }\r\n try {\r\n const testKey = '__storage_test__';\r\n sessionStorage.setItem(testKey, testKey);\r\n sessionStorage.removeItem(testKey);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // ------------------------ cookie 操作 ------------------------\r\n\r\n /**\r\n * 设置cookie\r\n */\r\n private setCookie(\r\n key: string,\r\n value: string,\r\n options?: { expires?: number; path?: string; domain?: string; secure?: boolean }\r\n ): void {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n let cookieString = `${key}=${encodeURIComponent(value)}`;\r\n\r\n if (options) {\r\n // 设置过期时间(秒)\r\n if (options.expires) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + options.expires * 1000);\r\n cookieString += `; expires=${date.toUTCString()}`;\r\n }\r\n\r\n // 设置路径\r\n if (options.path) {\r\n cookieString += `; path=${options.path}`;\r\n }\r\n\r\n // 设置域名\r\n if (options.domain) {\r\n cookieString += `; domain=${options.domain}`;\r\n }\r\n\r\n // 设置secure\r\n if (options.secure) {\r\n cookieString += '; secure';\r\n }\r\n }\r\n\r\n document.cookie = cookieString;\r\n }\r\n\r\n /**\r\n * 获取cookie\r\n */\r\n private getCookie(key: string): string | null {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n\r\n const name = `${key}=`;\r\n const decodedCookie = decodeURIComponent(document.cookie);\r\n const ca = decodedCookie.split(';');\r\n\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 移除cookie\r\n */\r\n private removeCookie(key: string): void {\r\n this.setCookie(key, '', { expires: -1 });\r\n }\r\n\r\n /**\r\n * 清空所有带前缀的cookie\r\n */\r\n private clearCookie(): void {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n const cookies = document.cookie.split(';');\r\n for (const cookie of cookies) {\r\n const eqPos = cookie.indexOf('=');\r\n const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim();\r\n if (key.startsWith(this.prefix)) {\r\n this.removeCookie(key);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * 路由守卫模块\r\n * 提供基于权限的路由拦截和未登录自动跳转登录页功能\r\n */\r\n\r\nimport { Auth } from '../core/auth';\r\n\r\n/**\r\n * 路由守卫选项\r\n */\r\nexport interface RouterGuardOptions {\r\n /**\r\n * 是否需要登录\r\n */\r\n requiresAuth?: boolean;\r\n /**\r\n * 需要的权限列表\r\n */\r\n requiredPermissions?: string[];\r\n /**\r\n * 登录后重定向的URL\r\n */\r\n redirectUri?: string;\r\n /**\r\n * 权限不足时重定向的URL\r\n */\r\n unauthorizedRedirectUri?: string;\r\n}\r\n\r\n/**\r\n * 路由守卫类\r\n */\r\nexport class RouterGuard {\r\n private auth: Auth;\r\n\r\n /**\r\n * 构造函数\r\n * @param auth 认证实例\r\n */\r\n constructor(auth: Auth) {\r\n this.auth = auth;\r\n }\r\n\r\n /**\r\n * 检查路由权限\r\n * @param options 路由守卫选项\r\n * @returns Promise 是否通过权限检查\r\n */\r\n async check(options: RouterGuardOptions): Promise {\r\n const { requiresAuth = true, requiredPermissions = [] } = options;\r\n\r\n // 检查是否需要登录\r\n if (requiresAuth) {\r\n // 检查是否已认证\r\n if (!this.auth.isAuthenticated()) {\r\n // 未认证,跳转到登录页\r\n this.auth.login(options.redirectUri);\r\n return false;\r\n }\r\n\r\n // 检查是否需要权限\r\n if (requiredPermissions.length > 0) {\r\n // 获取用户权限\r\n const userPermissions = [''];\r\n \r\n // 检查是否拥有所有需要的权限\r\n const hasPermission = requiredPermissions.every(permission => \r\n userPermissions.includes(permission)\r\n );\r\n\r\n if (!hasPermission) {\r\n // 权限不足,跳转到权限不足页\r\n if (options.unauthorizedRedirectUri) {\r\n window.location.href = options.unauthorizedRedirectUri;\r\n }\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 创建Vue路由守卫\r\n * @returns 路由守卫函数\r\n */\r\n createVueGuard() {\r\n return async (to: any, from: any, next: any) => {\r\n // 从路由元信息中获取守卫选项\r\n const options: RouterGuardOptions = to.meta?.auth || {};\r\n \r\n try {\r\n const allowed = await this.check(options);\r\n if (allowed) {\r\n next();\r\n }\r\n } catch (error) {\r\n console.error('Route guard error:', error);\r\n next(false);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * 检查当前用户是否有权限访问资源\r\n * @param permissions 需要的权限列表\r\n * @returns Promise 是否拥有权限\r\n */\r\n async hasPermission(permissions: string | string[]): Promise {\r\n if (!permissions) {\r\n return true;\r\n }\r\n\r\n const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions];\r\n \r\n // 检查是否已认证\r\n if (!this.auth.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n // 获取用户权限\r\n const userPermissions = ['']\r\n \r\n // 检查是否拥有所有需要的权限\r\n return requiredPermissions.every(permission => \r\n userPermissions.includes(permission)\r\n );\r\n }\r\n}\r\n","/**\r\n * Vue插件模块\r\n * 提供Vue应用中使用统一登录SDK的能力\r\n */\r\n\r\nimport { Auth } from '../core/auth';\r\nimport { SDKConfig } from '../types';\r\nimport { Storage } from '../utils/storage';\r\nimport { RouterGuard } from '../guards/router';\r\n\r\n/**\r\n * Vue插件选项\r\n */\r\nexport interface VuePluginOptions {\r\n /**\r\n * SDK配置\r\n */\r\n config: SDKConfig;\r\n /**\r\n * 插件名称,默认'unifiedLogin'\r\n */\r\n pluginName?: string;\r\n}\r\n\r\n/**\r\n * Vue插件类\r\n */\r\nexport class VuePlugin {\r\n private auth: Auth;\r\n private routerGuard: RouterGuard;\r\n\r\n /**\r\n * 构造函数\r\n * @param storage 存储实例\r\n */\r\n constructor(storage: Storage) {\r\n this.auth = new Auth(storage);\r\n this.routerGuard = new RouterGuard(this.auth);\r\n }\r\n\r\n /**\r\n * 安装Vue插件\r\n * @param app Vue构造函数或Vue 3应用实例\r\n * @param options 插件选项\r\n */\r\n install(app: any, options: VuePluginOptions): void {\r\n const { config, pluginName = 'unifiedLogin' } = options;\r\n\r\n // 初始化SDK\r\n this.auth.init(config);\r\n\r\n // 判断是Vue 2还是Vue 3\r\n const isVue3 = typeof app.config !== 'undefined';\r\n\r\n if (isVue3) {\r\n // Vue 3\r\n // 在全局属性上挂载SDK实例\r\n app.config.globalProperties[`${pluginName}`] = this.auth;\r\n app.config.globalProperties.$auth = this.auth; // 兼容简写\r\n\r\n // 提供Vue组件内的注入\r\n app.provide(pluginName, this.auth);\r\n app.provide('auth', this.auth); // 兼容简写\r\n\r\n // 处理路由守卫\r\n app.mixin({\r\n beforeCreate() {\r\n // 如果是根组件,添加路由守卫\r\n if (this.$options.router) {\r\n const router = this.$options.router;\r\n // 添加全局前置守卫\r\n router.beforeEach(this.routerGuard.createVueGuard());\r\n }\r\n }\r\n });\r\n } else {\r\n // Vue 2\r\n // 在Vue实例上挂载SDK实例\r\n app.prototype[`${pluginName}`] = this.auth;\r\n app.prototype.$auth = this.auth; // 兼容简写\r\n\r\n // 全局混入\r\n app.mixin({\r\n beforeCreate() {\r\n // 如果是根组件,添加路由守卫\r\n if (this.$options.router) {\r\n const router = this.$options.router;\r\n // 添加全局前置守卫\r\n router.beforeEach(this.routerGuard.createVueGuard());\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 获取认证实例\r\n * @returns Auth 认证实例\r\n */\r\n getAuth(): Auth {\r\n return this.auth;\r\n }\r\n\r\n /**\r\n * 获取路由守卫实例\r\n * @returns RouterGuard 路由守卫实例\r\n */\r\n getRouterGuard(): RouterGuard {\r\n return this.routerGuard;\r\n }\r\n}\r\n\r\n/**\r\n * 创建Vue插件实例\r\n * @param storageType 存储类型\r\n * @returns VuePlugin Vue插件实例\r\n */\r\nexport function createVuePlugin(storageType?: 'localStorage' | 'sessionStorage' | 'cookie'): VuePlugin {\r\n const storage = new Storage(storageType);\r\n return new VuePlugin(storage);\r\n}\r\n","/**\r\n * 统一登录SDK入口文件\r\n * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能\r\n */\r\n\r\n// 导出核心类和功能\r\nexport { Auth } from './core/auth';\r\nexport { TokenManager } from './core/token';\r\nexport { HttpClient, HttpError } from './core/http';\r\nexport { Storage } from './utils/storage';\r\nexport { RouterGuard, RouterGuardOptions } from './guards/router';\r\n\r\n// 导出工具函数\r\nexport { \r\n generateRandomString, \r\n parseQueryParams, \r\n buildQueryParams, \r\n generateAuthorizationUrl, \r\n isCallbackUrl \r\n} from './utils/url';\r\n\r\n// 导出类型定义\r\nexport * from './types';\r\n\r\n// 导出Vue插件\r\nexport { VuePlugin, createVuePlugin } from './plugins/vue';\r\n\r\n// 创建默认SDK实例\r\nimport { SDKConfig, UnifiedLoginSDK } from './types';\r\nimport { Auth as AuthCore } from './core/auth';\r\nimport { Storage as StorageCore } from './utils/storage';\r\n\r\n/**\r\n * 默认SDK实例\r\n */\r\nconst defaultStorage = new StorageCore();\r\nconst defaultAuth = new AuthCore(defaultStorage);\r\n\r\n/**\r\n * 默认导出的SDK实例\r\n */\r\nexport const unifiedLoginSDK: UnifiedLoginSDK = {\r\n init: (config: SDKConfig) => {\r\n defaultAuth.init(config);\r\n },\r\n getToken: () => {\r\n return defaultAuth.getToken()\r\n },\r\n login: (redirectUri?: string) => {\r\n return defaultAuth.login(redirectUri);\r\n },\r\n logout: () => {\r\n return defaultAuth.logout();\r\n },\r\n handleCallback: () => {\r\n return defaultAuth.handleCallback();\r\n },\r\n getRoutes: () => {\r\n return defaultAuth.getRoutes();\r\n },\r\n getUserInfo: () => {\r\n return defaultAuth.getUserInfo();\r\n },\r\n isAuthenticated: () => {\r\n return defaultAuth.isAuthenticated();\r\n },\r\n hasRole: (role: string | string[]) => {\r\n return defaultAuth.hasRole(role);\r\n },\r\n hasAllRoles: (roles: string[]) => {\r\n return defaultAuth.hasAllRoles(roles);\r\n },\r\n hasPermission: (permission: string | string[]) => {\r\n return defaultAuth.hasPermission(permission);\r\n },\r\n hasAllPermissions: (permissions: string[]) => {\r\n return defaultAuth.hasAllPermissions(permissions);\r\n },\r\n on: (event, callback) => {\r\n return defaultAuth.on(event, callback);\r\n },\r\n off: (event, callback) => {\r\n return defaultAuth.off(event, callback);\r\n },\r\n isCallback: () => {\r\n return defaultAuth.isCallback();\r\n }\r\n};\r\n\r\n// 默认导出\r\nexport default unifiedLoginSDK;\r\n\r\n// 版本信息\r\nexport const version = '1.0.0';\r\n"],"names":["StorageCore","AuthCore"],"mappings":"AAAA;;;AAGG;AAIH;;AAEG;MACU,YAAY,CAAA;AAGvB;;;;AAIG;AACH,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,SAAiB,EAAA;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;IACtC;AAEA;;;AAGG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAClC;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9B;AACD;;AC5CD;;;AAGG;AAqCH;;AAEG;AACG,MAAO,SAAU,SAAQ,KAAK,CAAA;AAQlC;;;;;;AAMG;AACH,IAAA,WAAA,CAAY,OAAe,EAAE,MAAc,EAAE,UAAkB,EAAE,IAAS,EAAA;QACxE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;AACD;AAED;;AAEG;MACU,UAAU,CAAA;AAIrB;;;;AAIG;AACH,IAAA,WAAA,CAAY,WAAiC,EAAA;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAEhC;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,WAAgC,EAAA;AAC7C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEA;;;;AAIG;IACH,MAAM,OAAO,CAAU,OAA2B,EAAA;AAChD,QAAA,MAAM,EACJ,MAAM,EACN,GAAG,EACH,OAAO,GAAG,EAAE,EACZ,IAAI,EACJ,QAAQ,GAAG,IAAI,EAChB,GAAG,OAAO;;AAGX,QAAA,MAAM,cAAc,GAA2B;AAC7C,YAAA,cAAc,EAAE,kBAAkB;AAClC,YAAA,GAAG;SACJ;;QAGD,MAAM,aAAa,GAAG,MAAK;AACzB,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAChC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;gBAChC,IAAI,KAAK,EAAE;AACT,oBAAA,cAAc,CAAC,aAAa,GAAG,CAAA,EAAG,KAAK,EAAE;gBAC3C;YACF;AACF,QAAA,CAAC;;AAGD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ;QAC7C;AAEA,QAAA,aAAa,EAAE;;AAGf,QAAA,MAAM,YAAY,GAAgB;YAChC,MAAM;AACN,YAAA,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,SAAS;SACvB;;AAGD,QAAA,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,CAAC,EAAE;YACzE,YAAY,CAAC,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC5E;AAEA,QAAA,IAAI;;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC;YAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;;AAGvD,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;;AAEhB,gBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC3B,OAAO;wBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,wBAAA,IAAI,EAAE,EAAO;wBACb,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO;qBAC5C;gBACH;;gBAGA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AACnD,gBAAA,MAAM,IAAI,SAAS,CACjB,QAAQ,EACR,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,YAAY,CACb;YACH;;YAGA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC;QACpD;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,gBAAA,MAAM,KAAK;YACb;;YAGA,MAAM,IAAI,SAAS,CACjB,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,eAAe,EACxD,CAAC,EACD,eAAe,EACf,IAAI,CACL;QACH;IACF;AAIA;;;;;AAKG;IACK,cAAc,CAAU,QAAkB,EAAE,YAAiB,EAAA;;AAEnE,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE;;YAEzC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,YAAY;;AAGxC,YAAA,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,EAAE;;AAEhE,gBAAA,MAAM,IAAI,SAAS,CACjB,GAAG,IAAI,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAE,EAChC,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,YAAY,CACb;YACH;;YAGA,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,gBAAA,IAAI,EAAE,IAAS;gBACf,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO;aAC5C;QACH;;QAGA,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,YAAA,IAAI,EAAE,YAAiB;YACvB,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO;SAC5C;IACH;AAEA;;;;AAIG;AACK,IAAA,kBAAkB,CAAC,YAAiB,EAAA;QAC1C,OAAO,OAAO,YAAY,KAAK,QAAQ;AAChC,YAAA,YAAY,KAAK,IAAI;aACpB,MAAM,IAAI,YAAY,CAAC;aACvB,KAAK,IAAI,YAAY,CAAC;AACvB,aAAC,MAAM,IAAI,YAAY,CAAC;IACjC;AAEA;;;;AAIG;AACK,IAAA,eAAe,CAAC,YAAiB,EAAA;;AAEvC,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE;YACzC,OAAO,YAAY,CAAC,GAAG,IAAI,mBAAmB,YAAY,CAAC,IAAI,CAAA,CAAE;QACnE;;QAGA,OAAO,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,IAAI,CAAA,UAAA,CAAY;IACnE;AAEA;;;;;AAKG;AACH,IAAA,MAAM,GAAG,CAAU,GAAW,EAAE,OAAoD,EAAA;QAClF,OAAO,IAAI,CAAC,OAAO,CAAI;AACrB,YAAA,MAAM,EAAE,KAAK;YACb,GAAG;AACH,YAAA,GAAG;AACJ,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,IAAI,CAAU,GAAW,EAAE,IAAU,EAAE,OAA6D,EAAA;QACxG,OAAO,IAAI,CAAC,OAAO,CAAI;AACrB,YAAA,MAAM,EAAE,MAAM;YACd,GAAG;YACH,IAAI;AACJ,YAAA,GAAG;AACJ,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,GAAG,CAAU,GAAW,EAAE,IAAU,EAAE,OAA6D,EAAA;QACvG,OAAO,IAAI,CAAC,OAAO,CAAI;AACrB,YAAA,MAAM,EAAE,KAAK;YACb,GAAG;YACH,IAAI;AACJ,YAAA,GAAG;AACJ,SAAA,CAAC;IACJ;AAEA;;;;;AAKG;AACH,IAAA,MAAM,MAAM,CAAU,GAAW,EAAE,OAAoD,EAAA;QACrF,OAAO,IAAI,CAAC,OAAO,CAAI;AACrB,YAAA,MAAM,EAAE,QAAQ;YAChB,GAAG;AACH,YAAA,GAAG;AACJ,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,KAAK,CAAU,GAAW,EAAE,IAAU,EAAE,OAA6D,EAAA;QACzG,OAAO,IAAI,CAAC,OAAO,CAAI;AACrB,YAAA,MAAM,EAAE,OAAO;YACf,GAAG;YACH,IAAI;AACJ,YAAA,GAAG;AACJ,SAAA,CAAC;IACJ;AAEA;;;;AAIG;IACK,MAAM,aAAa,CAAC,QAAkB,EAAA;AAC5C,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;AAE9D,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AAC5C,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;QACxB;AAAO,aAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACxC,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;QACxB;aAAO;AACL,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;QACxB;IACF;AAEA;;;;AAIG;AACK,IAAA,YAAY,CAAC,OAAgB,EAAA;QACnC,MAAM,MAAM,GAA2B,EAAE;QACzC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAC7B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;AACrB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACf;AACD;;ACjXD;;;AAGG;AAEH;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,MAAA,GAAiB,EAAE,EAAA;IACtD,MAAM,KAAK,GAAG,gEAAgE;IAC9E,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE;AACA,IAAA,OAAO,MAAM;AACf;AAEA;;;;AAIG;AACG,SAAU,gBAAgB,CAAC,GAAA,GAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAA;IACjE,MAAM,MAAM,GAA2B,EAAE;IACzC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,OAAO,MAAM;IACf;IAEA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AACpC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpC,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC;QACnE;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;;;AAIG;AACG,SAAU,gBAAgB,CAAC,MAA2B,EAAA;IAC1D,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACjD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;QACvE;IACF;AACA,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,GAAG,EAAE;AAClD;AAEA;;;;;;;AAOG;AACG,SAAU,wBAAwB,CACtC,qBAA6B,EAC7B,QAAgB,EAChB,WAAmB,EACnB,OAKC,EAAA;IAED,MAAM,EACJ,YAAY,GAAG,MAAM,EACrB,KAAK,EACL,KAAK,GAAG,oBAAoB,CAAC,EAAE,CAAC,EAChC,GAAG,WAAW,EACf,GAAG,OAAO,IAAI,EAAE;AAEjB,IAAA,MAAM,MAAM,GAAG;AACb,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,YAAY,EAAE,WAAW;AACzB,QAAA,aAAa,EAAE,YAAY;QAC3B,KAAK;AACL,QAAA,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC3B,QAAA,GAAG;KACJ;AAED,IAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAC5C,IAAA,OAAO,CAAA,EAAG,qBAAqB,CAAA,EAAG,WAAW,EAAE;AACjD;AAEA;;;;AAIG;AACG,SAAU,aAAa,CAAC,GAAA,GAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAA;AAC9D,IAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC;IACpC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;AACxC;;ACxGA;;;AAGG;AAQH;;AAEG;MACU,IAAI,CAAA;AAYf;;;AAGG;AACH,IAAA,WAAA,CAAY,OAAgB,EAAA;QAfpB,IAAA,CAAA,MAAM,GAAqB,IAAI;AAI/B,QAAA,IAAA,CAAA,aAAa,GAAkC;AACrD,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,YAAY,EAAE;SACf;QACO,IAAA,CAAA,aAAa,GAAoB,IAAI;AAO3C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAEtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;;QAE5E,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;IAC/C;AAEA;;;AAGG;AACH,IAAA,IAAI,CAAC,MAAiB,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;QAEpB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IACrC;AAEA;;;AAGG;IACH,MAAM,KAAK,CAAC,WAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;QACxC;QACA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC3C,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,sBAAA,EAAyB,cAAc,EAAE;AACjE,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAC,EAAC,QAAQ,EAAC,KAAK,EAAC,CAAC;AACtE,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY;AAChD,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnD,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ;IACjC;AAEA;;AAEG;AACH,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;QACxC;;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC3C,QAAA,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA,OAAA,CAAS,EAAC,IAAI,EAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,CAAC;;AAErE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAC,YAAY,GAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;IACnF;AAEA;;;AAGG;AACH,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;QACxC;AAEA,QAAA,MAAM,MAAM,GAAG,gBAAgB,EAAE;;AAGjC,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,MAAM,CAAC,KAAK,CAAA,GAAA,EAAM,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAA,CAAE,CAAC;QAC7F;;AAGA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;QAEE,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC3C,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,mBAAA,EAAsB,cAAc,CAAA,EAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA,CAAE;QAC7F,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAC;AACvD,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE;AACjB,aAAA;AACD,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,IAAE,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAC3G,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC9B,QAAA,IAAG,MAAM,CAAC,KAAK,EAAC;AACd,YAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG;QAC7C;AACA,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG;IAE9B;AAEA,IAAA,MAAM,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;QACxC;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC3C,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAA,WAAA,CAAa,EAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,CAAC;AACzF,QAAA,IAAG,aAAa,CAAC,MAAM,KAAG,GAAG,EAAC;AAC5B,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;QACrB;AACA,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI;IAEhC;AACA;;;AAGG;IACF,WAAW,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACrC;AAKA;;;;AAIG;IACH,MAAM,OAAO,CAAC,IAAuB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,QAAQ,GAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,IAAE,EAAE;AAEpC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;AAEvB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9C;;AAGA,QAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjC;AAEA;;;;AAIG;IACH,MAAM,WAAW,CAAC,KAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,QAAQ,GAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,IAAE,EAAE;;AAEpC,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD;AAEA;;;;AAIG;IACH,MAAM,aAAa,CAAC,UAA6B,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,QAAQ,GAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAE,EAAE;AAE5C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;;AAE7B,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtD;;AAGA,QAAA,OAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;IACzC;AAEA;;;;AAIG;IACH,MAAM,iBAAiB,CAAC,WAAqB,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,QAAQ,GAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,IAAE,EAAE;;AAGhD,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5D;AAEA;;;AAGG;IACH,eAAe,GAAA;;QAEb,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IACvC;AAEA;;;;AAIG;IACH,EAAE,CAAC,KAAgB,EAAE,QAAkB,EAAA;QACrC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C;AAEA;;;;AAIG;IACH,GAAG,CAAC,KAAgB,EAAE,QAAkB,EAAA;QACtC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC;IAC/F;AAEA;;;;AAIG;IACK,IAAI,CAAC,KAAgB,EAAE,IAAU,EAAA;QACvC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,IAAG;AAC1C,YAAA,IAAI;gBACF,OAAO,CAAC,IAAI,CAAC;YACf;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,SAAA,EAAY,KAAK,CAAA,eAAA,CAAiB,EAAE,KAAK,CAAC;YAC1D;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,UAAU,GAAA;QACR,OAAO,aAAa,EAAE;IACxB;AACD;;ACvRD;;;AAGG;AAIH;;AAEG;MACU,OAAO,CAAA;AAIlB;;;;AAIG;AACH,IAAA,WAAA,CAAY,WAAA,GAA2B,cAAc,EAAE,MAAA,GAAiB,gBAAgB,EAAA;AACtF,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;;;;AAKG;AACH,IAAA,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,OAAgF,EAAA;AAC3G,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;AACjC,QAAA,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAE7E,QAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;gBAC1C;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC;gBAC5C;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;gBAC7C;;IAEN;AAEA;;;;AAIG;AACH,IAAA,GAAG,CAAC,GAAW,EAAA;AACb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;AACjC,QAAA,IAAI,KAAU;AAEd,QAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,cAAc;AACjB,gBAAA,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;gBACrC;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBACvC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC/B;AACF,YAAA;gBACE,KAAK,GAAG,IAAI;;AAGhB,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B;QAAE,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;AAEjC,QAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAChC;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBAClC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBAC1B;;IAEN;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AACF,YAAA,KAAK,gBAAgB;gBACnB,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,EAAE;gBAClB;;IAEN;AAEA;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI;AACF,YAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,gBAAA,KAAK,cAAc;AACjB,oBAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE;AACvC,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,OAAO,IAAI,CAAC,yBAAyB,EAAE;AACzC,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,OAAO,QAAQ,KAAK,WAAW;AACxC,gBAAA;AACE,oBAAA,OAAO,KAAK;;QAElB;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK;QACd;IACF;;AAIA;;AAEG;IACK,eAAe,CAAC,GAAW,EAAE,KAAa,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClC,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QAClC;IACF;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,GAAW,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClC,YAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;QAClC;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,GAAW,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClC,YAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B;IACF;AAEA;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/B,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACtC,oBAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC5B,CAAC,EAAE,CAAC;gBACN;YACF;QACF;IACF;AAEA;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,kBAAkB;AAClC,YAAA,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;AACtC,YAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AAChC,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK;QACd;IACF;;AAIA;;AAEG;IACK,iBAAiB,CAAC,GAAW,EAAE,KAAa,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE,EAAE;AACpC,YAAA,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QACpC;IACF;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE,EAAE;AACpC,YAAA,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;QACpC;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACK,IAAA,oBAAoB,CAAC,GAAW,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE,EAAE;AACpC,YAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;QAChC;IACF;AAEA;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE,EAAE;AACpC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACtC,oBAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC9B,CAAC,EAAE,CAAC;gBACN;YACF;QACF;IACF;AAEA;;AAEG;IACK,yBAAyB,GAAA;AAC/B,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,kBAAkB;AAClC,YAAA,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;AACxC,YAAA,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC;AAClC,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK;QACd;IACF;;AAIA;;AAEG;AACK,IAAA,SAAS,CACf,GAAW,EACX,KAAa,EACb,OAAgF,EAAA;AAEhF,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACnC;QACF;QAEA,IAAI,YAAY,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAE;QAExD,IAAI,OAAO,EAAE;;AAEX,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AACrD,gBAAA,YAAY,IAAI,CAAA,UAAA,EAAa,IAAI,CAAC,WAAW,EAAE,EAAE;YACnD;;AAGA,YAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AAChB,gBAAA,YAAY,IAAI,CAAA,OAAA,EAAU,OAAO,CAAC,IAAI,EAAE;YAC1C;;AAGA,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,gBAAA,YAAY,IAAI,CAAA,SAAA,EAAY,OAAO,CAAC,MAAM,EAAE;YAC9C;;AAGA,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,YAAY,IAAI,UAAU;YAC5B;QACF;AAEA,QAAA,QAAQ,CAAC,MAAM,GAAG,YAAY;IAChC;AAEA;;AAEG;AACK,IAAA,SAAS,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,GAAG,GAAG;QACtB,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzD,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;AAEnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC1B,gBAAA,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACpB;YACA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YAC3C;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1C;AAEA;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACnC;QACF;QAEA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACjC,MAAM,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE;YACvE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YACxB;QACF;IACF;AACD;;ACrWD;;;AAGG;AA0BH;;AAEG;MACU,WAAW,CAAA;AAGtB;;;AAGG;AACH,IAAA,WAAA,CAAY,IAAU,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;AAEA;;;;AAIG;IACH,MAAM,KAAK,CAAC,OAA2B,EAAA;QACrC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,mBAAmB,GAAG,EAAE,EAAE,GAAG,OAAO;;QAGjE,IAAI,YAAY,EAAE;;YAEhB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;;gBAEhC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AACpC,gBAAA,OAAO,KAAK;YACd;;AAGA,YAAA,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAElC,gBAAA,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC;;AAG5B,gBAAA,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,IACxD,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC;gBAED,IAAI,CAAC,aAAa,EAAE;;AAElB,oBAAA,IAAI,OAAO,CAAC,uBAAuB,EAAE;wBACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,uBAAuB;oBACxD;AACA,oBAAA,OAAO,KAAK;gBACd;YACF;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;IACH,cAAc,GAAA;QACZ,OAAO,OAAO,EAAO,EAAE,IAAS,EAAE,IAAS,KAAI;;;YAE7C,MAAM,OAAO,GAAuB,CAAA,CAAA,EAAA,GAAA,EAAE,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,KAAI,EAAE;AAEvD,YAAA,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACzC,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,EAAE;gBACR;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC;YACb;AACF,QAAA,CAAC;IACH;AAEA;;;;AAIG;IACH,MAAM,aAAa,CAAC,WAA8B,EAAA;QAChD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC;;QAGpF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAChC,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC;;AAG5B,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,UAAU,IACzC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC;IACH;AACD;;ACjID;;;AAGG;AAqBH;;AAEG;MACU,SAAS,CAAA;AAIpB;;;AAGG;AACH,IAAA,WAAA,CAAY,OAAgB,EAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/C;AAEA;;;;AAIG;IACH,OAAO,CAAC,GAAQ,EAAE,OAAyB,EAAA;QACzC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,OAAO;;AAGvD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGtB,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,WAAW;QAEhD,IAAI,MAAM,EAAE;;;AAGV,YAAA,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA,EAAG,UAAU,CAAA,CAAE,CAAC,GAAG,IAAI,CAAC,IAAI;AACxD,YAAA,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;;YAG9C,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;YAClC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;YAG/B,GAAG,CAAC,KAAK,CAAC;gBACR,YAAY,GAAA;;AAEV,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;;wBAEnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;oBACtD;gBACF;AACD,aAAA,CAAC;QACJ;aAAO;;;YAGL,GAAG,CAAC,SAAS,CAAC,CAAA,EAAG,UAAU,CAAA,CAAE,CAAC,GAAG,IAAI,CAAC,IAAI;YAC1C,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;;YAGhC,GAAG,CAAC,KAAK,CAAC;gBACR,YAAY,GAAA;;AAEV,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;;wBAEnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;oBACtD;gBACF;AACD,aAAA,CAAC;QACJ;IACF;AAEA;;;AAGG;IACH,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA;;;AAGG;IACH,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AACD;AAED;;;;AAIG;AACG,SAAU,eAAe,CAAC,WAA0D,EAAA;AACxF,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;AACxC,IAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;AAC/B;;ACxHA;;;AAGG;AAEH;AA2BA;;AAEG;AACH,MAAM,cAAc,GAAG,IAAIA,OAAW,EAAE;AACxC,MAAM,WAAW,GAAG,IAAIC,IAAQ,CAAC,cAAc,CAAC;AAEhD;;AAEG;AACI,MAAM,eAAe,GAAoB;AAC9C,IAAA,IAAI,EAAE,CAAC,MAAiB,KAAI;AAC1B,QAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,QAAQ,EAAE,MAAK;AACb,QAAA,OAAO,WAAW,CAAC,QAAQ,EAAE;IAC/B,CAAC;AACD,IAAA,KAAK,EAAE,CAAC,WAAoB,KAAI;AAC9B,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;IACvC,CAAC;IACD,MAAM,EAAE,MAAK;AACX,QAAA,OAAO,WAAW,CAAC,MAAM,EAAE;IAC7B,CAAC;IACD,cAAc,EAAE,MAAK;AACnB,QAAA,OAAO,WAAW,CAAC,cAAc,EAAE;IACrC,CAAC;IACD,SAAS,EAAE,MAAK;AACd,QAAA,OAAO,WAAW,CAAC,SAAS,EAAE;IAChC,CAAC;IACD,WAAW,EAAE,MAAK;AAChB,QAAA,OAAO,WAAW,CAAC,WAAW,EAAE;IAClC,CAAC;IACD,eAAe,EAAE,MAAK;AACpB,QAAA,OAAO,WAAW,CAAC,eAAe,EAAE;IACtC,CAAC;AACD,IAAA,OAAO,EAAE,CAAC,IAAuB,KAAI;AACnC,QAAA,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,CAAC;AACD,IAAA,WAAW,EAAE,CAAC,KAAe,KAAI;AAC/B,QAAA,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;IACvC,CAAC;AACD,IAAA,aAAa,EAAE,CAAC,UAA6B,KAAI;AAC/C,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;IAC9C,CAAC;AACD,IAAA,iBAAiB,EAAE,CAAC,WAAqB,KAAI;AAC3C,QAAA,OAAO,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC;IACnD,CAAC;AACD,IAAA,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;QACtB,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;IACxC,CAAC;AACD,IAAA,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;QACvB,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzC,CAAC;IACD,UAAU,EAAE,MAAK;AACf,QAAA,OAAO,WAAW,CAAC,UAAU,EAAE;IACjC;;AAMF;AACO,MAAM,OAAO,GAAG;;;;"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.js b/sdk/frontend/oauth2-login-sdk/dist/index.js new file mode 100644 index 0000000..cf417b3 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/index.js @@ -0,0 +1,1211 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +/** + * Token管理模块 + * 负责Token的存储、获取、刷新和过期处理 + */ +/** + * Token管理类 + */ +class TokenManager { + /** + * 构造函数 + * @param storage 存储实例 + * @param httpClient HTTP客户端实例 + */ + constructor(storage) { + this.storage = storage; + } + /** + * 存储Token信息 + * @param tokenInfo Token信息 + */ + saveToken(tokenInfo) { + this.storage.set('token', tokenInfo); + } + /** + * 获取Token信息 + * @returns TokenInfo | null Token信息 + */ + getToken() { + return this.storage.get('token'); + } + /** + * 清除Token信息 + */ + clearToken() { + this.storage.remove('token'); + } +} + +/** + * HTTP客户端 + * 用于与后端API进行通信 + */ +/** + * HTTP错误类型 + */ +class HttpError extends Error { + /** + * 构造函数 + * @param message 错误信息 + * @param status 状态码 + * @param statusText 状态文本 + * @param data 错误数据 + */ + constructor(message, status, statusText, data) { + super(message); + this.name = 'HttpError'; + this.status = status; + this.statusText = statusText; + this.data = data; + } +} +/** + * HTTP客户端类 + */ +class HttpClient { + /** + * 构造函数 + * @param logout + * @param tokenGetter Token获取函数 + */ + constructor(tokenGetter) { + this.tokenGetter = tokenGetter; + } + /** + * 设置Token获取函数 + * @param tokenGetter Token获取函数 + */ + setTokenGetter(tokenGetter) { + this.tokenGetter = tokenGetter; + } + /** + * 设置租户ID + * @param tenantId 租户ID + */ + setTenantId(tenantId) { + this.tenantId = tenantId; + } + /** + * 发送HTTP请求 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async request(options) { + const { method, url, headers = {}, body, needAuth = true } = options; + // 构建请求头 + const requestHeaders = { + 'Content-Type': 'application/json', + ...headers + }; + // 添加认证头 + const addAuthHeader = () => { + if (needAuth && this.tokenGetter) { + const token = this.tokenGetter(); + if (token) { + requestHeaders.Authorization = `${token}`; + } + } + }; + // 添加租户ID头 + if (this.tenantId) { + requestHeaders['tenant-id'] = this.tenantId; + } + addAuthHeader(); + // 构建请求配置 + const fetchOptions = { + method, + headers: requestHeaders, + credentials: 'include' // 包含cookie + }; + // 添加请求体 + if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) { + fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body); + } + try { + // 发送请求 + const response = await fetch(url, fetchOptions); + const responseData = await this.parseResponse(response); + // 检查响应状态 + if (!response.ok) { + // 如果是401错误,尝试刷新Token并重试 + if (response.status === 401) { + return { + status: response.status, + statusText: response.statusText, + data: '', + headers: this.parseHeaders(response.headers) + }; + } + // 其他错误,直接抛出 + const errorMsg = this.getErrorMessage(responseData); + throw new HttpError(errorMsg, response.status, response.statusText, responseData); + } + // 处理成功响应的业务逻辑 + return this.handleResponse(response, responseData); + } + catch (error) { + if (error instanceof HttpError) { + throw error; + } + // 网络错误或其他错误 + throw new HttpError(error instanceof Error ? error.message : 'Network Error', 0, 'Network Error', null); + } + } + /** + * 处理响应数据 + * @param response 响应对象 + * @param responseData 响应数据 + * @returns HttpResponse 处理后的响应 + */ + handleResponse(response, responseData) { + // 检查是否为业务响应结构 + if (this.isBusinessResponse(responseData)) { + // 业务响应结构:{ code, msg, data } + const { code, msg, data } = responseData; + // 检查业务状态码 + if (code !== 0 && code !== 200 && code !== '0' && code !== '200') { + // 业务错误,抛出HttpError + throw new HttpError(msg || `Business Error: ${code}`, response.status, response.statusText, responseData); + } + // 业务成功,返回data字段作为实际数据 + return { + status: response.status, + statusText: response.statusText, + data: data, + headers: this.parseHeaders(response.headers) + }; + } + // 非业务响应结构,直接返回原始数据 + return { + status: response.status, + statusText: response.statusText, + data: responseData, + headers: this.parseHeaders(response.headers) + }; + } + /** + * 检查是否为业务响应结构 + * @param responseData 响应数据 + * @returns boolean 是否为业务响应结构 + */ + isBusinessResponse(responseData) { + return typeof responseData === 'object' && + responseData !== null && + ('code' in responseData) && + ('msg' in responseData) && + ('data' in responseData); + } + /** + * 获取错误信息 + * @param responseData 响应数据 + * @returns string 错误信息 + */ + getErrorMessage(responseData) { + // 如果是业务响应结构 + if (this.isBusinessResponse(responseData)) { + return responseData.msg || `Business Error: ${responseData.code}`; + } + // 其他错误结构 + return responseData.message || responseData.error || `HTTP Error`; + } + /** + * GET请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async get(url, options) { + return this.request({ + method: 'GET', + url, + ...options + }); + } + /** + * POST请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async post(url, body, options) { + return this.request({ + method: 'POST', + url, + body, + ...options + }); + } + /** + * PUT请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async put(url, body, options) { + return this.request({ + method: 'PUT', + url, + body, + ...options + }); + } + /** + * DELETE请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async delete(url, options) { + return this.request({ + method: 'DELETE', + url, + ...options + }); + } + /** + * PATCH请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async patch(url, body, options) { + return this.request({ + method: 'PATCH', + url, + body, + ...options + }); + } + /** + * 解析响应体 + * @param response 响应对象 + * @returns Promise 解析后的响应体 + */ + async parseResponse(response) { + const contentType = response.headers.get('content-type') || ''; + if (contentType.includes('application/json')) { + return response.json(); + } + else if (contentType.includes('text/')) { + return response.text(); + } + else { + return response.blob(); + } + } + /** + * 解析响应头 + * @param headers 响应头对象 + * @returns Record 解析后的响应头 + */ + parseHeaders(headers) { + const result = {}; + headers.forEach((value, key) => { + result[key] = value; + }); + return result; + } +} + +/** + * URL处理工具 + * 用于生成授权URL、解析URL参数等功能 + */ +/** + * 生成随机字符串 + * @param length 字符串长度,默认32位 + * @returns 随机字符串 + */ +function generateRandomString(length = 32) { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let result = ''; + for (let i = 0; i < length; i++) { + result += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return result; +} +/** + * 解析URL查询参数 + * @param url URL字符串,默认为当前URL + * @returns 查询参数对象 + */ +function parseQueryParams(url = window.location.href) { + const params = {}; + const queryString = url.split('?')[1]; + if (!queryString) { + return params; + } + const pairs = queryString.split('&'); + for (const pair of pairs) { + const [key, value] = pair.split('='); + if (key) { + params[decodeURIComponent(key)] = decodeURIComponent(value || ''); + } + } + return params; +} +/** + * 构建URL查询参数 + * @param params 查询参数对象 + * @returns 查询参数字符串 + */ +function buildQueryParams(params) { + const pairs = []; + for (const [key, value] of Object.entries(params)) { + if (value !== undefined && value !== null) { + pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + } + } + return pairs.length ? `?${pairs.join('&')}` : ''; +} +/** + * 生成OAuth2授权URL + * @param authorizationEndpoint 授权端点URL + * @param clientId 客户端ID + * @param redirectUri 重定向URL + * @param options 可选参数 + * @returns 授权URL + */ +function generateAuthorizationUrl(authorizationEndpoint, clientId, redirectUri, options) { + const { responseType = 'code', scope, state = generateRandomString(32), ...extraParams } = options || {}; + const params = { + client_id: clientId, + redirect_uri: redirectUri, + response_type: responseType, + state, + ...(scope ? { scope } : {}), + ...extraParams + }; + const queryString = buildQueryParams(params); + return `${authorizationEndpoint}${queryString}`; +} +/** + * 检查当前URL是否为授权回调 + * @param url URL字符串,默认为当前URL + * @returns 是否为授权回调 + */ +function isCallbackUrl(url = window.location.href) { + const params = parseQueryParams(url); + return !!params.code || !!params.error; +} + +/** + * 认证核心逻辑 + * 实现OAuth2授权码模式的完整流程 + */ +/** + * 认证核心类 + */ +class Auth { + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage) { + this.config = null; + this.eventHandlers = { + login: [], + logout: [], + tokenExpired: [] + }; + this.userInfoCache = null; + this.storage = storage; + // 先创建HttpClient,初始时tokenManager为undefined + this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null); + // 然后创建TokenManager + this.tokenManager = new TokenManager(storage); + } + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config) { + this.config = config; + // 设置租户ID到HTTP客户端 + this.httpClient.setTenantId(config.tenantId); + } + getToken() { + return this.tokenManager.getToken(); + } + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + async login(redirectUri) { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const registrationId = this.config.registrationId || 'idp'; + const basepath = this.config.basepath || ''; + const path = `${basepath}/oauth2/authorization/${registrationId}`; + const tokenResponse = await this.httpClient.get(path, { needAuth: false }); + const redirect = tokenResponse.data.redirect_url; + const params = parseQueryParams(redirect); + this.storage.set(params.state, window.location.href); + window.location.href = redirect; + } + /** + * 退出登录 + */ + async logout() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + // 清除本地存储的Token和用户信息 + this.tokenManager.clearToken(); + this.userInfoCache = null; + this.storage.remove('userInfo'); + const basepath = this.config.basepath || ''; + await this.httpClient.post(`${basepath}/logout`, null, { needAuth: true }); + // 触发退出事件 + this.emit('logout'); + window.location.href = this.config.idpLogoutUrl + '?redirect=' + this.config.homePage; + } + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + async handleCallback() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const params = parseQueryParams(); + // 检查是否有错误 + if (params.error) { + throw new Error(`Authorization error: ${params.error} - ${params.error_description || ''}`); + } + // 检查是否有授权码 + if (!params.code) { + throw new Error('Authorization code not found'); + } + const registrationId = this.config.registrationId || 'idp'; + const basepath = this.config.basepath || ''; + const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}`; + const tokenResponse = await this.httpClient.get(callback, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + needAuth: false + }); + // 触发登录事件 + this.emit('login'); + this.storage.set('userInfo', tokenResponse.data.data); + this.tokenManager.saveToken(tokenResponse.headers['authorization'] || tokenResponse.headers['Authorization']); + let url = this.config.homePage; + if (params.state) { + url = this.storage.get(params.state) || url; + } + window.location.href = url; + } + async getRoutes() { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const basepath = this.config.basepath || ''; + const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`, { needAuth: true }); + if (tokenResponse.status === 401) { + await this.logout(); + } + return tokenResponse.data.data; + } + /** + * 获取用户信息 + * @returns UserInfo 用户信息 + */ + getUserInfo() { + return this.storage.get("userInfo"); + } + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + async hasRole(role) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles || []; + if (Array.isArray(role)) { + // 检查是否有任一角色 + return role.some(r => roleCodes.includes(r)); + } + // 检查是否有单个角色 + return roleCodes.includes(role); + } + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + async hasAllRoles(roles) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles || []; + // 检查是否有所有角色 + return roles.every(r => roleCodes.includes(r)); + } + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + async hasPermission(permission) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const permissions = userInfo.permissions || []; + if (Array.isArray(permission)) { + // 检查是否有任一权限 + return permission.some(p => permissions.includes(p)); + } + // 检查是否有单个权限 + return permissions.includes(permission); + } + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + async hasAllPermissions(permissions) { + if (!this.isAuthenticated()) { + return false; + } + const userInfo = this.storage.get("userInfo"); + const userPermissions = userInfo.permissions || []; + // 检查是否有所有权限 + return permissions.every(p => userPermissions.includes(p)); + } + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated() { + // 检查Token是否存在且未过期 + return !!this.tokenManager.getToken(); + } + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event, callback) { + this.eventHandlers[event].push(callback); + } + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event, callback) { + this.eventHandlers[event] = this.eventHandlers[event].filter(handler => handler !== callback); + } + /** + * 触发事件 + * @param event 事件类型 + * @param data 事件数据 + */ + emit(event, data) { + this.eventHandlers[event].forEach(handler => { + try { + handler(data); + } + catch (error) { + console.error(`Error in ${event} event handler:`, error); + } + }); + } + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback() { + return isCallbackUrl(); + } +} + +/** + * 存储工具类 + * 支持localStorage、sessionStorage和cookie三种存储方式 + */ +/** + * 存储工具类 + */ +class Storage { + /** + * 构造函数 + * @param storageType 存储类型 + * @param prefix 存储前缀,默认'unified_login_' + */ + constructor(storageType = 'localStorage', prefix = 'unified_login_') { + this.storageType = storageType; + this.prefix = prefix; + } + /** + * 设置存储项 + * @param key 存储键 + * @param value 存储值 + * @param options 可选参数,cookie存储时使用 + */ + set(key, value, options) { + const fullKey = this.prefix + key; + const stringValue = typeof value === 'string' ? value : JSON.stringify(value); + switch (this.storageType) { + case 'localStorage': + this.setLocalStorage(fullKey, stringValue); + break; + case 'sessionStorage': + this.setSessionStorage(fullKey, stringValue); + break; + case 'cookie': + this.setCookie(fullKey, stringValue, options); + break; + } + } + /** + * 获取存储项 + * @param key 存储键 + * @returns 存储值 + */ + get(key) { + const fullKey = this.prefix + key; + let value; + switch (this.storageType) { + case 'localStorage': + value = this.getLocalStorage(fullKey); + break; + case 'sessionStorage': + value = this.getSessionStorage(fullKey); + break; + case 'cookie': + value = this.getCookie(fullKey); + break; + default: + value = null; + } + if (value === null) { + return null; + } + // 尝试解析JSON + try { + return JSON.parse(value); + } + catch (e) { + // 如果不是JSON,直接返回字符串 + return value; + } + } + /** + * 移除存储项 + * @param key 存储键 + */ + remove(key) { + const fullKey = this.prefix + key; + switch (this.storageType) { + case 'localStorage': + this.removeLocalStorage(fullKey); + break; + case 'sessionStorage': + this.removeSessionStorage(fullKey); + break; + case 'cookie': + this.removeCookie(fullKey); + break; + } + } + /** + * 清空所有存储项 + */ + clear() { + switch (this.storageType) { + case 'localStorage': + this.clearLocalStorage(); + break; + case 'sessionStorage': + this.clearSessionStorage(); + break; + case 'cookie': + this.clearCookie(); + break; + } + } + /** + * 检查存储类型是否可用 + * @returns boolean 是否可用 + */ + isAvailable() { + try { + switch (this.storageType) { + case 'localStorage': + return this.isLocalStorageAvailable(); + case 'sessionStorage': + return this.isSessionStorageAvailable(); + case 'cookie': + return typeof document !== 'undefined'; + default: + return false; + } + } + catch (e) { + return false; + } + } + // ------------------------ localStorage 操作 ------------------------ + /** + * 设置localStorage + */ + setLocalStorage(key, value) { + if (this.isLocalStorageAvailable()) { + localStorage.setItem(key, value); + } + } + /** + * 获取localStorage + */ + getLocalStorage(key) { + if (this.isLocalStorageAvailable()) { + return localStorage.getItem(key); + } + return null; + } + /** + * 移除localStorage + */ + removeLocalStorage(key) { + if (this.isLocalStorageAvailable()) { + localStorage.removeItem(key); + } + } + /** + * 清空localStorage中所有带前缀的项 + */ + clearLocalStorage() { + if (this.isLocalStorageAvailable()) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(this.prefix)) { + localStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + /** + * 检查localStorage是否可用 + */ + isLocalStorageAvailable() { + if (typeof localStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + localStorage.setItem(testKey, testKey); + localStorage.removeItem(testKey); + return true; + } + catch (e) { + return false; + } + } + // ------------------------ sessionStorage 操作 ------------------------ + /** + * 设置sessionStorage + */ + setSessionStorage(key, value) { + if (this.isSessionStorageAvailable()) { + sessionStorage.setItem(key, value); + } + } + /** + * 获取sessionStorage + */ + getSessionStorage(key) { + if (this.isSessionStorageAvailable()) { + return sessionStorage.getItem(key); + } + return null; + } + /** + * 移除sessionStorage + */ + removeSessionStorage(key) { + if (this.isSessionStorageAvailable()) { + sessionStorage.removeItem(key); + } + } + /** + * 清空sessionStorage中所有带前缀的项 + */ + clearSessionStorage() { + if (this.isSessionStorageAvailable()) { + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i); + if (key && key.startsWith(this.prefix)) { + sessionStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + /** + * 检查sessionStorage是否可用 + */ + isSessionStorageAvailable() { + if (typeof sessionStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + sessionStorage.setItem(testKey, testKey); + sessionStorage.removeItem(testKey); + return true; + } + catch (e) { + return false; + } + } + // ------------------------ cookie 操作 ------------------------ + /** + * 设置cookie + */ + setCookie(key, value, options) { + if (typeof document === 'undefined') { + return; + } + let cookieString = `${key}=${encodeURIComponent(value)}`; + if (options) { + // 设置过期时间(秒) + if (options.expires) { + const date = new Date(); + date.setTime(date.getTime() + options.expires * 1000); + cookieString += `; expires=${date.toUTCString()}`; + } + // 设置路径 + if (options.path) { + cookieString += `; path=${options.path}`; + } + // 设置域名 + if (options.domain) { + cookieString += `; domain=${options.domain}`; + } + // 设置secure + if (options.secure) { + cookieString += '; secure'; + } + } + document.cookie = cookieString; + } + /** + * 获取cookie + */ + getCookie(key) { + if (typeof document === 'undefined') { + return null; + } + const name = `${key}=`; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return null; + } + /** + * 移除cookie + */ + removeCookie(key) { + this.setCookie(key, '', { expires: -1 }); + } + /** + * 清空所有带前缀的cookie + */ + clearCookie() { + if (typeof document === 'undefined') { + return; + } + const cookies = document.cookie.split(';'); + for (const cookie of cookies) { + const eqPos = cookie.indexOf('='); + const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); + if (key.startsWith(this.prefix)) { + this.removeCookie(key); + } + } + } +} + +/** + * 路由守卫模块 + * 提供基于权限的路由拦截和未登录自动跳转登录页功能 + */ +/** + * 路由守卫类 + */ +class RouterGuard { + /** + * 构造函数 + * @param auth 认证实例 + */ + constructor(auth) { + this.auth = auth; + } + /** + * 检查路由权限 + * @param options 路由守卫选项 + * @returns Promise 是否通过权限检查 + */ + async check(options) { + const { requiresAuth = true, requiredPermissions = [] } = options; + // 检查是否需要登录 + if (requiresAuth) { + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + // 未认证,跳转到登录页 + this.auth.login(options.redirectUri); + return false; + } + // 检查是否需要权限 + if (requiredPermissions.length > 0) { + // 获取用户权限 + const userPermissions = ['']; + // 检查是否拥有所有需要的权限 + const hasPermission = requiredPermissions.every(permission => userPermissions.includes(permission)); + if (!hasPermission) { + // 权限不足,跳转到权限不足页 + if (options.unauthorizedRedirectUri) { + window.location.href = options.unauthorizedRedirectUri; + } + return false; + } + } + } + return true; + } + /** + * 创建Vue路由守卫 + * @returns 路由守卫函数 + */ + createVueGuard() { + return async (to, from, next) => { + var _a; + // 从路由元信息中获取守卫选项 + const options = ((_a = to.meta) === null || _a === void 0 ? void 0 : _a.auth) || {}; + try { + const allowed = await this.check(options); + if (allowed) { + next(); + } + } + catch (error) { + console.error('Route guard error:', error); + next(false); + } + }; + } + /** + * 检查当前用户是否有权限访问资源 + * @param permissions 需要的权限列表 + * @returns Promise 是否拥有权限 + */ + async hasPermission(permissions) { + if (!permissions) { + return true; + } + const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions]; + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + return false; + } + // 获取用户权限 + const userPermissions = ['']; + // 检查是否拥有所有需要的权限 + return requiredPermissions.every(permission => userPermissions.includes(permission)); + } +} + +/** + * Vue插件模块 + * 提供Vue应用中使用统一登录SDK的能力 + */ +/** + * Vue插件类 + */ +class VuePlugin { + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage) { + this.auth = new Auth(storage); + this.routerGuard = new RouterGuard(this.auth); + } + /** + * 安装Vue插件 + * @param app Vue构造函数或Vue 3应用实例 + * @param options 插件选项 + */ + install(app, options) { + const { config, pluginName = 'unifiedLogin' } = options; + // 初始化SDK + this.auth.init(config); + // 判断是Vue 2还是Vue 3 + const isVue3 = typeof app.config !== 'undefined'; + if (isVue3) { + // Vue 3 + // 在全局属性上挂载SDK实例 + app.config.globalProperties[`${pluginName}`] = this.auth; + app.config.globalProperties.$auth = this.auth; // 兼容简写 + // 提供Vue组件内的注入 + app.provide(pluginName, this.auth); + app.provide('auth', this.auth); // 兼容简写 + // 处理路由守卫 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + else { + // Vue 2 + // 在Vue实例上挂载SDK实例 + app.prototype[`${pluginName}`] = this.auth; + app.prototype.$auth = this.auth; // 兼容简写 + // 全局混入 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + } + /** + * 获取认证实例 + * @returns Auth 认证实例 + */ + getAuth() { + return this.auth; + } + /** + * 获取路由守卫实例 + * @returns RouterGuard 路由守卫实例 + */ + getRouterGuard() { + return this.routerGuard; + } +} +/** + * 创建Vue插件实例 + * @param storageType 存储类型 + * @returns VuePlugin Vue插件实例 + */ +function createVuePlugin(storageType) { + const storage = new Storage(storageType); + return new VuePlugin(storage); +} + +/** + * 统一登录SDK入口文件 + * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能 + */ +// 导出核心类和功能 +/** + * 默认SDK实例 + */ +const defaultStorage = new Storage(); +const defaultAuth = new Auth(defaultStorage); +/** + * 默认导出的SDK实例 + */ +const unifiedLoginSDK = { + init: (config) => { + defaultAuth.init(config); + }, + getToken: () => { + return defaultAuth.getToken(); + }, + login: (redirectUri) => { + return defaultAuth.login(redirectUri); + }, + logout: () => { + return defaultAuth.logout(); + }, + handleCallback: () => { + return defaultAuth.handleCallback(); + }, + getRoutes: () => { + return defaultAuth.getRoutes(); + }, + getUserInfo: () => { + return defaultAuth.getUserInfo(); + }, + isAuthenticated: () => { + return defaultAuth.isAuthenticated(); + }, + hasRole: (role) => { + return defaultAuth.hasRole(role); + }, + hasAllRoles: (roles) => { + return defaultAuth.hasAllRoles(roles); + }, + hasPermission: (permission) => { + return defaultAuth.hasPermission(permission); + }, + hasAllPermissions: (permissions) => { + return defaultAuth.hasAllPermissions(permissions); + }, + on: (event, callback) => { + return defaultAuth.on(event, callback); + }, + off: (event, callback) => { + return defaultAuth.off(event, callback); + }, + isCallback: () => { + return defaultAuth.isCallback(); + } +}; +// 版本信息 +const version = '1.0.0'; + +exports.Auth = Auth; +exports.HttpClient = HttpClient; +exports.HttpError = HttpError; +exports.RouterGuard = RouterGuard; +exports.Storage = Storage; +exports.TokenManager = TokenManager; +exports.VuePlugin = VuePlugin; +exports.buildQueryParams = buildQueryParams; +exports.createVuePlugin = createVuePlugin; +exports.default = unifiedLoginSDK; +exports.generateAuthorizationUrl = generateAuthorizationUrl; +exports.generateRandomString = generateRandomString; +exports.isCallbackUrl = isCallbackUrl; +exports.parseQueryParams = parseQueryParams; +exports.unifiedLoginSDK = unifiedLoginSDK; +exports.version = version; +//# sourceMappingURL=index.js.map diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.js.map b/sdk/frontend/oauth2-login-sdk/dist/index.js.map new file mode 100644 index 0000000..3e91b4f --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../src/core/token.ts","../src/core/http.ts","../src/utils/url.ts","../src/core/auth.ts","../src/utils/storage.ts","../src/guards/router.ts","../src/plugins/vue.ts","../src/index.ts"],"sourcesContent":["/**\r\n * Token管理模块\r\n * 负责Token的存储、获取、刷新和过期处理\r\n */\r\n\r\nimport { Storage } from '../utils/storage';\r\n\r\n/**\r\n * Token管理类\r\n */\r\nexport class TokenManager {\r\n private storage: Storage;\r\n\r\n /**\r\n * 构造函数\r\n * @param storage 存储实例\r\n * @param httpClient HTTP客户端实例\r\n */\r\n constructor(storage: Storage) {\r\n this.storage = storage;\r\n }\r\n\r\n /**\r\n * 存储Token信息\r\n * @param tokenInfo Token信息\r\n */\r\n saveToken(tokenInfo: string): void {\r\n this.storage.set('token', tokenInfo);\r\n }\r\n\r\n /**\r\n * 获取Token信息\r\n * @returns TokenInfo | null Token信息\r\n */\r\n getToken(): string | null {\r\n return this.storage.get('token');\r\n }\r\n\r\n /**\r\n * 清除Token信息\r\n */\r\n clearToken(): void {\r\n this.storage.remove('token');\r\n }\r\n}\r\n","/**\r\n * HTTP客户端\r\n * 用于与后端API进行通信\r\n */\r\n\r\n/**\r\n * HTTP请求方法类型\r\n */\r\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\r\n\r\n/**\r\n * HTTP请求选项\r\n */\r\nexport interface HttpRequestOptions {\r\n /** 请求方法 */\r\n method: HttpMethod;\r\n /** 请求URL */\r\n url: string;\r\n /** 请求头 */\r\n headers?: Record;\r\n /** 请求体 */\r\n body?: any;\r\n /** 是否需要认证 */\r\n needAuth?: boolean;\r\n}\r\n\r\n/**\r\n * HTTP响应类型\r\n */\r\nexport interface HttpResponse {\r\n /** 状态码 */\r\n status: number;\r\n /** 状态文本 */\r\n statusText: string;\r\n /** 响应体 */\r\n data: T;\r\n /** 响应头 */\r\n headers: Record;\r\n}\r\n\r\n/**\r\n * HTTP错误类型\r\n */\r\nexport class HttpError extends Error {\r\n /** 状态码 */\r\n public status: number;\r\n /** 状态文本 */\r\n public statusText: string;\r\n /** 错误数据 */\r\n public data: any;\r\n\r\n /**\r\n * 构造函数\r\n * @param message 错误信息\r\n * @param status 状态码\r\n * @param statusText 状态文本\r\n * @param data 错误数据\r\n */\r\n constructor(message: string, status: number, statusText: string, data: any) {\r\n super(message);\r\n this.name = 'HttpError';\r\n this.status = status;\r\n this.statusText = statusText;\r\n this.data = data;\r\n }\r\n}\r\n\r\n/**\r\n * HTTP客户端类\r\n */\r\nexport class HttpClient {\r\n private tokenGetter?: () => string | null;\r\n private tenantId?: string;\r\n\r\n /**\r\n * 构造函数\r\n * @param logout\r\n * @param tokenGetter Token获取函数\r\n */\r\n constructor(tokenGetter?: () => string | null) {\r\n this.tokenGetter = tokenGetter;\r\n\r\n }\r\n\r\n /**\r\n * 设置Token获取函数\r\n * @param tokenGetter Token获取函数\r\n */\r\n setTokenGetter(tokenGetter: () => string | null): void {\r\n this.tokenGetter = tokenGetter;\r\n }\r\n\r\n /**\r\n * 设置租户ID\r\n * @param tenantId 租户ID\r\n */\r\n setTenantId(tenantId?: string): void {\r\n this.tenantId = tenantId;\r\n }\r\n\r\n /**\r\n * 发送HTTP请求\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async request(options: HttpRequestOptions): Promise> {\r\n const {\r\n method,\r\n url,\r\n headers = {},\r\n body,\r\n needAuth = true\r\n } = options;\r\n\r\n // 构建请求头\r\n const requestHeaders: Record = {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n };\r\n\r\n // 添加认证头\r\n const addAuthHeader = () => {\r\n if (needAuth && this.tokenGetter) {\r\n const token = this.tokenGetter();\r\n if (token) {\r\n requestHeaders.Authorization = `${token}`;\r\n }\r\n }\r\n };\r\n\r\n // 添加租户ID头\r\n if (this.tenantId) {\r\n requestHeaders['tenant-id'] = this.tenantId;\r\n }\r\n\r\n addAuthHeader();\r\n\r\n // 构建请求配置\r\n const fetchOptions: RequestInit = {\r\n method,\r\n headers: requestHeaders,\r\n credentials: 'include' // 包含cookie\r\n };\r\n\r\n // 添加请求体\r\n if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\r\n fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body);\r\n }\r\n\r\n try {\r\n // 发送请求\r\n const response = await fetch(url, fetchOptions);\r\n const responseData = await this.parseResponse(response);\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n // 如果是401错误,尝试刷新Token并重试\r\n if (response.status === 401) {\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: '' as T,\r\n headers: this.parseHeaders(response.headers)\r\n }\r\n }\r\n \r\n // 其他错误,直接抛出\r\n const errorMsg = this.getErrorMessage(responseData);\r\n throw new HttpError(\r\n errorMsg,\r\n response.status,\r\n response.statusText,\r\n responseData\r\n );\r\n }\r\n\r\n // 处理成功响应的业务逻辑\r\n return this.handleResponse(response, responseData);\r\n } catch (error) {\r\n if (error instanceof HttpError) {\r\n throw error;\r\n }\r\n\r\n // 网络错误或其他错误\r\n throw new HttpError(\r\n error instanceof Error ? error.message : 'Network Error',\r\n 0,\r\n 'Network Error',\r\n null\r\n );\r\n }\r\n }\r\n \r\n\r\n\r\n /**\r\n * 处理响应数据\r\n * @param response 响应对象\r\n * @param responseData 响应数据\r\n * @returns HttpResponse 处理后的响应\r\n */\r\n private handleResponse(response: Response, responseData: any): HttpResponse {\r\n // 检查是否为业务响应结构\r\n if (this.isBusinessResponse(responseData)) {\r\n // 业务响应结构:{ code, msg, data }\r\n const { code, msg, data } = responseData;\r\n \r\n // 检查业务状态码\r\n if (code !== 0 && code !== 200 && code !== '0' && code !== '200') {\r\n // 业务错误,抛出HttpError\r\n throw new HttpError(\r\n msg || `Business Error: ${code}`,\r\n response.status,\r\n response.statusText,\r\n responseData\r\n );\r\n }\r\n \r\n // 业务成功,返回data字段作为实际数据\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: data as T,\r\n headers: this.parseHeaders(response.headers)\r\n };\r\n }\r\n \r\n // 非业务响应结构,直接返回原始数据\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: responseData as T,\r\n headers: this.parseHeaders(response.headers)\r\n };\r\n }\r\n\r\n /**\r\n * 检查是否为业务响应结构\r\n * @param responseData 响应数据\r\n * @returns boolean 是否为业务响应结构\r\n */\r\n private isBusinessResponse(responseData: any): boolean {\r\n return typeof responseData === 'object' && \r\n responseData !== null && \r\n ('code' in responseData) && \r\n ('msg' in responseData) && \r\n ('data' in responseData);\r\n }\r\n\r\n /**\r\n * 获取错误信息\r\n * @param responseData 响应数据\r\n * @returns string 错误信息\r\n */\r\n private getErrorMessage(responseData: any): string {\r\n // 如果是业务响应结构\r\n if (this.isBusinessResponse(responseData)) {\r\n return responseData.msg || `Business Error: ${responseData.code}`;\r\n }\r\n \r\n // 其他错误结构\r\n return responseData.message || responseData.error || `HTTP Error`;\r\n }\r\n\r\n /**\r\n * GET请求\r\n * @param url 请求URL\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async get(url: string, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'GET',\r\n url,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * POST请求\r\n * @param url 请求URL\r\n * @param body 请求体\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async post(url: string, body?: any, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'POST',\r\n url,\r\n body,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * PUT请求\r\n * @param url 请求URL\r\n * @param body 请求体\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async put(url: string, body?: any, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'PUT',\r\n url,\r\n body,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * DELETE请求\r\n * @param url 请求URL\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async delete(url: string, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'DELETE',\r\n url,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * PATCH请求\r\n * @param url 请求URL\r\n * @param body 请求体\r\n * @param options 请求选项\r\n * @returns Promise> 响应结果\r\n */\r\n async patch(url: string, body?: any, options?: Omit): Promise> {\r\n return this.request({\r\n method: 'PATCH',\r\n url,\r\n body,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * 解析响应体\r\n * @param response 响应对象\r\n * @returns Promise 解析后的响应体\r\n */\r\n private async parseResponse(response: Response): Promise {\r\n const contentType = response.headers.get('content-type') || '';\r\n \r\n if (contentType.includes('application/json')) {\r\n return response.json();\r\n } else if (contentType.includes('text/')) {\r\n return response.text();\r\n } else {\r\n return response.blob();\r\n }\r\n }\r\n\r\n /**\r\n * 解析响应头\r\n * @param headers 响应头对象\r\n * @returns Record 解析后的响应头\r\n */\r\n private parseHeaders(headers: Headers): Record {\r\n const result: Record = {};\r\n headers.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n }\r\n}\r\n","/**\r\n * URL处理工具\r\n * 用于生成授权URL、解析URL参数等功能\r\n */\r\n\r\n/**\r\n * 生成随机字符串\r\n * @param length 字符串长度,默认32位\r\n * @returns 随机字符串\r\n */\r\nexport function generateRandomString(length: number = 32): string {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let result = '';\r\n for (let i = 0; i < length; i++) {\r\n result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * 解析URL查询参数\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 查询参数对象\r\n */\r\nexport function parseQueryParams(url: string = window.location.href): Record {\r\n const params: Record = {};\r\n const queryString = url.split('?')[1];\r\n if (!queryString) {\r\n return params;\r\n }\r\n\r\n const pairs = queryString.split('&');\r\n for (const pair of pairs) {\r\n const [key, value] = pair.split('=');\r\n if (key) {\r\n params[decodeURIComponent(key)] = decodeURIComponent(value || '');\r\n }\r\n }\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * 构建URL查询参数\r\n * @param params 查询参数对象\r\n * @returns 查询参数字符串\r\n */\r\nexport function buildQueryParams(params: Record): string {\r\n const pairs: string[] = [];\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value !== undefined && value !== null) {\r\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\r\n }\r\n }\r\n return pairs.length ? `?${pairs.join('&')}` : '';\r\n}\r\n\r\n/**\r\n * 生成OAuth2授权URL\r\n * @param authorizationEndpoint 授权端点URL\r\n * @param clientId 客户端ID\r\n * @param redirectUri 重定向URL\r\n * @param options 可选参数\r\n * @returns 授权URL\r\n */\r\nexport function generateAuthorizationUrl(\r\n authorizationEndpoint: string,\r\n clientId: string,\r\n redirectUri: string,\r\n options?: {\r\n responseType?: string;\r\n scope?: string;\r\n state?: string;\r\n [key: string]: any;\r\n }\r\n): string {\r\n const {\r\n responseType = 'code',\r\n scope,\r\n state = generateRandomString(32),\r\n ...extraParams\r\n } = options || {};\r\n\r\n const params = {\r\n client_id: clientId,\r\n redirect_uri: redirectUri,\r\n response_type: responseType,\r\n state,\r\n ...(scope ? { scope } : {}),\r\n ...extraParams\r\n };\r\n\r\n const queryString = buildQueryParams(params);\r\n return `${authorizationEndpoint}${queryString}`;\r\n}\r\n\r\n/**\r\n * 检查当前URL是否为授权回调\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 是否为授权回调\r\n */\r\nexport function isCallbackUrl(url: string = window.location.href): boolean {\r\n const params = parseQueryParams(url);\r\n return !!params.code || !!params.error;\r\n}\r\n\r\n/**\r\n * 获取当前URL的路径名\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 路径名\r\n */\r\nexport function getPathname(url: string = window.location.href): string {\r\n const urlObj = new URL(url);\r\n return urlObj.pathname;\r\n}\r\n\r\n/**\r\n * 获取当前URL的主机名\r\n * @param url URL字符串,默认为当前URL\r\n * @returns 主机名\r\n */\r\nexport function getHostname(url: string = window.location.href): string {\r\n const urlObj = new URL(url);\r\n return urlObj.hostname;\r\n}\r\n","/**\r\n * 认证核心逻辑\r\n * 实现OAuth2授权码模式的完整流程\r\n */\r\n\r\nimport {EventType, RouterInfo, SDKConfig, UserInfo} from '../types';\r\nimport {TokenManager} from './token';\r\nimport {HttpClient} from './http';\r\nimport {Storage} from '../utils/storage';\r\nimport {buildQueryParams, isCallbackUrl, parseQueryParams} from '../utils/url';\r\n\r\n/**\r\n * 认证核心类\r\n */\r\nexport class Auth {\r\n private config: SDKConfig | null = null;\r\n private tokenManager: TokenManager;\r\n private httpClient: HttpClient;\r\n private storage: Storage;\r\n private eventHandlers: Record = {\r\n login: [],\r\n logout: [],\r\n tokenExpired: []\r\n };\r\n private userInfoCache: UserInfo | null = null;\r\n\r\n /**\r\n * 构造函数\r\n * @param storage 存储实例\r\n */\r\n constructor(storage: Storage) {\r\n this.storage = storage;\r\n // 先创建HttpClient,初始时tokenManager为undefined\r\n this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null);\r\n // 然后创建TokenManager\r\n this.tokenManager = new TokenManager(storage);\r\n }\r\n\r\n /**\r\n * 初始化SDK配置\r\n * @param config SDK配置选项\r\n */\r\n init(config: SDKConfig): void {\r\n this.config = config;\r\n // 设置租户ID到HTTP客户端\r\n this.httpClient.setTenantId(config.tenantId);\r\n }\r\n\r\n getToken():string | null{\r\n return this.tokenManager.getToken()\r\n }\r\n\r\n /**\r\n * 触发登录流程\r\n * @param redirectUri 可选的重定向URL,覆盖初始化时的配置\r\n */\r\n async login(redirectUri?: string): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n const registrationId = this.config.registrationId || 'idp'\r\n const basepath = this.config.basepath || ''\r\n const path = `${basepath}/oauth2/authorization/${registrationId}`\r\n const tokenResponse = await this.httpClient.get(path,{needAuth:false})\r\n const redirect = tokenResponse.data.redirect_url\r\n const params = parseQueryParams(redirect)\r\n this.storage.set(params.state,window.location.href)\r\n window.location.href = redirect\r\n }\r\n\r\n /**\r\n * 退出登录\r\n */\r\n async logout(): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n // 清除本地存储的Token和用户信息\r\n this.tokenManager.clearToken();\r\n this.userInfoCache = null;\r\n this.storage.remove('userInfo');\r\n const basepath = this.config.basepath || ''\r\n await this.httpClient.post(`${basepath}/logout`,null,{needAuth:true})\r\n // 触发退出事件\r\n this.emit('logout');\r\n window.location.href = this.config.idpLogoutUrl+'?redirect='+this.config.homePage;\r\n }\r\n\r\n /**\r\n * 处理授权回调\r\n * @returns Promise 用户信息\r\n */\r\n async handleCallback(): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n\r\n const params = parseQueryParams();\r\n \r\n // 检查是否有错误\r\n if (params.error) {\r\n throw new Error(`Authorization error: ${params.error} - ${params.error_description || ''}`);\r\n }\r\n\r\n // 检查是否有授权码\r\n if (!params.code) {\r\n throw new Error('Authorization code not found');\r\n }\r\n\r\n const registrationId = this.config.registrationId || 'idp'\r\n const basepath = this.config.basepath || ''\r\n const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}`\r\n const tokenResponse = await this.httpClient.get(callback,{\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n },\r\n needAuth: false\r\n })\r\n // 触发登录事件\r\n this.emit('login');\r\n this.storage.set('userInfo', tokenResponse.data.data);\r\n this.tokenManager.saveToken(tokenResponse.headers['authorization']||tokenResponse.headers['Authorization'])\r\n let url = this.config.homePage\r\n if(params.state){\r\n url = this.storage.get(params.state) || url;\r\n }\r\n window.location.href = url;\r\n\r\n }\r\n\r\n async getRoutes(): Promise {\r\n if (!this.config) {\r\n throw new Error('SDK not initialized');\r\n }\r\n const basepath = this.config.basepath || ''\r\n const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`,{needAuth:true})\r\n if(tokenResponse.status===401){\r\n await this.logout()\r\n }\r\n return tokenResponse.data.data\r\n\r\n }\r\n /**\r\n * 获取用户信息\r\n * @returns UserInfo 用户信息\r\n */\r\n getUserInfo(): UserInfo {\r\n return this.storage.get(\"userInfo\");\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n * 检查用户是否有指定角色\r\n * @param role 角色编码或角色编码列表\r\n * @returns Promise 是否有指定角色\r\n */\r\n async hasRole(role: string | string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const roleCodes = userInfo.roles||[];\r\n\r\n if (Array.isArray(role)) {\r\n // 检查是否有任一角色\r\n return role.some(r => roleCodes.includes(r));\r\n }\r\n\r\n // 检查是否有单个角色\r\n return roleCodes.includes(role);\r\n }\r\n\r\n /**\r\n * 检查用户是否有所有指定角色\r\n * @param roles 角色编码列表\r\n * @returns Promise 是否有所有指定角色\r\n */\r\n async hasAllRoles(roles: string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const roleCodes = userInfo.roles||[];\r\n // 检查是否有所有角色\r\n return roles.every(r => roleCodes.includes(r));\r\n }\r\n\r\n /**\r\n * 检查用户是否有指定权限\r\n * @param permission 权限标识或权限标识列表\r\n * @returns Promise 是否有指定权限\r\n */\r\n async hasPermission(permission: string | string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const permissions = userInfo.permissions||[];\r\n\r\n if (Array.isArray(permission)) {\r\n // 检查是否有任一权限\r\n return permission.some(p => permissions.includes(p));\r\n }\r\n\r\n // 检查是否有单个权限\r\n return permissions.includes(permission);\r\n }\r\n\r\n /**\r\n * 检查用户是否有所有指定权限\r\n * @param permissions 权限标识列表\r\n * @returns Promise 是否有所有指定权限\r\n */\r\n async hasAllPermissions(permissions: string[]): Promise {\r\n if (!this.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n const userInfo:UserInfo = this.storage.get(\"userInfo\");\r\n const userPermissions = userInfo.permissions||[];\r\n\r\n // 检查是否有所有权限\r\n return permissions.every(p => userPermissions.includes(p));\r\n }\r\n\r\n /**\r\n * 检查用户是否已认证\r\n * @returns boolean 是否已认证\r\n */\r\n isAuthenticated(): boolean {\r\n // 检查Token是否存在且未过期\r\n return !!this.tokenManager.getToken();\r\n }\r\n\r\n /**\r\n * 事件监听\r\n * @param event 事件类型\r\n * @param callback 回调函数\r\n */\r\n on(event: EventType, callback: Function): void {\r\n this.eventHandlers[event].push(callback);\r\n }\r\n\r\n /**\r\n * 移除事件监听\r\n * @param event 事件类型\r\n * @param callback 回调函数\r\n */\r\n off(event: EventType, callback: Function): void {\r\n this.eventHandlers[event] = this.eventHandlers[event].filter(handler => handler !== callback);\r\n }\r\n\r\n /**\r\n * 触发事件\r\n * @param event 事件类型\r\n * @param data 事件数据\r\n */\r\n private emit(event: EventType, data?: any): void {\r\n this.eventHandlers[event].forEach(handler => {\r\n try {\r\n handler(data);\r\n } catch (error) {\r\n console.error(`Error in ${event} event handler:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 检查当前URL是否为授权回调\r\n * @returns boolean 是否为授权回调\r\n */\r\n isCallback(): boolean {\r\n return isCallbackUrl();\r\n }\r\n}\r\n","/**\r\n * 存储工具类\r\n * 支持localStorage、sessionStorage和cookie三种存储方式\r\n */\r\n\r\ntype StorageType = 'localStorage' | 'sessionStorage' | 'cookie';\r\n\r\n/**\r\n * 存储工具类\r\n */\r\nexport class Storage {\r\n private storageType: StorageType;\r\n private prefix: string;\r\n\r\n /**\r\n * 构造函数\r\n * @param storageType 存储类型\r\n * @param prefix 存储前缀,默认'unified_login_'\r\n */\r\n constructor(storageType: StorageType = 'localStorage', prefix: string = 'unified_login_') {\r\n this.storageType = storageType;\r\n this.prefix = prefix;\r\n }\r\n\r\n /**\r\n * 设置存储项\r\n * @param key 存储键\r\n * @param value 存储值\r\n * @param options 可选参数,cookie存储时使用\r\n */\r\n set(key: string, value: any, options?: { expires?: number; path?: string; domain?: string; secure?: boolean }): void {\r\n const fullKey = this.prefix + key;\r\n const stringValue = typeof value === 'string' ? value : JSON.stringify(value);\r\n\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n this.setLocalStorage(fullKey, stringValue);\r\n break;\r\n case 'sessionStorage':\r\n this.setSessionStorage(fullKey, stringValue);\r\n break;\r\n case 'cookie':\r\n this.setCookie(fullKey, stringValue, options);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 获取存储项\r\n * @param key 存储键\r\n * @returns 存储值\r\n */\r\n get(key: string): any {\r\n const fullKey = this.prefix + key;\r\n let value: any;\r\n\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n value = this.getLocalStorage(fullKey);\r\n break;\r\n case 'sessionStorage':\r\n value = this.getSessionStorage(fullKey);\r\n break;\r\n case 'cookie':\r\n value = this.getCookie(fullKey);\r\n break;\r\n default:\r\n value = null;\r\n }\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n // 尝试解析JSON\r\n try {\r\n return JSON.parse(value);\r\n } catch (e) {\r\n // 如果不是JSON,直接返回字符串\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * 移除存储项\r\n * @param key 存储键\r\n */\r\n remove(key: string): void {\r\n const fullKey = this.prefix + key;\r\n\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n this.removeLocalStorage(fullKey);\r\n break;\r\n case 'sessionStorage':\r\n this.removeSessionStorage(fullKey);\r\n break;\r\n case 'cookie':\r\n this.removeCookie(fullKey);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 清空所有存储项\r\n */\r\n clear(): void {\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n this.clearLocalStorage();\r\n break;\r\n case 'sessionStorage':\r\n this.clearSessionStorage();\r\n break;\r\n case 'cookie':\r\n this.clearCookie();\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 检查存储类型是否可用\r\n * @returns boolean 是否可用\r\n */\r\n isAvailable(): boolean {\r\n try {\r\n switch (this.storageType) {\r\n case 'localStorage':\r\n return this.isLocalStorageAvailable();\r\n case 'sessionStorage':\r\n return this.isSessionStorageAvailable();\r\n case 'cookie':\r\n return typeof document !== 'undefined';\r\n default:\r\n return false;\r\n }\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // ------------------------ localStorage 操作 ------------------------\r\n\r\n /**\r\n * 设置localStorage\r\n */\r\n private setLocalStorage(key: string, value: string): void {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n /**\r\n * 获取localStorage\r\n */\r\n private getLocalStorage(key: string): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 移除localStorage\r\n */\r\n private removeLocalStorage(key: string): void {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * 清空localStorage中所有带前缀的项\r\n */\r\n private clearLocalStorage(): void {\r\n if (this.isLocalStorageAvailable()) {\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key && key.startsWith(this.prefix)) {\r\n localStorage.removeItem(key);\r\n i--; // 索引调整\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 检查localStorage是否可用\r\n */\r\n private isLocalStorageAvailable(): boolean {\r\n if (typeof localStorage === 'undefined') {\r\n return false;\r\n }\r\n try {\r\n const testKey = '__storage_test__';\r\n localStorage.setItem(testKey, testKey);\r\n localStorage.removeItem(testKey);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // ------------------------ sessionStorage 操作 ------------------------\r\n\r\n /**\r\n * 设置sessionStorage\r\n */\r\n private setSessionStorage(key: string, value: string): void {\r\n if (this.isSessionStorageAvailable()) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n /**\r\n * 获取sessionStorage\r\n */\r\n private getSessionStorage(key: string): string | null {\r\n if (this.isSessionStorageAvailable()) {\r\n return sessionStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 移除sessionStorage\r\n */\r\n private removeSessionStorage(key: string): void {\r\n if (this.isSessionStorageAvailable()) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * 清空sessionStorage中所有带前缀的项\r\n */\r\n private clearSessionStorage(): void {\r\n if (this.isSessionStorageAvailable()) {\r\n for (let i = 0; i < sessionStorage.length; i++) {\r\n const key = sessionStorage.key(i);\r\n if (key && key.startsWith(this.prefix)) {\r\n sessionStorage.removeItem(key);\r\n i--; // 索引调整\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 检查sessionStorage是否可用\r\n */\r\n private isSessionStorageAvailable(): boolean {\r\n if (typeof sessionStorage === 'undefined') {\r\n return false;\r\n }\r\n try {\r\n const testKey = '__storage_test__';\r\n sessionStorage.setItem(testKey, testKey);\r\n sessionStorage.removeItem(testKey);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // ------------------------ cookie 操作 ------------------------\r\n\r\n /**\r\n * 设置cookie\r\n */\r\n private setCookie(\r\n key: string,\r\n value: string,\r\n options?: { expires?: number; path?: string; domain?: string; secure?: boolean }\r\n ): void {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n let cookieString = `${key}=${encodeURIComponent(value)}`;\r\n\r\n if (options) {\r\n // 设置过期时间(秒)\r\n if (options.expires) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + options.expires * 1000);\r\n cookieString += `; expires=${date.toUTCString()}`;\r\n }\r\n\r\n // 设置路径\r\n if (options.path) {\r\n cookieString += `; path=${options.path}`;\r\n }\r\n\r\n // 设置域名\r\n if (options.domain) {\r\n cookieString += `; domain=${options.domain}`;\r\n }\r\n\r\n // 设置secure\r\n if (options.secure) {\r\n cookieString += '; secure';\r\n }\r\n }\r\n\r\n document.cookie = cookieString;\r\n }\r\n\r\n /**\r\n * 获取cookie\r\n */\r\n private getCookie(key: string): string | null {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n\r\n const name = `${key}=`;\r\n const decodedCookie = decodeURIComponent(document.cookie);\r\n const ca = decodedCookie.split(';');\r\n\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 移除cookie\r\n */\r\n private removeCookie(key: string): void {\r\n this.setCookie(key, '', { expires: -1 });\r\n }\r\n\r\n /**\r\n * 清空所有带前缀的cookie\r\n */\r\n private clearCookie(): void {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n const cookies = document.cookie.split(';');\r\n for (const cookie of cookies) {\r\n const eqPos = cookie.indexOf('=');\r\n const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim();\r\n if (key.startsWith(this.prefix)) {\r\n this.removeCookie(key);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * 路由守卫模块\r\n * 提供基于权限的路由拦截和未登录自动跳转登录页功能\r\n */\r\n\r\nimport { Auth } from '../core/auth';\r\n\r\n/**\r\n * 路由守卫选项\r\n */\r\nexport interface RouterGuardOptions {\r\n /**\r\n * 是否需要登录\r\n */\r\n requiresAuth?: boolean;\r\n /**\r\n * 需要的权限列表\r\n */\r\n requiredPermissions?: string[];\r\n /**\r\n * 登录后重定向的URL\r\n */\r\n redirectUri?: string;\r\n /**\r\n * 权限不足时重定向的URL\r\n */\r\n unauthorizedRedirectUri?: string;\r\n}\r\n\r\n/**\r\n * 路由守卫类\r\n */\r\nexport class RouterGuard {\r\n private auth: Auth;\r\n\r\n /**\r\n * 构造函数\r\n * @param auth 认证实例\r\n */\r\n constructor(auth: Auth) {\r\n this.auth = auth;\r\n }\r\n\r\n /**\r\n * 检查路由权限\r\n * @param options 路由守卫选项\r\n * @returns Promise 是否通过权限检查\r\n */\r\n async check(options: RouterGuardOptions): Promise {\r\n const { requiresAuth = true, requiredPermissions = [] } = options;\r\n\r\n // 检查是否需要登录\r\n if (requiresAuth) {\r\n // 检查是否已认证\r\n if (!this.auth.isAuthenticated()) {\r\n // 未认证,跳转到登录页\r\n this.auth.login(options.redirectUri);\r\n return false;\r\n }\r\n\r\n // 检查是否需要权限\r\n if (requiredPermissions.length > 0) {\r\n // 获取用户权限\r\n const userPermissions = [''];\r\n \r\n // 检查是否拥有所有需要的权限\r\n const hasPermission = requiredPermissions.every(permission => \r\n userPermissions.includes(permission)\r\n );\r\n\r\n if (!hasPermission) {\r\n // 权限不足,跳转到权限不足页\r\n if (options.unauthorizedRedirectUri) {\r\n window.location.href = options.unauthorizedRedirectUri;\r\n }\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 创建Vue路由守卫\r\n * @returns 路由守卫函数\r\n */\r\n createVueGuard() {\r\n return async (to: any, from: any, next: any) => {\r\n // 从路由元信息中获取守卫选项\r\n const options: RouterGuardOptions = to.meta?.auth || {};\r\n \r\n try {\r\n const allowed = await this.check(options);\r\n if (allowed) {\r\n next();\r\n }\r\n } catch (error) {\r\n console.error('Route guard error:', error);\r\n next(false);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * 检查当前用户是否有权限访问资源\r\n * @param permissions 需要的权限列表\r\n * @returns Promise 是否拥有权限\r\n */\r\n async hasPermission(permissions: string | string[]): Promise {\r\n if (!permissions) {\r\n return true;\r\n }\r\n\r\n const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions];\r\n \r\n // 检查是否已认证\r\n if (!this.auth.isAuthenticated()) {\r\n return false;\r\n }\r\n\r\n // 获取用户权限\r\n const userPermissions = ['']\r\n \r\n // 检查是否拥有所有需要的权限\r\n return requiredPermissions.every(permission => \r\n userPermissions.includes(permission)\r\n );\r\n }\r\n}\r\n","/**\r\n * Vue插件模块\r\n * 提供Vue应用中使用统一登录SDK的能力\r\n */\r\n\r\nimport { Auth } from '../core/auth';\r\nimport { SDKConfig } from '../types';\r\nimport { Storage } from '../utils/storage';\r\nimport { RouterGuard } from '../guards/router';\r\n\r\n/**\r\n * Vue插件选项\r\n */\r\nexport interface VuePluginOptions {\r\n /**\r\n * SDK配置\r\n */\r\n config: SDKConfig;\r\n /**\r\n * 插件名称,默认'unifiedLogin'\r\n */\r\n pluginName?: string;\r\n}\r\n\r\n/**\r\n * Vue插件类\r\n */\r\nexport class VuePlugin {\r\n private auth: Auth;\r\n private routerGuard: RouterGuard;\r\n\r\n /**\r\n * 构造函数\r\n * @param storage 存储实例\r\n */\r\n constructor(storage: Storage) {\r\n this.auth = new Auth(storage);\r\n this.routerGuard = new RouterGuard(this.auth);\r\n }\r\n\r\n /**\r\n * 安装Vue插件\r\n * @param app Vue构造函数或Vue 3应用实例\r\n * @param options 插件选项\r\n */\r\n install(app: any, options: VuePluginOptions): void {\r\n const { config, pluginName = 'unifiedLogin' } = options;\r\n\r\n // 初始化SDK\r\n this.auth.init(config);\r\n\r\n // 判断是Vue 2还是Vue 3\r\n const isVue3 = typeof app.config !== 'undefined';\r\n\r\n if (isVue3) {\r\n // Vue 3\r\n // 在全局属性上挂载SDK实例\r\n app.config.globalProperties[`${pluginName}`] = this.auth;\r\n app.config.globalProperties.$auth = this.auth; // 兼容简写\r\n\r\n // 提供Vue组件内的注入\r\n app.provide(pluginName, this.auth);\r\n app.provide('auth', this.auth); // 兼容简写\r\n\r\n // 处理路由守卫\r\n app.mixin({\r\n beforeCreate() {\r\n // 如果是根组件,添加路由守卫\r\n if (this.$options.router) {\r\n const router = this.$options.router;\r\n // 添加全局前置守卫\r\n router.beforeEach(this.routerGuard.createVueGuard());\r\n }\r\n }\r\n });\r\n } else {\r\n // Vue 2\r\n // 在Vue实例上挂载SDK实例\r\n app.prototype[`${pluginName}`] = this.auth;\r\n app.prototype.$auth = this.auth; // 兼容简写\r\n\r\n // 全局混入\r\n app.mixin({\r\n beforeCreate() {\r\n // 如果是根组件,添加路由守卫\r\n if (this.$options.router) {\r\n const router = this.$options.router;\r\n // 添加全局前置守卫\r\n router.beforeEach(this.routerGuard.createVueGuard());\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 获取认证实例\r\n * @returns Auth 认证实例\r\n */\r\n getAuth(): Auth {\r\n return this.auth;\r\n }\r\n\r\n /**\r\n * 获取路由守卫实例\r\n * @returns RouterGuard 路由守卫实例\r\n */\r\n getRouterGuard(): RouterGuard {\r\n return this.routerGuard;\r\n }\r\n}\r\n\r\n/**\r\n * 创建Vue插件实例\r\n * @param storageType 存储类型\r\n * @returns VuePlugin Vue插件实例\r\n */\r\nexport function createVuePlugin(storageType?: 'localStorage' | 'sessionStorage' | 'cookie'): VuePlugin {\r\n const storage = new Storage(storageType);\r\n return new VuePlugin(storage);\r\n}\r\n","/**\r\n * 统一登录SDK入口文件\r\n * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能\r\n */\r\n\r\n// 导出核心类和功能\r\nexport { Auth } from './core/auth';\r\nexport { TokenManager } from './core/token';\r\nexport { HttpClient, HttpError } from './core/http';\r\nexport { Storage } from './utils/storage';\r\nexport { RouterGuard, RouterGuardOptions } from './guards/router';\r\n\r\n// 导出工具函数\r\nexport { \r\n generateRandomString, \r\n parseQueryParams, \r\n buildQueryParams, \r\n generateAuthorizationUrl, \r\n isCallbackUrl \r\n} from './utils/url';\r\n\r\n// 导出类型定义\r\nexport * from './types';\r\n\r\n// 导出Vue插件\r\nexport { VuePlugin, createVuePlugin } from './plugins/vue';\r\n\r\n// 创建默认SDK实例\r\nimport { SDKConfig, UnifiedLoginSDK } from './types';\r\nimport { Auth as AuthCore } from './core/auth';\r\nimport { Storage as StorageCore } from './utils/storage';\r\n\r\n/**\r\n * 默认SDK实例\r\n */\r\nconst defaultStorage = new StorageCore();\r\nconst defaultAuth = new AuthCore(defaultStorage);\r\n\r\n/**\r\n * 默认导出的SDK实例\r\n */\r\nexport const unifiedLoginSDK: UnifiedLoginSDK = {\r\n init: (config: SDKConfig) => {\r\n defaultAuth.init(config);\r\n },\r\n getToken: () => {\r\n return defaultAuth.getToken()\r\n },\r\n login: (redirectUri?: string) => {\r\n return defaultAuth.login(redirectUri);\r\n },\r\n logout: () => {\r\n return defaultAuth.logout();\r\n },\r\n handleCallback: () => {\r\n return defaultAuth.handleCallback();\r\n },\r\n getRoutes: () => {\r\n return defaultAuth.getRoutes();\r\n },\r\n getUserInfo: () => {\r\n return defaultAuth.getUserInfo();\r\n },\r\n isAuthenticated: () => {\r\n return defaultAuth.isAuthenticated();\r\n },\r\n hasRole: (role: string | string[]) => {\r\n return defaultAuth.hasRole(role);\r\n },\r\n hasAllRoles: (roles: string[]) => {\r\n return defaultAuth.hasAllRoles(roles);\r\n },\r\n hasPermission: (permission: string | string[]) => {\r\n return defaultAuth.hasPermission(permission);\r\n },\r\n hasAllPermissions: (permissions: string[]) => {\r\n return defaultAuth.hasAllPermissions(permissions);\r\n },\r\n on: (event, callback) => {\r\n return defaultAuth.on(event, callback);\r\n },\r\n off: (event, callback) => {\r\n return defaultAuth.off(event, callback);\r\n },\r\n isCallback: () => {\r\n return defaultAuth.isCallback();\r\n }\r\n};\r\n\r\n// 默认导出\r\nexport default unifiedLoginSDK;\r\n\r\n// 版本信息\r\nexport const version = '1.0.0';\r\n"],"names":["StorageCore","AuthCore"],"mappings":"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"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts new file mode 100644 index 0000000..f17e08a --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts @@ -0,0 +1,56 @@ +/** + * Vue插件模块 + * 提供Vue应用中使用统一登录SDK的能力 + */ +import { Auth } from '../core/auth'; +import { SDKConfig } from '../types'; +import { Storage } from '../utils/storage'; +import { RouterGuard } from '../guards/router'; +/** + * Vue插件选项 + */ +export interface VuePluginOptions { + /** + * SDK配置 + */ + config: SDKConfig; + /** + * 插件名称,默认'unifiedLogin' + */ + pluginName?: string; +} +/** + * Vue插件类 + */ +export declare class VuePlugin { + private auth; + private routerGuard; + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage: Storage); + /** + * 安装Vue插件 + * @param app Vue构造函数或Vue 3应用实例 + * @param options 插件选项 + */ + install(app: any, options: VuePluginOptions): void; + /** + * 获取认证实例 + * @returns Auth 认证实例 + */ + getAuth(): Auth; + /** + * 获取路由守卫实例 + * @returns RouterGuard 路由守卫实例 + */ + getRouterGuard(): RouterGuard; +} +/** + * 创建Vue插件实例 + * @param storageType 存储类型 + * @returns VuePlugin Vue插件实例 + */ +export declare function createVuePlugin(storageType?: 'localStorage' | 'sessionStorage' | 'cookie'): VuePlugin; +//# sourceMappingURL=vue.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts.map new file mode 100644 index 0000000..1e584fc --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/plugins/vue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,WAAW,CAAc;IAEjC;;;OAGG;gBACS,OAAO,EAAE,OAAO;IAK5B;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAkDlD;;;OAGG;IACH,OAAO,IAAI,IAAI;IAIf;;;OAGG;IACH,cAAc,IAAI,WAAW;CAG9B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAGrG"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js new file mode 100644 index 0000000..dac854d --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js @@ -0,0 +1,93 @@ +/** + * Vue插件模块 + * 提供Vue应用中使用统一登录SDK的能力 + */ +import { Auth } from '../core/auth'; +import { Storage } from '../utils/storage'; +import { RouterGuard } from '../guards/router'; +/** + * Vue插件类 + */ +export class VuePlugin { + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage) { + this.auth = new Auth(storage); + this.routerGuard = new RouterGuard(this.auth); + } + /** + * 安装Vue插件 + * @param app Vue构造函数或Vue 3应用实例 + * @param options 插件选项 + */ + install(app, options) { + const { config, pluginName = 'unifiedLogin' } = options; + // 初始化SDK + this.auth.init(config); + // 判断是Vue 2还是Vue 3 + const isVue3 = typeof app.config !== 'undefined'; + if (isVue3) { + // Vue 3 + // 在全局属性上挂载SDK实例 + app.config.globalProperties[`${pluginName}`] = this.auth; + app.config.globalProperties.$auth = this.auth; // 兼容简写 + // 提供Vue组件内的注入 + app.provide(pluginName, this.auth); + app.provide('auth', this.auth); // 兼容简写 + // 处理路由守卫 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + else { + // Vue 2 + // 在Vue实例上挂载SDK实例 + app.prototype[`${pluginName}`] = this.auth; + app.prototype.$auth = this.auth; // 兼容简写 + // 全局混入 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + } + /** + * 获取认证实例 + * @returns Auth 认证实例 + */ + getAuth() { + return this.auth; + } + /** + * 获取路由守卫实例 + * @returns RouterGuard 路由守卫实例 + */ + getRouterGuard() { + return this.routerGuard; + } +} +/** + * 创建Vue插件实例 + * @param storageType 存储类型 + * @returns VuePlugin Vue插件实例 + */ +export function createVuePlugin(storageType) { + const storage = new Storage(storageType); + return new VuePlugin(storage); +} +//# sourceMappingURL=vue.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js.map b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js.map new file mode 100644 index 0000000..c36a8c5 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vue.js","sourceRoot":"","sources":["../../src/plugins/vue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAgB/C;;GAEG;AACH,MAAM,OAAO,SAAS;IAIpB;;;OAGG;IACH,YAAY,OAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,GAAQ,EAAE,OAAyB;QACzC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;QAExD,SAAS;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvB,kBAAkB;QAClB,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC;QAEjD,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ;YACR,gBAAgB;YAChB,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO;YAEtD,cAAc;YACd,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;YAEvC,SAAS;YACT,GAAG,CAAC,KAAK,CAAC;gBACR,YAAY;oBACV,gBAAgB;oBAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;wBACpC,WAAW;wBACX,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,iBAAiB;YACjB,GAAG,CAAC,SAAS,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3C,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO;YAExC,OAAO;YACP,GAAG,CAAC,KAAK,CAAC;gBACR,YAAY;oBACV,gBAAgB;oBAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;wBACpC,WAAW;wBACX,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,WAA0D;IACxF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts b/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts new file mode 100644 index 0000000..3fd4c65 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts @@ -0,0 +1,39 @@ +/** + * SDK配置选项 + */ +export interface SDKConfig { + /** 客户端ID */ + clientId: string; + /** 注册id **/ + registrationId: string; + /** 后端basepath路径*/ + basepath: string; + /** 存储类型,默认localStorage */ + storageType?: 'localStorage' | 'sessionStorage' | 'cookie'; + idpLogoutUrl: string; + homePage: string; + /** 租户ID(可选) */ + tenantId?: string; +} +/** + * Token信息 + */ +export interface TokenInfo { + /** 访问令牌 */ + accessToken: string; + /** 刷新令牌 */ + refreshToken: string; + /** 令牌类型,默认Bearer */ + tokenType?: string; + /** 访问令牌过期时间(秒) */ + expiresIn: number; + /** 刷新令牌过期时间(秒) */ + refreshExpiresIn?: number; + /** 令牌颁发时间戳 */ + issuedAt: number; +} +/** + * 事件类型 + */ +export type EventType = 'login' | 'logout' | 'tokenExpired'; +//# sourceMappingURL=config.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts.map new file mode 100644 index 0000000..4599a82 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,QAAQ,CAAC;IAC3D,YAAY,EAAC,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.js b/sdk/frontend/oauth2-login-sdk/dist/types/config.js new file mode 100644 index 0000000..79bd47b --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/config.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.js.map b/sdk/frontend/oauth2-login-sdk/dist/types/config.js.map new file mode 100644 index 0000000..307c78b --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts b/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts new file mode 100644 index 0000000..e7396d2 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts @@ -0,0 +1,80 @@ +export * from './config'; +export * from './user'; +/** + * 统一登录SDK接口 + */ +export interface UnifiedLoginSDK { + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config: import('./config').SDKConfig): void; + getToken(): string | null; + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + login(redirectUri?: string): Promise; + /** + * 退出登录 + */ + logout(): Promise; + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + handleCallback(): Promise; + getRoutes(): Promise; + /** + * 获取用户信息 + * @returns Promise 用户信息 + */ + getUserInfo(): import('./user').UserInfo; + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated(): boolean; + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + hasRole(role: string | string[]): Promise; + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + hasAllRoles(roles: string[]): Promise; + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + hasPermission(permission: string | string[]): Promise; + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + hasAllPermissions(permissions: string[]): Promise; + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event: import('./config').EventType, callback: Function): void; + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event: import('./config').EventType, callback: Function): void; + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback(): boolean; +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts.map new file mode 100644 index 0000000..7b0f18b --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAEjD,QAAQ,IAAG,MAAM,GAAC,IAAI,CAAA;IACtB;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,IAAI,OAAO,CAAC,OAAO,QAAQ,EAAE,UAAU,CAAC,CAAC;IAElD;;;OAGG;IACH,WAAW,IAAI,OAAO,QAAQ,EAAE,QAAQ,CAAC;IAEzC;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC;IAE3B;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D;;;;OAIG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;OAIG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAElE;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,OAAO,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEnE;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC;CACvB"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.js b/sdk/frontend/oauth2-login-sdk/dist/types/index.js new file mode 100644 index 0000000..7f54cb6 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/index.js @@ -0,0 +1,3 @@ +export * from './config'; +export * from './user'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.js.map b/sdk/frontend/oauth2-login-sdk/dist/types/index.js.map new file mode 100644 index 0000000..892d9fc --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts b/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts new file mode 100644 index 0000000..f350b89 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts @@ -0,0 +1,83 @@ +/** + * 菜单信息 + */ +export interface RouterInfo { + /** 菜单名称 */ + name: string; + /** 菜单路径 */ + path?: string; + hidden: boolean; + redirect: string; + query: string; + alwaysShow: boolean; + /** 菜单组件 */ + component?: string; + meta: MetaVo; + children: RouterInfo; +} +export interface MetaVo { + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + title: string; + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + icon: string; + /** + * 设置为true,则不会被 缓存 + */ + noCache: boolean; + /** + * 内链地址(http(s)://开头) + */ + link: string; +} +/** + * 用户基本信息 + */ +export interface UserInfo { + /** 用户ID */ + userId: string; + /** 用户名 */ + username: string; + /** 姓名 */ + nickName: string; + /** 邮箱 */ + currentDeptId: string; + /** 部门 */ + userDepts?: UserDept[]; + /** 岗位 */ + userPost?: UserPost[]; + /** 性别 */ + sex: string; + /** 用户角色 */ + roles?: string[]; + /** 权限列表 */ + permissions?: string[]; + dataPermission: DataPermission; +} +export interface DataPermission { + allowAll: boolean; + onlySelf: boolean; + deptList?: string[]; + areas?: string[]; +} +export interface UserDept { + postCode: string; + postId: bigint; + postName: string; + postSort: bigint; + remark: string; + status: bigint; +} +export interface UserPost { + ancestors: string; + deptId: bigint; + deptName: string; + leader: string; + orderNum: bigint; + parentId: bigint; + status: bigint; +} +//# sourceMappingURL=user.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts.map new file mode 100644 index 0000000..c19c88c --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAC,MAAM,CAAC;IACZ,QAAQ,EAAE,UAAU,CAAC;CACtB;AACD,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,KAAK,EAAC,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAC,MAAM,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAC,OAAO,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAC,MAAM,CAAC;CACb;AAGD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS;IACT,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,SAAS;IACT,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,cAAc,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAC,MAAM,EAAE,CAAA;CAChB;AACD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAC,MAAM,CAAA;IACf,MAAM,EAAC,MAAM,CAAA;IACb,QAAQ,EAAC,MAAM,CAAA;IACf,QAAQ,EAAC,MAAM,CAAA;IACf,MAAM,EAAC,MAAM,CAAA;IACb,MAAM,EAAC,MAAM,CAAA;CACd;AACD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.js b/sdk/frontend/oauth2-login-sdk/dist/types/user.js new file mode 100644 index 0000000..8f7afc5 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/user.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=user.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.js.map b/sdk/frontend/oauth2-login-sdk/dist/types/user.js.map new file mode 100644 index 0000000..07c1726 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/types/user.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts new file mode 100644 index 0000000..ec62a69 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts @@ -0,0 +1,108 @@ +/** + * 存储工具类 + * 支持localStorage、sessionStorage和cookie三种存储方式 + */ +type StorageType = 'localStorage' | 'sessionStorage' | 'cookie'; +/** + * 存储工具类 + */ +export declare class Storage { + private storageType; + private prefix; + /** + * 构造函数 + * @param storageType 存储类型 + * @param prefix 存储前缀,默认'unified_login_' + */ + constructor(storageType?: StorageType, prefix?: string); + /** + * 设置存储项 + * @param key 存储键 + * @param value 存储值 + * @param options 可选参数,cookie存储时使用 + */ + set(key: string, value: any, options?: { + expires?: number; + path?: string; + domain?: string; + secure?: boolean; + }): void; + /** + * 获取存储项 + * @param key 存储键 + * @returns 存储值 + */ + get(key: string): any; + /** + * 移除存储项 + * @param key 存储键 + */ + remove(key: string): void; + /** + * 清空所有存储项 + */ + clear(): void; + /** + * 检查存储类型是否可用 + * @returns boolean 是否可用 + */ + isAvailable(): boolean; + /** + * 设置localStorage + */ + private setLocalStorage; + /** + * 获取localStorage + */ + private getLocalStorage; + /** + * 移除localStorage + */ + private removeLocalStorage; + /** + * 清空localStorage中所有带前缀的项 + */ + private clearLocalStorage; + /** + * 检查localStorage是否可用 + */ + private isLocalStorageAvailable; + /** + * 设置sessionStorage + */ + private setSessionStorage; + /** + * 获取sessionStorage + */ + private getSessionStorage; + /** + * 移除sessionStorage + */ + private removeSessionStorage; + /** + * 清空sessionStorage中所有带前缀的项 + */ + private clearSessionStorage; + /** + * 检查sessionStorage是否可用 + */ + private isSessionStorageAvailable; + /** + * 设置cookie + */ + private setCookie; + /** + * 获取cookie + */ + private getCookie; + /** + * 移除cookie + */ + private removeCookie; + /** + * 清空所有带前缀的cookie + */ + private clearCookie; +} +export {}; +//# sourceMappingURL=storage.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts.map new file mode 100644 index 0000000..3768e0f --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,WAAW,GAAG,cAAc,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AAEhE;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;OAIG;gBACS,WAAW,GAAE,WAA4B,EAAE,MAAM,GAAE,MAAyB;IAKxF;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAiBpH;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IA+BrB;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAgBzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;;OAGG;IACH,WAAW,IAAI,OAAO;IAmBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;OAEG;IACH,OAAO,CAAC,SAAS;IAsCjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAsBjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAcpB"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js new file mode 100644 index 0000000..039ba97 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js @@ -0,0 +1,316 @@ +/** + * 存储工具类 + * 支持localStorage、sessionStorage和cookie三种存储方式 + */ +/** + * 存储工具类 + */ +export class Storage { + /** + * 构造函数 + * @param storageType 存储类型 + * @param prefix 存储前缀,默认'unified_login_' + */ + constructor(storageType = 'localStorage', prefix = 'unified_login_') { + this.storageType = storageType; + this.prefix = prefix; + } + /** + * 设置存储项 + * @param key 存储键 + * @param value 存储值 + * @param options 可选参数,cookie存储时使用 + */ + set(key, value, options) { + const fullKey = this.prefix + key; + const stringValue = typeof value === 'string' ? value : JSON.stringify(value); + switch (this.storageType) { + case 'localStorage': + this.setLocalStorage(fullKey, stringValue); + break; + case 'sessionStorage': + this.setSessionStorage(fullKey, stringValue); + break; + case 'cookie': + this.setCookie(fullKey, stringValue, options); + break; + } + } + /** + * 获取存储项 + * @param key 存储键 + * @returns 存储值 + */ + get(key) { + const fullKey = this.prefix + key; + let value; + switch (this.storageType) { + case 'localStorage': + value = this.getLocalStorage(fullKey); + break; + case 'sessionStorage': + value = this.getSessionStorage(fullKey); + break; + case 'cookie': + value = this.getCookie(fullKey); + break; + default: + value = null; + } + if (value === null) { + return null; + } + // 尝试解析JSON + try { + return JSON.parse(value); + } + catch (e) { + // 如果不是JSON,直接返回字符串 + return value; + } + } + /** + * 移除存储项 + * @param key 存储键 + */ + remove(key) { + const fullKey = this.prefix + key; + switch (this.storageType) { + case 'localStorage': + this.removeLocalStorage(fullKey); + break; + case 'sessionStorage': + this.removeSessionStorage(fullKey); + break; + case 'cookie': + this.removeCookie(fullKey); + break; + } + } + /** + * 清空所有存储项 + */ + clear() { + switch (this.storageType) { + case 'localStorage': + this.clearLocalStorage(); + break; + case 'sessionStorage': + this.clearSessionStorage(); + break; + case 'cookie': + this.clearCookie(); + break; + } + } + /** + * 检查存储类型是否可用 + * @returns boolean 是否可用 + */ + isAvailable() { + try { + switch (this.storageType) { + case 'localStorage': + return this.isLocalStorageAvailable(); + case 'sessionStorage': + return this.isSessionStorageAvailable(); + case 'cookie': + return typeof document !== 'undefined'; + default: + return false; + } + } + catch (e) { + return false; + } + } + // ------------------------ localStorage 操作 ------------------------ + /** + * 设置localStorage + */ + setLocalStorage(key, value) { + if (this.isLocalStorageAvailable()) { + localStorage.setItem(key, value); + } + } + /** + * 获取localStorage + */ + getLocalStorage(key) { + if (this.isLocalStorageAvailable()) { + return localStorage.getItem(key); + } + return null; + } + /** + * 移除localStorage + */ + removeLocalStorage(key) { + if (this.isLocalStorageAvailable()) { + localStorage.removeItem(key); + } + } + /** + * 清空localStorage中所有带前缀的项 + */ + clearLocalStorage() { + if (this.isLocalStorageAvailable()) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(this.prefix)) { + localStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + /** + * 检查localStorage是否可用 + */ + isLocalStorageAvailable() { + if (typeof localStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + localStorage.setItem(testKey, testKey); + localStorage.removeItem(testKey); + return true; + } + catch (e) { + return false; + } + } + // ------------------------ sessionStorage 操作 ------------------------ + /** + * 设置sessionStorage + */ + setSessionStorage(key, value) { + if (this.isSessionStorageAvailable()) { + sessionStorage.setItem(key, value); + } + } + /** + * 获取sessionStorage + */ + getSessionStorage(key) { + if (this.isSessionStorageAvailable()) { + return sessionStorage.getItem(key); + } + return null; + } + /** + * 移除sessionStorage + */ + removeSessionStorage(key) { + if (this.isSessionStorageAvailable()) { + sessionStorage.removeItem(key); + } + } + /** + * 清空sessionStorage中所有带前缀的项 + */ + clearSessionStorage() { + if (this.isSessionStorageAvailable()) { + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i); + if (key && key.startsWith(this.prefix)) { + sessionStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + /** + * 检查sessionStorage是否可用 + */ + isSessionStorageAvailable() { + if (typeof sessionStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + sessionStorage.setItem(testKey, testKey); + sessionStorage.removeItem(testKey); + return true; + } + catch (e) { + return false; + } + } + // ------------------------ cookie 操作 ------------------------ + /** + * 设置cookie + */ + setCookie(key, value, options) { + if (typeof document === 'undefined') { + return; + } + let cookieString = `${key}=${encodeURIComponent(value)}`; + if (options) { + // 设置过期时间(秒) + if (options.expires) { + const date = new Date(); + date.setTime(date.getTime() + options.expires * 1000); + cookieString += `; expires=${date.toUTCString()}`; + } + // 设置路径 + if (options.path) { + cookieString += `; path=${options.path}`; + } + // 设置域名 + if (options.domain) { + cookieString += `; domain=${options.domain}`; + } + // 设置secure + if (options.secure) { + cookieString += '; secure'; + } + } + document.cookie = cookieString; + } + /** + * 获取cookie + */ + getCookie(key) { + if (typeof document === 'undefined') { + return null; + } + const name = `${key}=`; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return null; + } + /** + * 移除cookie + */ + removeCookie(key) { + this.setCookie(key, '', { expires: -1 }); + } + /** + * 清空所有带前缀的cookie + */ + clearCookie() { + if (typeof document === 'undefined') { + return; + } + const cookies = document.cookie.split(';'); + for (const cookie of cookies) { + const eqPos = cookie.indexOf('='); + const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); + if (key.startsWith(this.prefix)) { + this.removeCookie(key); + } + } + } +} +//# sourceMappingURL=storage.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js.map b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js.map new file mode 100644 index 0000000..ac897c6 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts b/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts new file mode 100644 index 0000000..8d92191 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts @@ -0,0 +1,55 @@ +/** + * URL处理工具 + * 用于生成授权URL、解析URL参数等功能 + */ +/** + * 生成随机字符串 + * @param length 字符串长度,默认32位 + * @returns 随机字符串 + */ +export declare function generateRandomString(length?: number): string; +/** + * 解析URL查询参数 + * @param url URL字符串,默认为当前URL + * @returns 查询参数对象 + */ +export declare function parseQueryParams(url?: string): Record; +/** + * 构建URL查询参数 + * @param params 查询参数对象 + * @returns 查询参数字符串 + */ +export declare function buildQueryParams(params: Record): string; +/** + * 生成OAuth2授权URL + * @param authorizationEndpoint 授权端点URL + * @param clientId 客户端ID + * @param redirectUri 重定向URL + * @param options 可选参数 + * @returns 授权URL + */ +export declare function generateAuthorizationUrl(authorizationEndpoint: string, clientId: string, redirectUri: string, options?: { + responseType?: string; + scope?: string; + state?: string; + [key: string]: any; +}): string; +/** + * 检查当前URL是否为授权回调 + * @param url URL字符串,默认为当前URL + * @returns 是否为授权回调 + */ +export declare function isCallbackUrl(url?: string): boolean; +/** + * 获取当前URL的路径名 + * @param url URL字符串,默认为当前URL + * @returns 路径名 + */ +export declare function getPathname(url?: string): string; +/** + * 获取当前URL的主机名 + * @param url URL字符串,默认为当前URL + * @returns 主机名 + */ +export declare function getHostname(url?: string): string; +//# sourceMappingURL=url.d.ts.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts.map b/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts.map new file mode 100644 index 0000000..085e247 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAOhE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB3F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAQpE;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,qBAAqB,EAAE,MAAM,EAC7B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,GACA,MAAM,CAmBR;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAA6B,GAAG,OAAO,CAGzE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAA6B,GAAG,MAAM,CAGtE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAA6B,GAAG,MAAM,CAGtE"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.js b/sdk/frontend/oauth2-login-sdk/dist/utils/url.js new file mode 100644 index 0000000..fc8750a --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/url.js @@ -0,0 +1,100 @@ +/** + * URL处理工具 + * 用于生成授权URL、解析URL参数等功能 + */ +/** + * 生成随机字符串 + * @param length 字符串长度,默认32位 + * @returns 随机字符串 + */ +export function generateRandomString(length = 32) { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let result = ''; + for (let i = 0; i < length; i++) { + result += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return result; +} +/** + * 解析URL查询参数 + * @param url URL字符串,默认为当前URL + * @returns 查询参数对象 + */ +export function parseQueryParams(url = window.location.href) { + const params = {}; + const queryString = url.split('?')[1]; + if (!queryString) { + return params; + } + const pairs = queryString.split('&'); + for (const pair of pairs) { + const [key, value] = pair.split('='); + if (key) { + params[decodeURIComponent(key)] = decodeURIComponent(value || ''); + } + } + return params; +} +/** + * 构建URL查询参数 + * @param params 查询参数对象 + * @returns 查询参数字符串 + */ +export function buildQueryParams(params) { + const pairs = []; + for (const [key, value] of Object.entries(params)) { + if (value !== undefined && value !== null) { + pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + } + } + return pairs.length ? `?${pairs.join('&')}` : ''; +} +/** + * 生成OAuth2授权URL + * @param authorizationEndpoint 授权端点URL + * @param clientId 客户端ID + * @param redirectUri 重定向URL + * @param options 可选参数 + * @returns 授权URL + */ +export function generateAuthorizationUrl(authorizationEndpoint, clientId, redirectUri, options) { + const { responseType = 'code', scope, state = generateRandomString(32), ...extraParams } = options || {}; + const params = { + client_id: clientId, + redirect_uri: redirectUri, + response_type: responseType, + state, + ...(scope ? { scope } : {}), + ...extraParams + }; + const queryString = buildQueryParams(params); + return `${authorizationEndpoint}${queryString}`; +} +/** + * 检查当前URL是否为授权回调 + * @param url URL字符串,默认为当前URL + * @returns 是否为授权回调 + */ +export function isCallbackUrl(url = window.location.href) { + const params = parseQueryParams(url); + return !!params.code || !!params.error; +} +/** + * 获取当前URL的路径名 + * @param url URL字符串,默认为当前URL + * @returns 路径名 + */ +export function getPathname(url = window.location.href) { + const urlObj = new URL(url); + return urlObj.pathname; +} +/** + * 获取当前URL的主机名 + * @param url URL字符串,默认为当前URL + * @returns 主机名 + */ +export function getHostname(url = window.location.href) { + const urlObj = new URL(url); + return urlObj.hostname; +} +//# sourceMappingURL=url.js.map \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.js.map b/sdk/frontend/oauth2-login-sdk/dist/utils/url.js.map new file mode 100644 index 0000000..9cb04c2 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/dist/utils/url.js.map @@ -0,0 +1 @@ +{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk/frontend/oauth2-login-sdk/package.json b/sdk/frontend/oauth2-login-sdk/package.json new file mode 100644 index 0000000..5bc200b --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/package.json @@ -0,0 +1,41 @@ +{ + "name": "oauth2-login-sdk", + "version": "1.0.0", + "description": "TypeScript前端SDK,用于前后端分离项目对接统一登录系统", + "main": "dist/index.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc && rollup -c", + "dev": "tsc -w", + "test": "jest", + "lint": "eslint src --ext .ts", + "prepublishOnly": "npm run build" + }, + "keywords": [ + "oauth2", + "login", + "sdk", + "typescript", + "unified-login" + ], + "author": "", + "license": "MIT", + "devDependencies": { + "@types/node": "^20.11.16", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint": "^8.56.0", + "jest-environment-jsdom": "^30.2.0", + "rollup": "^4.9.6", + "rollup-plugin-typescript2": "^0.36.0", + "typescript": "^5.3.3" + }, + "files": [ + "dist", + "src" + ], + "engines": { + "node": ">=16.0.0" + } +} diff --git a/sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml b/sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml new file mode 100644 index 0000000..e292df9 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml @@ -0,0 +1,2103 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@types/node': + specifier: ^20.11.16 + version: 20.19.30 + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^6.21.0 + version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + eslint: + specifier: ^8.56.0 + version: 8.57.1 + jest-environment-jsdom: + specifier: ^30.2.0 + version: 30.2.0 + rollup: + specifier: ^4.9.6 + version: 4.57.1 + rollup-plugin-typescript2: + specifier: ^0.36.0 + version: 0.36.0(rollup@4.57.1)(typescript@5.9.3) + typescript: + specifier: ^5.3.3 + version: 5.9.3 + +packages: + + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@jest/environment-jsdom-abstract@30.2.0': + resolution: {integrity: sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + jsdom: '*' + peerDependenciesMeta: + canvas: + optional: true + + '@jest/environment@30.2.0': + resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/fake-timers@30.2.0': + resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/schemas@30.0.5': + resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/types@30.2.0': + resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + cpu: [x64] + os: [win32] + + '@sinclair/typebox@0.34.48': + resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jsdom@21.1.7': + resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@20.19.30': + resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} + + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jest-environment-jsdom@30.2.0: + resolution: {integrity: sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-message-util@30.2.0: + resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-mock@30.2.0: + resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-util@30.2.0: + resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nwsapi@2.2.23: + resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-format@30.2.0: + resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-typescript2@0.36.0: + resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@asamuzakjp/css-color@3.2.0': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@csstools/color-helpers@5.1.0': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-tokenizer@3.0.4': {} + + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@jest/environment-jsdom-abstract@30.2.0(jsdom@26.1.0)': + dependencies: + '@jest/environment': 30.2.0 + '@jest/fake-timers': 30.2.0 + '@jest/types': 30.2.0 + '@types/jsdom': 21.1.7 + '@types/node': 20.19.30 + jest-mock: 30.2.0 + jest-util: 30.2.0 + jsdom: 26.1.0 + + '@jest/environment@30.2.0': + dependencies: + '@jest/fake-timers': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 20.19.30 + jest-mock: 30.2.0 + + '@jest/fake-timers@30.2.0': + dependencies: + '@jest/types': 30.2.0 + '@sinonjs/fake-timers': 13.0.5 + '@types/node': 20.19.30 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-util: 30.2.0 + + '@jest/pattern@30.0.1': + dependencies: + '@types/node': 20.19.30 + jest-regex-util: 30.0.1 + + '@jest/schemas@30.0.5': + dependencies: + '@sinclair/typebox': 0.34.48 + + '@jest/types@30.2.0': + dependencies: + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.5 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.19.30 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/rollup-android-arm-eabi@4.57.1': + optional: true + + '@rollup/rollup-android-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-x64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.57.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.57.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.57.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@sinclair/typebox@0.34.48': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@13.0.5': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@types/estree@1.0.8': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jsdom@21.1.7': + dependencies: + '@types/node': 20.19.30 + '@types/tough-cookie': 4.0.5 + parse5: 7.3.0 + + '@types/json-schema@7.0.15': {} + + '@types/node@20.19.30': + dependencies: + undici-types: 6.21.0 + + '@types/semver@7.7.1': {} + + '@types/stack-utils@2.0.3': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.7.3 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.7.3 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.7.1 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + eslint: 8.57.1 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.3.0': {} + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agent-base@7.1.4: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + ci-info@4.4.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commondir@1.0.1: {} + + concat-map@0.0.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssstyle@4.6.0: + dependencies: + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decimal.js@10.6.0: {} + + deep-is@0.1.4: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + entities@6.0.1: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.2 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.3: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-potential-custom-element-name@1.0.1: {} + + isexe@2.0.0: {} + + jest-environment-jsdom@30.2.0: + dependencies: + '@jest/environment': 30.2.0 + '@jest/environment-jsdom-abstract': 30.2.0(jsdom@26.1.0) + '@types/jsdom': 21.1.7 + '@types/node': 20.19.30 + jsdom: 26.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-message-util@30.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + '@jest/types': 30.2.0 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 30.2.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 20.19.30 + jest-util: 30.2.0 + + jest-regex-util@30.0.1: {} + + jest-util@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 20.19.30 + chalk: 4.1.2 + ci-info: 4.4.0 + graceful-fs: 4.2.11 + picomatch: 4.0.3 + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsdom@26.1.0: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.23 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.19.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@10.4.3: {} + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.2 + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + nwsapi@2.2.23: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + prelude-ls@1.2.1: {} + + pretty-format@30.2.0: + dependencies: + '@jest/schemas': 30.0.5 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-is@18.3.1: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup-plugin-typescript2@0.36.0(rollup@4.57.1)(typescript@5.9.3): + dependencies: + '@rollup/pluginutils': 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + rollup: 4.57.1 + semver: 7.7.3 + tslib: 2.8.1 + typescript: 5.9.3 + + rollup@4.57.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 + fsevents: 2.3.3 + + rrweb-cssom@0.8.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + semver@6.3.1: {} + + semver@7.7.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + slash@3.0.0: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + symbol-tree@3.2.4: {} + + text-table@0.2.0: {} + + tldts-core@6.1.86: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + + ts-api-utils@1.4.3(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + typescript@5.9.3: {} + + undici-types@6.21.0: {} + + universalify@2.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrappy@1.0.2: {} + + ws@8.19.0: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + yocto-queue@0.1.0: {} diff --git a/sdk/frontend/oauth2-login-sdk/rollup.config.js b/sdk/frontend/oauth2-login-sdk/rollup.config.js new file mode 100644 index 0000000..3ac5c7c --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/rollup.config.js @@ -0,0 +1,23 @@ +import typescript from 'rollup-plugin-typescript2'; + +export default { + input: 'src/index.ts', + output: [ + { + file: 'dist/index.js', + format: 'cjs', + sourcemap: true + }, + { + file: 'dist/index.esm.js', + format: 'esm', + sourcemap: true + } + ], + plugins: [ + typescript({ + tsconfig: './tsconfig.json', + clean: true + }) + ] +}; diff --git a/sdk/frontend/oauth2-login-sdk/src/core/auth.ts b/sdk/frontend/oauth2-login-sdk/src/core/auth.ts new file mode 100644 index 0000000..9a9ea2b --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/core/auth.ts @@ -0,0 +1,280 @@ +/** + * 认证核心逻辑 + * 实现OAuth2授权码模式的完整流程 + */ + +import {EventType, RouterInfo, SDKConfig, UserInfo} from '../types'; +import {TokenManager} from './token'; +import {HttpClient} from './http'; +import {Storage} from '../utils/storage'; +import {buildQueryParams, isCallbackUrl, parseQueryParams} from '../utils/url'; + +/** + * 认证核心类 + */ +export class Auth { + private config: SDKConfig | null = null; + private tokenManager: TokenManager; + private httpClient: HttpClient; + private storage: Storage; + private eventHandlers: Record = { + login: [], + logout: [], + tokenExpired: [] + }; + private userInfoCache: UserInfo | null = null; + + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage: Storage) { + this.storage = storage; + // 先创建HttpClient,初始时tokenManager为undefined + this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null); + // 然后创建TokenManager + this.tokenManager = new TokenManager(storage); + } + + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config: SDKConfig): void { + this.config = config; + // 设置租户ID到HTTP客户端 + this.httpClient.setTenantId(config.tenantId); + } + + getToken():string | null{ + return this.tokenManager.getToken() + } + + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + async login(redirectUri?: string): Promise { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const registrationId = this.config.registrationId || 'idp' + const basepath = this.config.basepath || '' + const path = `${basepath}/oauth2/authorization/${registrationId}` + const tokenResponse = await this.httpClient.get(path,{needAuth:false}) + const redirect = tokenResponse.data.redirect_url + const params = parseQueryParams(redirect) + this.storage.set(params.state,window.location.href) + window.location.href = redirect + } + + /** + * 退出登录 + */ + async logout(): Promise { + if (!this.config) { + throw new Error('SDK not initialized'); + } + // 清除本地存储的Token和用户信息 + this.tokenManager.clearToken(); + this.userInfoCache = null; + this.storage.remove('userInfo'); + const basepath = this.config.basepath || '' + await this.httpClient.post(`${basepath}/logout`,null,{needAuth:true}) + // 触发退出事件 + this.emit('logout'); + window.location.href = this.config.idpLogoutUrl+'?redirect='+this.config.homePage; + } + + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + async handleCallback(): Promise { + if (!this.config) { + throw new Error('SDK not initialized'); + } + + const params = parseQueryParams(); + + // 检查是否有错误 + if (params.error) { + throw new Error(`Authorization error: ${params.error} - ${params.error_description || ''}`); + } + + // 检查是否有授权码 + if (!params.code) { + throw new Error('Authorization code not found'); + } + + const registrationId = this.config.registrationId || 'idp' + const basepath = this.config.basepath || '' + const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}` + const tokenResponse = await this.httpClient.get(callback,{ + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + needAuth: false + }) + // 触发登录事件 + this.emit('login'); + this.storage.set('userInfo', tokenResponse.data.data); + this.tokenManager.saveToken(tokenResponse.headers['authorization']||tokenResponse.headers['Authorization']) + let url = this.config.homePage + if(params.state){ + url = this.storage.get(params.state) || url; + } + window.location.href = url; + + } + + async getRoutes(): Promise { + if (!this.config) { + throw new Error('SDK not initialized'); + } + const basepath = this.config.basepath || '' + const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`,{needAuth:true}) + if(tokenResponse.status===401){ + await this.logout() + } + return tokenResponse.data.data + + } + /** + * 获取用户信息 + * @returns UserInfo 用户信息 + */ + getUserInfo(): UserInfo { + return this.storage.get("userInfo"); + } + + + + + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + async hasRole(role: string | string[]): Promise { + if (!this.isAuthenticated()) { + return false; + } + + const userInfo:UserInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles||[]; + + if (Array.isArray(role)) { + // 检查是否有任一角色 + return role.some(r => roleCodes.includes(r)); + } + + // 检查是否有单个角色 + return roleCodes.includes(role); + } + + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + async hasAllRoles(roles: string[]): Promise { + if (!this.isAuthenticated()) { + return false; + } + + const userInfo:UserInfo = this.storage.get("userInfo"); + const roleCodes = userInfo.roles||[]; + // 检查是否有所有角色 + return roles.every(r => roleCodes.includes(r)); + } + + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + async hasPermission(permission: string | string[]): Promise { + if (!this.isAuthenticated()) { + return false; + } + + const userInfo:UserInfo = this.storage.get("userInfo"); + const permissions = userInfo.permissions||[]; + + if (Array.isArray(permission)) { + // 检查是否有任一权限 + return permission.some(p => permissions.includes(p)); + } + + // 检查是否有单个权限 + return permissions.includes(permission); + } + + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + async hasAllPermissions(permissions: string[]): Promise { + if (!this.isAuthenticated()) { + return false; + } + + const userInfo:UserInfo = this.storage.get("userInfo"); + const userPermissions = userInfo.permissions||[]; + + // 检查是否有所有权限 + return permissions.every(p => userPermissions.includes(p)); + } + + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated(): boolean { + // 检查Token是否存在且未过期 + return !!this.tokenManager.getToken(); + } + + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event: EventType, callback: Function): void { + this.eventHandlers[event].push(callback); + } + + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event: EventType, callback: Function): void { + this.eventHandlers[event] = this.eventHandlers[event].filter(handler => handler !== callback); + } + + /** + * 触发事件 + * @param event 事件类型 + * @param data 事件数据 + */ + private emit(event: EventType, data?: any): void { + this.eventHandlers[event].forEach(handler => { + try { + handler(data); + } catch (error) { + console.error(`Error in ${event} event handler:`, error); + } + }); + } + + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback(): boolean { + return isCallbackUrl(); + } +} diff --git a/sdk/frontend/oauth2-login-sdk/src/core/http.ts b/sdk/frontend/oauth2-login-sdk/src/core/http.ts new file mode 100644 index 0000000..6fc14be --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/core/http.ts @@ -0,0 +1,370 @@ +/** + * HTTP客户端 + * 用于与后端API进行通信 + */ + +/** + * HTTP请求方法类型 + */ +type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; + +/** + * HTTP请求选项 + */ +export interface HttpRequestOptions { + /** 请求方法 */ + method: HttpMethod; + /** 请求URL */ + url: string; + /** 请求头 */ + headers?: Record; + /** 请求体 */ + body?: any; + /** 是否需要认证 */ + needAuth?: boolean; +} + +/** + * HTTP响应类型 + */ +export interface HttpResponse { + /** 状态码 */ + status: number; + /** 状态文本 */ + statusText: string; + /** 响应体 */ + data: T; + /** 响应头 */ + headers: Record; +} + +/** + * HTTP错误类型 + */ +export class HttpError extends Error { + /** 状态码 */ + public status: number; + /** 状态文本 */ + public statusText: string; + /** 错误数据 */ + public data: any; + + /** + * 构造函数 + * @param message 错误信息 + * @param status 状态码 + * @param statusText 状态文本 + * @param data 错误数据 + */ + constructor(message: string, status: number, statusText: string, data: any) { + super(message); + this.name = 'HttpError'; + this.status = status; + this.statusText = statusText; + this.data = data; + } +} + +/** + * HTTP客户端类 + */ +export class HttpClient { + private tokenGetter?: () => string | null; + private tenantId?: string; + + /** + * 构造函数 + * @param logout + * @param tokenGetter Token获取函数 + */ + constructor(tokenGetter?: () => string | null) { + this.tokenGetter = tokenGetter; + + } + + /** + * 设置Token获取函数 + * @param tokenGetter Token获取函数 + */ + setTokenGetter(tokenGetter: () => string | null): void { + this.tokenGetter = tokenGetter; + } + + /** + * 设置租户ID + * @param tenantId 租户ID + */ + setTenantId(tenantId?: string): void { + this.tenantId = tenantId; + } + + /** + * 发送HTTP请求 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async request(options: HttpRequestOptions): Promise> { + const { + method, + url, + headers = {}, + body, + needAuth = true + } = options; + + // 构建请求头 + const requestHeaders: Record = { + 'Content-Type': 'application/json', + ...headers + }; + + // 添加认证头 + const addAuthHeader = () => { + if (needAuth && this.tokenGetter) { + const token = this.tokenGetter(); + if (token) { + requestHeaders.Authorization = `${token}`; + } + } + }; + + // 添加租户ID头 + if (this.tenantId) { + requestHeaders['tenant-id'] = this.tenantId; + } + + addAuthHeader(); + + // 构建请求配置 + const fetchOptions: RequestInit = { + method, + headers: requestHeaders, + credentials: 'include' // 包含cookie + }; + + // 添加请求体 + if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) { + fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body); + } + + try { + // 发送请求 + const response = await fetch(url, fetchOptions); + const responseData = await this.parseResponse(response); + + // 检查响应状态 + if (!response.ok) { + // 如果是401错误,尝试刷新Token并重试 + if (response.status === 401) { + return { + status: response.status, + statusText: response.statusText, + data: '' as T, + headers: this.parseHeaders(response.headers) + } + } + + // 其他错误,直接抛出 + const errorMsg = this.getErrorMessage(responseData); + throw new HttpError( + errorMsg, + response.status, + response.statusText, + responseData + ); + } + + // 处理成功响应的业务逻辑 + return this.handleResponse(response, responseData); + } catch (error) { + if (error instanceof HttpError) { + throw error; + } + + // 网络错误或其他错误 + throw new HttpError( + error instanceof Error ? error.message : 'Network Error', + 0, + 'Network Error', + null + ); + } + } + + + + /** + * 处理响应数据 + * @param response 响应对象 + * @param responseData 响应数据 + * @returns HttpResponse 处理后的响应 + */ + private handleResponse(response: Response, responseData: any): HttpResponse { + // 检查是否为业务响应结构 + if (this.isBusinessResponse(responseData)) { + // 业务响应结构:{ code, msg, data } + const { code, msg, data } = responseData; + + // 检查业务状态码 + if (code !== 0 && code !== 200 && code !== '0' && code !== '200') { + // 业务错误,抛出HttpError + throw new HttpError( + msg || `Business Error: ${code}`, + response.status, + response.statusText, + responseData + ); + } + + // 业务成功,返回data字段作为实际数据 + return { + status: response.status, + statusText: response.statusText, + data: data as T, + headers: this.parseHeaders(response.headers) + }; + } + + // 非业务响应结构,直接返回原始数据 + return { + status: response.status, + statusText: response.statusText, + data: responseData as T, + headers: this.parseHeaders(response.headers) + }; + } + + /** + * 检查是否为业务响应结构 + * @param responseData 响应数据 + * @returns boolean 是否为业务响应结构 + */ + private isBusinessResponse(responseData: any): boolean { + return typeof responseData === 'object' && + responseData !== null && + ('code' in responseData) && + ('msg' in responseData) && + ('data' in responseData); + } + + /** + * 获取错误信息 + * @param responseData 响应数据 + * @returns string 错误信息 + */ + private getErrorMessage(responseData: any): string { + // 如果是业务响应结构 + if (this.isBusinessResponse(responseData)) { + return responseData.msg || `Business Error: ${responseData.code}`; + } + + // 其他错误结构 + return responseData.message || responseData.error || `HTTP Error`; + } + + /** + * GET请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async get(url: string, options?: Omit): Promise> { + return this.request({ + method: 'GET', + url, + ...options + }); + } + + /** + * POST请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async post(url: string, body?: any, options?: Omit): Promise> { + return this.request({ + method: 'POST', + url, + body, + ...options + }); + } + + /** + * PUT请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async put(url: string, body?: any, options?: Omit): Promise> { + return this.request({ + method: 'PUT', + url, + body, + ...options + }); + } + + /** + * DELETE请求 + * @param url 请求URL + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async delete(url: string, options?: Omit): Promise> { + return this.request({ + method: 'DELETE', + url, + ...options + }); + } + + /** + * PATCH请求 + * @param url 请求URL + * @param body 请求体 + * @param options 请求选项 + * @returns Promise> 响应结果 + */ + async patch(url: string, body?: any, options?: Omit): Promise> { + return this.request({ + method: 'PATCH', + url, + body, + ...options + }); + } + + /** + * 解析响应体 + * @param response 响应对象 + * @returns Promise 解析后的响应体 + */ + private async parseResponse(response: Response): Promise { + const contentType = response.headers.get('content-type') || ''; + + if (contentType.includes('application/json')) { + return response.json(); + } else if (contentType.includes('text/')) { + return response.text(); + } else { + return response.blob(); + } + } + + /** + * 解析响应头 + * @param headers 响应头对象 + * @returns Record 解析后的响应头 + */ + private parseHeaders(headers: Headers): Record { + const result: Record = {}; + headers.forEach((value, key) => { + result[key] = value; + }); + return result; + } +} diff --git a/sdk/frontend/oauth2-login-sdk/src/core/token.ts b/sdk/frontend/oauth2-login-sdk/src/core/token.ts new file mode 100644 index 0000000..bf353a6 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/core/token.ts @@ -0,0 +1,45 @@ +/** + * Token管理模块 + * 负责Token的存储、获取、刷新和过期处理 + */ + +import { Storage } from '../utils/storage'; + +/** + * Token管理类 + */ +export class TokenManager { + private storage: Storage; + + /** + * 构造函数 + * @param storage 存储实例 + * @param httpClient HTTP客户端实例 + */ + constructor(storage: Storage) { + this.storage = storage; + } + + /** + * 存储Token信息 + * @param tokenInfo Token信息 + */ + saveToken(tokenInfo: string): void { + this.storage.set('token', tokenInfo); + } + + /** + * 获取Token信息 + * @returns TokenInfo | null Token信息 + */ + getToken(): string | null { + return this.storage.get('token'); + } + + /** + * 清除Token信息 + */ + clearToken(): void { + this.storage.remove('token'); + } +} diff --git a/sdk/frontend/oauth2-login-sdk/src/guards/router.ts b/sdk/frontend/oauth2-login-sdk/src/guards/router.ts new file mode 100644 index 0000000..f1df6a6 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/guards/router.ts @@ -0,0 +1,130 @@ +/** + * 路由守卫模块 + * 提供基于权限的路由拦截和未登录自动跳转登录页功能 + */ + +import { Auth } from '../core/auth'; + +/** + * 路由守卫选项 + */ +export interface RouterGuardOptions { + /** + * 是否需要登录 + */ + requiresAuth?: boolean; + /** + * 需要的权限列表 + */ + requiredPermissions?: string[]; + /** + * 登录后重定向的URL + */ + redirectUri?: string; + /** + * 权限不足时重定向的URL + */ + unauthorizedRedirectUri?: string; +} + +/** + * 路由守卫类 + */ +export class RouterGuard { + private auth: Auth; + + /** + * 构造函数 + * @param auth 认证实例 + */ + constructor(auth: Auth) { + this.auth = auth; + } + + /** + * 检查路由权限 + * @param options 路由守卫选项 + * @returns Promise 是否通过权限检查 + */ + async check(options: RouterGuardOptions): Promise { + const { requiresAuth = true, requiredPermissions = [] } = options; + + // 检查是否需要登录 + if (requiresAuth) { + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + // 未认证,跳转到登录页 + this.auth.login(options.redirectUri); + return false; + } + + // 检查是否需要权限 + if (requiredPermissions.length > 0) { + // 获取用户权限 + const userPermissions = ['']; + + // 检查是否拥有所有需要的权限 + const hasPermission = requiredPermissions.every(permission => + userPermissions.includes(permission) + ); + + if (!hasPermission) { + // 权限不足,跳转到权限不足页 + if (options.unauthorizedRedirectUri) { + window.location.href = options.unauthorizedRedirectUri; + } + return false; + } + } + } + + return true; + } + + /** + * 创建Vue路由守卫 + * @returns 路由守卫函数 + */ + createVueGuard() { + return async (to: any, from: any, next: any) => { + // 从路由元信息中获取守卫选项 + const options: RouterGuardOptions = to.meta?.auth || {}; + + try { + const allowed = await this.check(options); + if (allowed) { + next(); + } + } catch (error) { + console.error('Route guard error:', error); + next(false); + } + }; + } + + /** + * 检查当前用户是否有权限访问资源 + * @param permissions 需要的权限列表 + * @returns Promise 是否拥有权限 + */ + async hasPermission(permissions: string | string[]): Promise { + if (!permissions) { + return true; + } + + const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions]; + + // 检查是否已认证 + if (!this.auth.isAuthenticated()) { + return false; + } + + // 获取用户权限 + const userPermissions = [''] + + // 检查是否拥有所有需要的权限 + return requiredPermissions.every(permission => + userPermissions.includes(permission) + ); + } +} diff --git a/sdk/frontend/oauth2-login-sdk/src/index.ts b/sdk/frontend/oauth2-login-sdk/src/index.ts new file mode 100644 index 0000000..08387bc --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/index.ts @@ -0,0 +1,94 @@ +/** + * 统一登录SDK入口文件 + * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能 + */ + +// 导出核心类和功能 +export { Auth } from './core/auth'; +export { TokenManager } from './core/token'; +export { HttpClient, HttpError } from './core/http'; +export { Storage } from './utils/storage'; +export { RouterGuard, RouterGuardOptions } from './guards/router'; + +// 导出工具函数 +export { + generateRandomString, + parseQueryParams, + buildQueryParams, + generateAuthorizationUrl, + isCallbackUrl +} from './utils/url'; + +// 导出类型定义 +export * from './types'; + +// 导出Vue插件 +export { VuePlugin, createVuePlugin } from './plugins/vue'; + +// 创建默认SDK实例 +import { SDKConfig, UnifiedLoginSDK } from './types'; +import { Auth as AuthCore } from './core/auth'; +import { Storage as StorageCore } from './utils/storage'; + +/** + * 默认SDK实例 + */ +const defaultStorage = new StorageCore(); +const defaultAuth = new AuthCore(defaultStorage); + +/** + * 默认导出的SDK实例 + */ +export const unifiedLoginSDK: UnifiedLoginSDK = { + init: (config: SDKConfig) => { + defaultAuth.init(config); + }, + getToken: () => { + return defaultAuth.getToken() + }, + login: (redirectUri?: string) => { + return defaultAuth.login(redirectUri); + }, + logout: () => { + return defaultAuth.logout(); + }, + handleCallback: () => { + return defaultAuth.handleCallback(); + }, + getRoutes: () => { + return defaultAuth.getRoutes(); + }, + getUserInfo: () => { + return defaultAuth.getUserInfo(); + }, + isAuthenticated: () => { + return defaultAuth.isAuthenticated(); + }, + hasRole: (role: string | string[]) => { + return defaultAuth.hasRole(role); + }, + hasAllRoles: (roles: string[]) => { + return defaultAuth.hasAllRoles(roles); + }, + hasPermission: (permission: string | string[]) => { + return defaultAuth.hasPermission(permission); + }, + hasAllPermissions: (permissions: string[]) => { + return defaultAuth.hasAllPermissions(permissions); + }, + on: (event, callback) => { + return defaultAuth.on(event, callback); + }, + off: (event, callback) => { + return defaultAuth.off(event, callback); + }, + isCallback: () => { + return defaultAuth.isCallback(); + } +}; + +// 默认导出 +export default unifiedLoginSDK; + +// 版本信息 +export const version = '1.0.0'; diff --git a/sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts b/sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts new file mode 100644 index 0000000..c736792 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts @@ -0,0 +1,121 @@ +/** + * Vue插件模块 + * 提供Vue应用中使用统一登录SDK的能力 + */ + +import { Auth } from '../core/auth'; +import { SDKConfig } from '../types'; +import { Storage } from '../utils/storage'; +import { RouterGuard } from '../guards/router'; + +/** + * Vue插件选项 + */ +export interface VuePluginOptions { + /** + * SDK配置 + */ + config: SDKConfig; + /** + * 插件名称,默认'unifiedLogin' + */ + pluginName?: string; +} + +/** + * Vue插件类 + */ +export class VuePlugin { + private auth: Auth; + private routerGuard: RouterGuard; + + /** + * 构造函数 + * @param storage 存储实例 + */ + constructor(storage: Storage) { + this.auth = new Auth(storage); + this.routerGuard = new RouterGuard(this.auth); + } + + /** + * 安装Vue插件 + * @param app Vue构造函数或Vue 3应用实例 + * @param options 插件选项 + */ + install(app: any, options: VuePluginOptions): void { + const { config, pluginName = 'unifiedLogin' } = options; + + // 初始化SDK + this.auth.init(config); + + // 判断是Vue 2还是Vue 3 + const isVue3 = typeof app.config !== 'undefined'; + + if (isVue3) { + // Vue 3 + // 在全局属性上挂载SDK实例 + app.config.globalProperties[`${pluginName}`] = this.auth; + app.config.globalProperties.$auth = this.auth; // 兼容简写 + + // 提供Vue组件内的注入 + app.provide(pluginName, this.auth); + app.provide('auth', this.auth); // 兼容简写 + + // 处理路由守卫 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } else { + // Vue 2 + // 在Vue实例上挂载SDK实例 + app.prototype[`${pluginName}`] = this.auth; + app.prototype.$auth = this.auth; // 兼容简写 + + // 全局混入 + app.mixin({ + beforeCreate() { + // 如果是根组件,添加路由守卫 + if (this.$options.router) { + const router = this.$options.router; + // 添加全局前置守卫 + router.beforeEach(this.routerGuard.createVueGuard()); + } + } + }); + } + } + + /** + * 获取认证实例 + * @returns Auth 认证实例 + */ + getAuth(): Auth { + return this.auth; + } + + /** + * 获取路由守卫实例 + * @returns RouterGuard 路由守卫实例 + */ + getRouterGuard(): RouterGuard { + return this.routerGuard; + } +} + +/** + * 创建Vue插件实例 + * @param storageType 存储类型 + * @returns VuePlugin Vue插件实例 + */ +export function createVuePlugin(storageType?: 'localStorage' | 'sessionStorage' | 'cookie'): VuePlugin { + const storage = new Storage(storageType); + return new VuePlugin(storage); +} diff --git a/sdk/frontend/oauth2-login-sdk/src/types/config.ts b/sdk/frontend/oauth2-login-sdk/src/types/config.ts new file mode 100644 index 0000000..8c76dd8 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/types/config.ts @@ -0,0 +1,40 @@ +/** + * SDK配置选项 + */ +export interface SDKConfig { + /** 客户端ID */ + clientId: string; + /** 注册id **/ + registrationId: string, + /** 后端basepath路径*/ + basepath: string, + /** 存储类型,默认localStorage */ + storageType?: 'localStorage' | 'sessionStorage' | 'cookie'; + idpLogoutUrl:string; + homePage: string; + /** 租户ID(可选) */ + tenantId?: string; +} + +/** + * Token信息 + */ +export interface TokenInfo { + /** 访问令牌 */ + accessToken: string; + /** 刷新令牌 */ + refreshToken: string; + /** 令牌类型,默认Bearer */ + tokenType?: string; + /** 访问令牌过期时间(秒) */ + expiresIn: number; + /** 刷新令牌过期时间(秒) */ + refreshExpiresIn?: number; + /** 令牌颁发时间戳 */ + issuedAt: number; +} + +/** + * 事件类型 + */ +export type EventType = 'login' | 'logout' | 'tokenExpired'; diff --git a/sdk/frontend/oauth2-login-sdk/src/types/index.ts b/sdk/frontend/oauth2-login-sdk/src/types/index.ts new file mode 100644 index 0000000..beaf006 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/types/index.ts @@ -0,0 +1,94 @@ +import {RouterInfo} from "./user"; + +export * from './config'; +export * from './user'; + +/** + * 统一登录SDK接口 + */ +export interface UnifiedLoginSDK { + /** + * 初始化SDK配置 + * @param config SDK配置选项 + */ + init(config: import('./config').SDKConfig): void; + + getToken():string|null + /** + * 触发登录流程 + * @param redirectUri 可选的重定向URL,覆盖初始化时的配置 + */ + login(redirectUri?: string): Promise; + + /** + * 退出登录 + */ + logout(): Promise; + + /** + * 处理授权回调 + * @returns Promise 用户信息 + */ + handleCallback(): Promise; + getRoutes(): Promise; + + /** + * 获取用户信息 + * @returns Promise 用户信息 + */ + getUserInfo(): import('./user').UserInfo; + + /** + * 检查用户是否已认证 + * @returns boolean 是否已认证 + */ + isAuthenticated(): boolean; + + /** + * 检查用户是否有指定角色 + * @param role 角色编码或角色编码列表 + * @returns Promise 是否有指定角色 + */ + hasRole(role: string | string[]): Promise; + + /** + * 检查用户是否有所有指定角色 + * @param roles 角色编码列表 + * @returns Promise 是否有所有指定角色 + */ + hasAllRoles(roles: string[]): Promise; + + /** + * 检查用户是否有指定权限 + * @param permission 权限标识或权限标识列表 + * @returns Promise 是否有指定权限 + */ + hasPermission(permission: string | string[]): Promise; + + /** + * 检查用户是否有所有指定权限 + * @param permissions 权限标识列表 + * @returns Promise 是否有所有指定权限 + */ + hasAllPermissions(permissions: string[]): Promise; + + /** + * 事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + on(event: import('./config').EventType, callback: Function): void; + + /** + * 移除事件监听 + * @param event 事件类型 + * @param callback 回调函数 + */ + off(event: import('./config').EventType, callback: Function): void; + + /** + * 检查当前URL是否为授权回调 + * @returns boolean 是否为授权回调 + */ + isCallback(): boolean; +} diff --git a/sdk/frontend/oauth2-login-sdk/src/types/user.ts b/sdk/frontend/oauth2-login-sdk/src/types/user.ts new file mode 100644 index 0000000..ed23753 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/types/user.ts @@ -0,0 +1,88 @@ +/** + * 菜单信息 + */ +export interface RouterInfo { + /** 菜单名称 */ + name: string; + /** 菜单路径 */ + path?: string; + hidden: boolean; + redirect: string; + query: string; + alwaysShow: boolean; + /** 菜单组件 */ + component?: string; + meta:MetaVo; + children: RouterInfo; +} +export interface MetaVo { + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + title:string; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + icon:string; + + /** + * 设置为true,则不会被 缓存 + */ + noCache:boolean; + + /** + * 内链地址(http(s)://开头) + */ + link:string; +} + + +/** + * 用户基本信息 + */ +export interface UserInfo { + /** 用户ID */ + userId: string; + /** 用户名 */ + username: string; + /** 姓名 */ + nickName: string; + /** 邮箱 */ + currentDeptId: string; + /** 部门 */ + userDepts?: UserDept[]; + /** 岗位 */ + userPost?: UserPost[]; + /** 性别 */ + sex: string; + /** 用户角色 */ + roles?: string[]; + /** 权限列表 */ + permissions?: string[]; + dataPermission: DataPermission +} + +export interface DataPermission { + allowAll: boolean; + onlySelf: boolean; + deptList?: string[]; + areas?:string[] +} +export interface UserDept{ + postCode:string + postId:bigint + postName:string + postSort:bigint + remark:string + status:bigint +} +export interface UserPost{ + ancestors: string + deptId: bigint + deptName: string + leader: string + orderNum: bigint + parentId: bigint + status: bigint +} diff --git a/sdk/frontend/oauth2-login-sdk/src/utils/storage.ts b/sdk/frontend/oauth2-login-sdk/src/utils/storage.ts new file mode 100644 index 0000000..083eda0 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/utils/storage.ts @@ -0,0 +1,358 @@ +/** + * 存储工具类 + * 支持localStorage、sessionStorage和cookie三种存储方式 + */ + +type StorageType = 'localStorage' | 'sessionStorage' | 'cookie'; + +/** + * 存储工具类 + */ +export class Storage { + private storageType: StorageType; + private prefix: string; + + /** + * 构造函数 + * @param storageType 存储类型 + * @param prefix 存储前缀,默认'unified_login_' + */ + constructor(storageType: StorageType = 'localStorage', prefix: string = 'unified_login_') { + this.storageType = storageType; + this.prefix = prefix; + } + + /** + * 设置存储项 + * @param key 存储键 + * @param value 存储值 + * @param options 可选参数,cookie存储时使用 + */ + set(key: string, value: any, options?: { expires?: number; path?: string; domain?: string; secure?: boolean }): void { + const fullKey = this.prefix + key; + const stringValue = typeof value === 'string' ? value : JSON.stringify(value); + + switch (this.storageType) { + case 'localStorage': + this.setLocalStorage(fullKey, stringValue); + break; + case 'sessionStorage': + this.setSessionStorage(fullKey, stringValue); + break; + case 'cookie': + this.setCookie(fullKey, stringValue, options); + break; + } + } + + /** + * 获取存储项 + * @param key 存储键 + * @returns 存储值 + */ + get(key: string): any { + const fullKey = this.prefix + key; + let value: any; + + switch (this.storageType) { + case 'localStorage': + value = this.getLocalStorage(fullKey); + break; + case 'sessionStorage': + value = this.getSessionStorage(fullKey); + break; + case 'cookie': + value = this.getCookie(fullKey); + break; + default: + value = null; + } + + if (value === null) { + return null; + } + + // 尝试解析JSON + try { + return JSON.parse(value); + } catch (e) { + // 如果不是JSON,直接返回字符串 + return value; + } + } + + /** + * 移除存储项 + * @param key 存储键 + */ + remove(key: string): void { + const fullKey = this.prefix + key; + + switch (this.storageType) { + case 'localStorage': + this.removeLocalStorage(fullKey); + break; + case 'sessionStorage': + this.removeSessionStorage(fullKey); + break; + case 'cookie': + this.removeCookie(fullKey); + break; + } + } + + /** + * 清空所有存储项 + */ + clear(): void { + switch (this.storageType) { + case 'localStorage': + this.clearLocalStorage(); + break; + case 'sessionStorage': + this.clearSessionStorage(); + break; + case 'cookie': + this.clearCookie(); + break; + } + } + + /** + * 检查存储类型是否可用 + * @returns boolean 是否可用 + */ + isAvailable(): boolean { + try { + switch (this.storageType) { + case 'localStorage': + return this.isLocalStorageAvailable(); + case 'sessionStorage': + return this.isSessionStorageAvailable(); + case 'cookie': + return typeof document !== 'undefined'; + default: + return false; + } + } catch (e) { + return false; + } + } + + // ------------------------ localStorage 操作 ------------------------ + + /** + * 设置localStorage + */ + private setLocalStorage(key: string, value: string): void { + if (this.isLocalStorageAvailable()) { + localStorage.setItem(key, value); + } + } + + /** + * 获取localStorage + */ + private getLocalStorage(key: string): string | null { + if (this.isLocalStorageAvailable()) { + return localStorage.getItem(key); + } + return null; + } + + /** + * 移除localStorage + */ + private removeLocalStorage(key: string): void { + if (this.isLocalStorageAvailable()) { + localStorage.removeItem(key); + } + } + + /** + * 清空localStorage中所有带前缀的项 + */ + private clearLocalStorage(): void { + if (this.isLocalStorageAvailable()) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(this.prefix)) { + localStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + + /** + * 检查localStorage是否可用 + */ + private isLocalStorageAvailable(): boolean { + if (typeof localStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + localStorage.setItem(testKey, testKey); + localStorage.removeItem(testKey); + return true; + } catch (e) { + return false; + } + } + + // ------------------------ sessionStorage 操作 ------------------------ + + /** + * 设置sessionStorage + */ + private setSessionStorage(key: string, value: string): void { + if (this.isSessionStorageAvailable()) { + sessionStorage.setItem(key, value); + } + } + + /** + * 获取sessionStorage + */ + private getSessionStorage(key: string): string | null { + if (this.isSessionStorageAvailable()) { + return sessionStorage.getItem(key); + } + return null; + } + + /** + * 移除sessionStorage + */ + private removeSessionStorage(key: string): void { + if (this.isSessionStorageAvailable()) { + sessionStorage.removeItem(key); + } + } + + /** + * 清空sessionStorage中所有带前缀的项 + */ + private clearSessionStorage(): void { + if (this.isSessionStorageAvailable()) { + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i); + if (key && key.startsWith(this.prefix)) { + sessionStorage.removeItem(key); + i--; // 索引调整 + } + } + } + } + + /** + * 检查sessionStorage是否可用 + */ + private isSessionStorageAvailable(): boolean { + if (typeof sessionStorage === 'undefined') { + return false; + } + try { + const testKey = '__storage_test__'; + sessionStorage.setItem(testKey, testKey); + sessionStorage.removeItem(testKey); + return true; + } catch (e) { + return false; + } + } + + // ------------------------ cookie 操作 ------------------------ + + /** + * 设置cookie + */ + private setCookie( + key: string, + value: string, + options?: { expires?: number; path?: string; domain?: string; secure?: boolean } + ): void { + if (typeof document === 'undefined') { + return; + } + + let cookieString = `${key}=${encodeURIComponent(value)}`; + + if (options) { + // 设置过期时间(秒) + if (options.expires) { + const date = new Date(); + date.setTime(date.getTime() + options.expires * 1000); + cookieString += `; expires=${date.toUTCString()}`; + } + + // 设置路径 + if (options.path) { + cookieString += `; path=${options.path}`; + } + + // 设置域名 + if (options.domain) { + cookieString += `; domain=${options.domain}`; + } + + // 设置secure + if (options.secure) { + cookieString += '; secure'; + } + } + + document.cookie = cookieString; + } + + /** + * 获取cookie + */ + private getCookie(key: string): string | null { + if (typeof document === 'undefined') { + return null; + } + + const name = `${key}=`; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + + return null; + } + + /** + * 移除cookie + */ + private removeCookie(key: string): void { + this.setCookie(key, '', { expires: -1 }); + } + + /** + * 清空所有带前缀的cookie + */ + private clearCookie(): void { + if (typeof document === 'undefined') { + return; + } + + const cookies = document.cookie.split(';'); + for (const cookie of cookies) { + const eqPos = cookie.indexOf('='); + const key = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); + if (key.startsWith(this.prefix)) { + this.removeCookie(key); + } + } + } +} diff --git a/sdk/frontend/oauth2-login-sdk/src/utils/url.ts b/sdk/frontend/oauth2-login-sdk/src/utils/url.ts new file mode 100644 index 0000000..d27f52b --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/src/utils/url.ts @@ -0,0 +1,125 @@ +/** + * URL处理工具 + * 用于生成授权URL、解析URL参数等功能 + */ + +/** + * 生成随机字符串 + * @param length 字符串长度,默认32位 + * @returns 随机字符串 + */ +export function generateRandomString(length: number = 32): string { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let result = ''; + for (let i = 0; i < length; i++) { + result += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return result; +} + +/** + * 解析URL查询参数 + * @param url URL字符串,默认为当前URL + * @returns 查询参数对象 + */ +export function parseQueryParams(url: string = window.location.href): Record { + const params: Record = {}; + const queryString = url.split('?')[1]; + if (!queryString) { + return params; + } + + const pairs = queryString.split('&'); + for (const pair of pairs) { + const [key, value] = pair.split('='); + if (key) { + params[decodeURIComponent(key)] = decodeURIComponent(value || ''); + } + } + + return params; +} + +/** + * 构建URL查询参数 + * @param params 查询参数对象 + * @returns 查询参数字符串 + */ +export function buildQueryParams(params: Record): string { + const pairs: string[] = []; + for (const [key, value] of Object.entries(params)) { + if (value !== undefined && value !== null) { + pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + } + } + return pairs.length ? `?${pairs.join('&')}` : ''; +} + +/** + * 生成OAuth2授权URL + * @param authorizationEndpoint 授权端点URL + * @param clientId 客户端ID + * @param redirectUri 重定向URL + * @param options 可选参数 + * @returns 授权URL + */ +export function generateAuthorizationUrl( + authorizationEndpoint: string, + clientId: string, + redirectUri: string, + options?: { + responseType?: string; + scope?: string; + state?: string; + [key: string]: any; + } +): string { + const { + responseType = 'code', + scope, + state = generateRandomString(32), + ...extraParams + } = options || {}; + + const params = { + client_id: clientId, + redirect_uri: redirectUri, + response_type: responseType, + state, + ...(scope ? { scope } : {}), + ...extraParams + }; + + const queryString = buildQueryParams(params); + return `${authorizationEndpoint}${queryString}`; +} + +/** + * 检查当前URL是否为授权回调 + * @param url URL字符串,默认为当前URL + * @returns 是否为授权回调 + */ +export function isCallbackUrl(url: string = window.location.href): boolean { + const params = parseQueryParams(url); + return !!params.code || !!params.error; +} + +/** + * 获取当前URL的路径名 + * @param url URL字符串,默认为当前URL + * @returns 路径名 + */ +export function getPathname(url: string = window.location.href): string { + const urlObj = new URL(url); + return urlObj.pathname; +} + +/** + * 获取当前URL的主机名 + * @param url URL字符串,默认为当前URL + * @returns 主机名 + */ +export function getHostname(url: string = window.location.href): string { + const urlObj = new URL(url); + return urlObj.hostname; +} diff --git a/sdk/frontend/oauth2-login-sdk/tsconfig.json b/sdk/frontend/oauth2-login-sdk/tsconfig.json new file mode 100644 index 0000000..dd7b863 --- /dev/null +++ b/sdk/frontend/oauth2-login-sdk/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "ESNext", + "moduleResolution": "node", + "lib": ["ES2018", "DOM"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/*.test.ts"] +}

&}#9f*=h+sr45FuX>d*2mwG}B!9(4eMCV+hG& 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ð_3F8EcM^B9UcWwDU9|n#I&X&#*_?} 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ȽG_#+$AG`aAoVw-?{8Hk)k8n|{02?dG@&fBxe9 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 #p(n#e41aUOhdarUgfb0?!?*wWsrw%KUJzk?B;W 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

=q}tJSLS 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�W;3 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�dIVlPai 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