From c75d6f37c9444c3ee78325128f7dd46d4d194fb7 Mon Sep 17 00:00:00 2001 From: Mac Date: Mon, 15 Apr 2024 16:49:36 +0530 Subject: [PATCH 1/6] feat: add support for sonar --- .gitignore | 2 + jest.config.js | 12 +++ package.json | 1 + sonar-project.properties | 8 ++ yarn.lock | 163 ++++++++++++++++++--------------------- 5 files changed, 99 insertions(+), 87 deletions(-) create mode 100644 sonar-project.properties diff --git a/.gitignore b/.gitignore index 0653bf0..a47ba05 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,5 @@ buck-out/ .expo/ web-build/ dist/ +reports +coverage \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index ec83c0d..508bae2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -9,6 +9,18 @@ module.exports = { '!app/*/*/Loadable.{js,jsx}', '!**/coverage/**', ], + "reporters": [ + "default", + [ + "jest-sonar", + { + "outputDirectory": "reports", + "outputName": "test-report.xml", + "relativeRootDir": "./", + "reportedFilePath": "relative" + } + ] + ], coverageThreshold: { global: { statements: 50, diff --git a/package.json b/package.json index d26b2b4..52ed43b 100644 --- a/package.json +++ b/package.json @@ -123,6 +123,7 @@ "eslint-plugin-standard": "^4.0.0", "husky": "^3.0.8", "jest": "^24.5.0", + "jest-sonar": "^0.2.16", "pre-commit": "1.2.2", "prettier": "^1.18.2", "prettier-eslint": "^9.0.0", diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..f32ce13 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,8 @@ +sonar.projectKey=wednesday-solutions_react-native-template_AY7hdnRSB2n8RRmGoU2M +sonar.language=js +sonar.sources=. +sonar.tests=app +sonar.test.inclusions=**/*.test.js +sonar.javascript.lcov.reportPaths=./coverage/lcov.info +sonar.testExecutionReportPaths=./reports/test-report.xml +sonar.sourceEncoding=UTF-8 \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 87e78d0..689ca82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2778,12 +2778,12 @@ slash "^2.0.0" strip-ansi "^5.0.0" -"@jest/create-cache-key-function@^29.0.3": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.3.1.tgz#3a0970ea595ab3d9507244edbcef14d6b016cdc9" - integrity sha512-4i+E+E40gK13K78ffD/8cy4lSSqeWwyXeTZoq16tndiCP12hC8uQsPJdIu5C6Kf22fD8UbBk71so7s/6VwpUOQ== +"@jest/create-cache-key-function@^27.0.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" + integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^27.5.1" "@jest/environment@^24.9.0": version "24.9.0" @@ -2919,18 +2919,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" - integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== - dependencies: - "@jest/schemas" "^29.0.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -3043,7 +3031,7 @@ dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@^9.2.1": +"@react-native-community/cli-doctor@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-9.3.0.tgz#8817a3fd564453467def5b5bc8aecdc4205eff50" integrity sha512-/fiuG2eDGC2/OrXMOWI5ifq4X1gdYTQhvW2m0TT5Lk1LuFiZsbTCp1lR+XILKekuTvmYNjEGdVpeDpdIWlXdEA== @@ -3065,31 +3053,18 @@ sudo-prompt "^9.0.0" wcwidth "^1.0.1" -"@react-native-community/cli-hermes@^9.2.1": - version "9.3.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-9.3.1.tgz#569d27c1effd684ba451ad4614e29a99228cec49" - integrity sha512-Mq4PK8m5YqIdaVq5IdRfp4qK09aVO+aiCtd6vjzjNUgk1+1X5cgUqV6L65h4N+TFJYJHcp2AnB+ik1FAYXvYPQ== +"@react-native-community/cli-hermes@^9.3.1": + version "9.3.4" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-9.3.4.tgz#47851847c4990272687883bd8bf53733d5f3c341" + integrity sha512-VqTPA7kknCXgtYlRf+sDWW4yxZ6Gtg1Ga+Rdrn1qSKuo09iJ8YKPoQYOu5nqbIYJQAEhorWQyo1VvNgd0wd49w== dependencies: - "@react-native-community/cli-platform-android" "^9.3.1" + "@react-native-community/cli-platform-android" "^9.3.4" "@react-native-community/cli-tools" "^9.2.1" chalk "^4.1.2" hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-platform-android@9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-9.2.1.tgz#cd73cb6bbaeb478cafbed10bd12dfc01b484d488" - integrity sha512-VamCZ8nido3Q3Orhj6pBIx48itORNPLJ7iTfy3nucD1qISEDih3DOzCaQCtmqdEBgUkNkNl0O+cKgq5A3th3Zg== - dependencies: - "@react-native-community/cli-tools" "^9.2.1" - chalk "^4.1.2" - execa "^1.0.0" - fs-extra "^8.1.0" - glob "^7.1.3" - logkitty "^0.7.1" - slash "^3.0.0" - -"@react-native-community/cli-platform-android@^9.3.1": +"@react-native-community/cli-platform-android@9.3.1": version "9.3.1" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.1.tgz#378cd72249653cc74672094400657139f21bafb8" integrity sha512-m0bQ6Twewl7OEZoVf79I2GZmsDqh+Gh0bxfxWgwxobsKDxLx8/RNItAo1lVtTCgzuCR75cX4EEO8idIF9jYhew== @@ -3102,18 +3077,20 @@ logkitty "^0.7.1" slash "^3.0.0" -"@react-native-community/cli-platform-ios@9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.2.1.tgz#d90740472216ffae5527dfc5f49063ede18a621f" - integrity sha512-dEgvkI6CFgPk3vs8IOR0toKVUjIFwe4AsXFvWWJL5qhrIzW9E5Owi0zPkSvzXsMlfYMbVX0COfVIK539ZxguSg== +"@react-native-community/cli-platform-android@^9.3.4": + version "9.3.4" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.4.tgz#42f22943b6ee15713add6af8608c1d0ebf79d774" + integrity sha512-BTKmTMYFuWtMqimFQJfhRyhIWw1m+5N5svR1S5+DqPcyFuSXrpNYDWNSFR8E105xUbFANmsCZZQh6n1WlwMpOA== dependencies: "@react-native-community/cli-tools" "^9.2.1" chalk "^4.1.2" execa "^1.0.0" + fs-extra "^8.1.0" glob "^7.1.3" - ora "^5.4.1" + logkitty "^0.7.1" + slash "^3.0.0" -"@react-native-community/cli-platform-ios@^9.3.0": +"@react-native-community/cli-platform-ios@9.3.0", "@react-native-community/cli-platform-ios@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.3.0.tgz#45abde2a395fddd7cf71e8b746c1dc1ee2260f9a" integrity sha512-nihTX53BhF2Q8p4B67oG3RGe1XwggoGBrMb6vXdcu2aN0WeXJOXdBLgR900DAA1O8g7oy1Sudu6we+JsVTKnjw== @@ -3177,16 +3154,16 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-9.2.1.tgz#15cc32531fc323d4232d57b1f2d7c571816305ac" - integrity sha512-feMYS5WXXKF4TSWnCXozHxtWq36smyhGaENXlkiRESfYZ1mnCUlPfOanNCAvNvBqdyh9d4o0HxhYKX1g9l6DCQ== +"@react-native-community/cli@9.3.2": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-9.3.2.tgz#81761880af00c1894d85380d8c9a358659865204" + integrity sha512-IAW4X0vmX/xozNpp/JVZaX7MrC85KV0OP2DF4o7lNGOfpUhzJAEWqTfkxFYS+VsRjZHDve4wSTiGIuXwE7FG1w== dependencies: "@react-native-community/cli-clean" "^9.2.1" "@react-native-community/cli-config" "^9.2.1" "@react-native-community/cli-debugger-ui" "^9.0.0" - "@react-native-community/cli-doctor" "^9.2.1" - "@react-native-community/cli-hermes" "^9.2.1" + "@react-native-community/cli-doctor" "^9.3.0" + "@react-native-community/cli-hermes" "^9.3.1" "@react-native-community/cli-plugin-metro" "^9.2.1" "@react-native-community/cli-server-api" "^9.2.1" "@react-native-community/cli-tools" "^9.2.1" @@ -3431,11 +3408,6 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== -"@types/invariant@^2.2.35": - version "2.2.35" - resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be" - integrity sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -3567,13 +3539,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^17.0.8": - version "17.0.20" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.20.tgz#107f0fcc13bd4a524e352b41c49fe88aab5c54d5" - integrity sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A== - dependencies: - "@types/yargs-parser" "*" - "@typescript-eslint/eslint-plugin@^1.5.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" @@ -3994,6 +3959,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -7096,6 +7066,11 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +entities@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" + integrity sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg== + entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -7917,10 +7892,10 @@ expo-status-bar@~1.4.2: resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.4.2.tgz#14f2b9a6dc7d550578421f07e0046f5fafc2b403" integrity sha512-ZWjO6D4ARGYfAd3SWDD3STNudHDhyBZDZjhhseqoEmsf7bS9ykny8KKOhlzJW24qIQNPhkgdvHhaw9fQwMJy3Q== -expo@^47.0.0: - version "47.0.13" - resolved "https://registry.yarnpkg.com/expo/-/expo-47.0.13.tgz#f53f82e7f9e209f8a8b25f2493f58439958368cb" - integrity sha512-9VjjGdViCJ9NfWbUE7brkwFBDvKuA35V345vMtHFYNKoGJjXib36yitmawreMDQFv0kMTqTnzc7T2191Pod7Ng== +expo@~47.0.14: + version "47.0.14" + resolved "https://registry.yarnpkg.com/expo/-/expo-47.0.14.tgz#3386d82d56f0827d1c5661aec5eae7d2b7dea43e" + integrity sha512-WA6BbLI00R9TweBHRVm+kAFoYqkYOK4oMizNV2CmpxEJaRm8J4R9KI2+WnfkYVPiW6dzDTUR4bG6yAwgzSowEA== dependencies: "@babel/runtime" "^7.14.0" "@expo/cli" "0.4.11" @@ -10440,6 +10415,14 @@ jest-snapshot@^24.9.0: pretty-format "^24.9.0" semver "^6.2.0" +jest-sonar@^0.2.16: + version "0.2.16" + resolved "https://registry.yarnpkg.com/jest-sonar/-/jest-sonar-0.2.16.tgz#58d2e150dbcb9a3c781c78ae8fda327ea2439b4c" + integrity sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA== + dependencies: + entities "4.3.0" + strip-ansi "6.0.1" + jest-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" @@ -13593,10 +13576,10 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -promise@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== +promise@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -13909,10 +13892,10 @@ react-native-codegen@^0.70.6: jscodeshift "^0.13.1" nullthrows "^1.1.1" -react-native-gesture-handler@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.8.0.tgz#ef9857871c10663c95a51546225b6e00cd4740cf" - integrity sha512-poOSfz/w0IyD6Qwq7aaIRRfEaVTl1ecQFoyiIbpOpfNTjm2B1niY2FLrdVQIOtIOe+K9nH55Qal04nr4jGkHdQ== +react-native-gesture-handler@^2.8.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.16.0.tgz#45a00b5988e74ebc58f130c8d1443319c8e678db" + integrity sha512-1hFkx7RIfeJSyTQQ0Nkv4icFVZ5+XjQkd47OgZMBFzoB7ecL+nFSz8KLi3OCWOhq+nbHpSPlSG5VF3CQNCJpWA== dependencies: "@egjs/hammerjs" "^2.0.17" hoist-non-react-statics "^3.3.0" @@ -13930,14 +13913,13 @@ react-native-iphone-x-helper@^1.3.0: resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010" integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg== -react-native-reanimated@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.12.0.tgz#5821eecfb1769b1617a67a2d4dec12fdeedb2b6e" - integrity sha512-nrlPyw+Hx9u4iJhZk9PoTvDo/QmVAd+bo7OK9Tv3hveNEF9++5oig/g3Uv9V93shy9avTYGsUprUvAEt/xdzeQ== +react-native-reanimated@^2.12.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.17.0.tgz#eae2308235961cdd79810e01dfdd7e88b1ae5b5c" + integrity sha512-bVy+FUEaHXq4i+aPPqzGeor1rG4scgVNBbBz21ohvC7iMpB9IIgvGsmy1FAoodZhZ5sa3EPF67Rcec76F1PXlQ== dependencies: "@babel/plugin-transform-object-assign" "^7.16.7" "@babel/preset-typescript" "^7.16.7" - "@types/invariant" "^2.2.35" invariant "^2.2.4" lodash.isequal "^4.5.0" setimmediate "^1.0.5" @@ -13980,15 +13962,15 @@ react-native-web@~0.18.7: postcss-value-parser "^4.2.0" styleq "^0.1.2" -react-native@0.70.5: - version "0.70.5" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.70.5.tgz#f60540b21d338891086e0a834e331c124dd1f55c" - integrity sha512-5NZM80LC3L+TIgQX/09yiyy48S73wMgpIgN5cCv3XTMR394+KpDI3rBZGH4aIgWWuwijz31YYVF5504+9n2Zfw== +react-native@0.70.8: + version "0.70.8" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.70.8.tgz#aa9aae8e6291589908db74fe69e0ec1d9a9c5490" + integrity sha512-O3ONJed9W/VEEVWsbZcwyMDhnEvw7v9l9enqWqgbSGLzHfh6HeIGMCNmjz+kRsHnC7AiF47fupWfgYX7hNnhoQ== dependencies: - "@jest/create-cache-key-function" "^29.0.3" - "@react-native-community/cli" "9.2.1" - "@react-native-community/cli-platform-android" "9.2.1" - "@react-native-community/cli-platform-ios" "9.2.1" + "@jest/create-cache-key-function" "^27.0.1" + "@react-native-community/cli" "9.3.2" + "@react-native-community/cli-platform-android" "9.3.1" + "@react-native-community/cli-platform-ios" "9.3.0" "@react-native/assets" "1.0.0" "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" @@ -14005,7 +13987,7 @@ react-native@0.70.5: mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" - promise "^8.0.3" + promise "^8.3.0" react-devtools-core "4.24.0" react-native-codegen "^0.70.6" react-native-gradle-plugin "^0.70.3" @@ -15561,6 +15543,13 @@ strip-ansi@6.0.0, strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" From 8c78a996c0e66caa24793865637ab7c23fa2d040 Mon Sep 17 00:00:00 2001 From: Mac Date: Mon, 15 Apr 2024 20:51:22 +0530 Subject: [PATCH 2/6] feat: add android --- android/.gitignore | 21 + android/app/BUCK | 55 +++ android/app/build.gradle | 362 ++++++++++++++++++ android/app/build_defs.bzl | 19 + android/app/debug.keystore | Bin 0 -> 2257 bytes android/app/my-upload-key.keystore | Bin 6842 -> 0 bytes android/app/proguard-rules.pro | 14 + android/app/src/debug/AndroidManifest.xml | 7 + .../rntws/ReactNativeFlipper.java | 69 ++++ android/app/src/main/AndroidManifest.xml | 35 ++ .../rntws/MainActivity.java | 83 ++++ .../rntws/MainApplication.java | 106 +++++ .../MainApplicationReactNativeHost.java | 117 ++++++ .../components/MainComponentsRegistry.java | 36 ++ ...ApplicationTurboModuleManagerDelegate.java | 48 +++ android/app/src/main/jni/CMakeLists.txt | 7 + .../jni/MainApplicationModuleProvider.cpp | 32 ++ .../main/jni/MainApplicationModuleProvider.h | 16 + ...nApplicationTurboModuleManagerDelegate.cpp | 45 +++ ...ainApplicationTurboModuleManagerDelegate.h | 38 ++ .../src/main/jni/MainComponentsRegistry.cpp | 65 ++++ .../app/src/main/jni/MainComponentsRegistry.h | 32 ++ android/app/src/main/jni/OnLoad.cpp | 11 + .../res/drawable-hdpi/splashscreen_image.png | Bin 0 -> 32726 bytes .../res/drawable-mdpi/splashscreen_image.png | Bin 0 -> 32726 bytes .../res/drawable-xhdpi/splashscreen_image.png | Bin 0 -> 32726 bytes .../drawable-xxhdpi/splashscreen_image.png | Bin 0 -> 32726 bytes .../drawable-xxxhdpi/splashscreen_image.png | Bin 0 -> 32726 bytes .../res/drawable/rn_edit_text_material.xml | 36 ++ .../src/main/res/drawable/splashscreen.xml | 3 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3240 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3240 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2174 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2174 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4004 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 4004 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7000 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 7000 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10240 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 10240 bytes .../app/src/main/res/values-night/colors.xml | 1 + android/app/src/main/res/values/colors.xml | 6 + android/app/src/main/res/values/strings.xml | 5 + android/app/src/main/res/values/styles.xml | 17 + android/build.gradle | 65 ++++ android/gradle.properties | 53 +++ android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + android/gradlew | 240 ++++++++++++ android/gradlew.bat | 91 +++++ android/settings.gradle | 17 + 51 files changed, 1757 insertions(+) create mode 100644 android/.gitignore create mode 100644 android/app/BUCK create mode 100644 android/app/build.gradle create mode 100644 android/app/build_defs.bzl create mode 100644 android/app/debug.keystore delete mode 100644 android/app/my-upload-key.keystore create mode 100644 android/app/proguard-rules.pro create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/debug/java/com/wednesdaysolutions/rntws/ReactNativeFlipper.java create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/java/com/wednesdaysolutions/rntws/MainActivity.java create mode 100644 android/app/src/main/java/com/wednesdaysolutions/rntws/MainApplication.java create mode 100644 android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/MainApplicationReactNativeHost.java create mode 100644 android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/components/MainComponentsRegistry.java create mode 100644 android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java create mode 100644 android/app/src/main/jni/CMakeLists.txt create mode 100644 android/app/src/main/jni/MainApplicationModuleProvider.cpp create mode 100644 android/app/src/main/jni/MainApplicationModuleProvider.h create mode 100644 android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp create mode 100644 android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h create mode 100644 android/app/src/main/jni/MainComponentsRegistry.cpp create mode 100644 android/app/src/main/jni/MainComponentsRegistry.h create mode 100644 android/app/src/main/jni/OnLoad.cpp create mode 100644 android/app/src/main/res/drawable-hdpi/splashscreen_image.png create mode 100644 android/app/src/main/res/drawable-mdpi/splashscreen_image.png create mode 100644 android/app/src/main/res/drawable-xhdpi/splashscreen_image.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png create mode 100644 android/app/src/main/res/drawable/rn_edit_text_material.xml create mode 100644 android/app/src/main/res/drawable/splashscreen.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/values-night/colors.xml create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/strings.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100755 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 android/settings.gradle diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..64436ba --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,21 @@ +# OSX +# +.DS_Store + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof + +# BUCK +buck-out/ +\.buckd/ +*.keystore +!debug.keystore + +# Bundle artifacts +*.jsbundle diff --git a/android/app/BUCK b/android/app/BUCK new file mode 100644 index 0000000..ffbb062 --- /dev/null +++ b/android/app/BUCK @@ -0,0 +1,55 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") + +lib_deps = [] + +create_aar_targets(glob(["libs/*.aar"])) + +create_jar_targets(glob(["libs/*.jar"])) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.wednesdaysolutions.rntws", +) + +android_resource( + name = "res", + package = "com.wednesdaysolutions.rntws", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..b3339d3 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,362 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation. If none specified and + * // "index.android.js" exists, it will be used. Otherwise "index.js" is + * // default. Can be overridden with ENTRY_FILE environment variable. + * entryFile: "index.android.js", + * + * // https://reactnative.dev/docs/performance#enable-the-ram-format + * bundleCommand: "ram-bundle", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +def reactNativeRoot = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + +project.ext.react = [ + entryFile: ["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android"].execute(null, rootDir).text.trim(), + enableHermes: (findProperty('expo.jsEngine') ?: "jsc") == "hermes", + hermesCommand: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc", + cliPath: "${reactNativeRoot}/cli.js", + composeSourceMapsPath: "${reactNativeRoot}/scripts/compose-source-maps.js", +] + +apply from: new File(reactNativeRoot, "react.gradle") + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() + +/** + * The preferred build flavor of JavaScriptCore. + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +/** + * Whether to enable the Hermes VM. + * + * This should be set on project.ext.react and that value will be read here. If it is not set + * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode + * and the benefits of using Hermes will therefore be sharply reduced. + */ +def enableHermes = project.ext.react.get("enableHermes", false); + +/** + * Architectures to build native code for. + */ +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} + +android { + ndkVersion rootProject.ext.ndkVersion + + compileSdkVersion rootProject.ext.compileSdkVersion + + defaultConfig { + applicationId 'com.wednesdaysolutions.rntws' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0.0" + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + + if (isNewArchitectureEnabled()) { + // We configure the CMake build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + cmake { + arguments "-DPROJECT_BUILD_DIR=$buildDir", + "-DREACT_ANDROID_DIR=${reactNativeRoot}/ReactAndroid", + "-DREACT_ANDROID_BUILD_DIR=${reactNativeRoot}/ReactAndroid/build", + "-DNODE_MODULES_DIR=$rootDir/../node_modules", + "-DANDROID_STL=c++_shared" + } + } + if (!enableSeparateBuildPerCPUArchitecture) { + ndk { + abiFilters (*reactNativeArchitectures()) + } + } + } + } + + if (isNewArchitectureEnabled()) { + // We configure the CMake build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + cmake { + path "$projectDir/src/main/jni/CMakeLists.txt" + } + } + def reactAndroidProjectDir = project(':ReactAndroid').projectDir + def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + afterEvaluate { + // If you wish to add a custom TurboModule or component locally, + // you should uncomment this line. + // preBuild.dependsOn("generateCodegenArtifactsFromSchema") + preDebugBuild.dependsOn(packageReactNdkDebugLibs) + preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) + + // Due to a bug inside AGP, we have to explicitly set a dependency + // between configureCMakeDebug* tasks and the preBuild tasks. + // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 + configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild) + configureCMakeDebug.dependsOn(preDebugBuild) + reactNativeArchitectures().each { architecture -> + tasks.findByName("configureCMakeDebug[${architecture}]")?.configure { + dependsOn("preDebugBuild") + } + tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure { + dependsOn("preReleaseBuild") + } + } + } + } + + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include (*reactNativeArchitectures()) + } + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // https://developer.android.com/studio/build/configure-apk-splits.html + def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + + } + } +} + +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + + //noinspection GradleDynamicVersion + implementation "com.facebook.react:react-native:+" // From node_modules + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + def frescoVersion = rootProject.ext.frescoVersion + + // If your app supports Android versions before Ice Cream Sandwich (API level 14) + if (isGifEnabled || isWebpEnabled) { + implementation "com.facebook.fresco:fresco:${frescoVersion}" + implementation "com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}" + } + + if (isGifEnabled) { + // For animated gif support + implementation "com.facebook.fresco:animated-gif:${frescoVersion}" + } + + if (isWebpEnabled) { + // For webp support + implementation "com.facebook.fresco:webpsupport:${frescoVersion}" + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation "com.facebook.fresco:animated-webp:${frescoVersion}" + } + } + + implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" + debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { + exclude group:'com.facebook.fbjni' + } + debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { + exclude group:'com.facebook.flipper' + exclude group:'com.squareup.okhttp3', module:'okhttp' + } + debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { + exclude group:'com.facebook.flipper' + } + + if (enableHermes) { + //noinspection GradleDynamicVersion + implementation("com.facebook.react:hermes-engine:+") { // From node_modules + exclude group:'com.facebook.fbjni' + } + } else { + implementation jscFlavor + } +} + +if (isNewArchitectureEnabled()) { + // If new architecture is enabled, we let you build RN from source + // Otherwise we fallback to a prebuilt .aar bundled in the NPM package. + // This will be applied to all the imported transtitive dependency. + configurations.all { + resolutionStrategy.dependencySubstitution { + substitute(module("com.facebook.react:react-native")) + .using(project(":ReactAndroid")) + .because("On New Architecture we're building React Native from source") + substitute(module("com.facebook.react:hermes-engine")) + .using(project(":ReactAndroid:hermes-engine")) + .because("On New Architecture we're building Hermes from source") + } + } +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.implementation + into 'libs' +} + +apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); +applyNativeModulesAppBuildGradle(project) + +def isNewArchitectureEnabled() { + // To opt-in for the New Architecture, you can either: + // - Set `newArchEnabled` to true inside the `gradle.properties` file + // - Invoke gradle with `-newArchEnabled=true` + // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} diff --git a/android/app/build_defs.bzl b/android/app/build_defs.bzl new file mode 100644 index 0000000..fff270f --- /dev/null +++ b/android/app/build_defs.bzl @@ -0,0 +1,19 @@ +"""Helper definitions to glob .aar and .jar targets""" + +def create_aar_targets(aarfiles): + for aarfile in aarfiles: + name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] + lib_deps.append(":" + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +def create_jar_targets(jarfiles): + for jarfile in jarfiles: + name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] + lib_deps.append(":" + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) diff --git a/android/app/debug.keystore b/android/app/debug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..364e105ed39fbfd62001429a68140672b06ec0de GIT binary patch literal 2257 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 + + + + + diff --git a/android/app/src/debug/java/com/wednesdaysolutions/rntws/ReactNativeFlipper.java b/android/app/src/debug/java/com/wednesdaysolutions/rntws/ReactNativeFlipper.java new file mode 100644 index 0000000..ea24048 --- /dev/null +++ b/android/app/src/debug/java/com/wednesdaysolutions/rntws/ReactNativeFlipper.java @@ -0,0 +1,69 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + */ +package com.wednesdaysolutions.rntws; + +import android.content.Context; +import com.facebook.flipper.android.AndroidFlipperClient; +import com.facebook.flipper.android.utils.FlipperUtils; +import com.facebook.flipper.core.FlipperClient; +import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; +import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; +import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; +import com.facebook.flipper.plugins.inspector.DescriptorMapping; +import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; +import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; +import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; +import com.facebook.flipper.plugins.react.ReactFlipperPlugin; +import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.modules.network.NetworkingModule; +import okhttp3.OkHttpClient; + +public class ReactNativeFlipper { + public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { + if (FlipperUtils.shouldEnableFlipper(context)) { + final FlipperClient client = AndroidFlipperClient.getInstance(context); + client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); + client.addPlugin(new ReactFlipperPlugin()); + client.addPlugin(new DatabasesFlipperPlugin(context)); + client.addPlugin(new SharedPreferencesFlipperPlugin(context)); + client.addPlugin(CrashReporterPlugin.getInstance()); + NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); + NetworkingModule.setCustomClientBuilder( + new NetworkingModule.CustomClientBuilder() { + @Override + public void apply(OkHttpClient.Builder builder) { + builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); + } + }); + client.addPlugin(networkFlipperPlugin); + client.start(); + // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized + // Hence we run if after all native modules have been initialized + ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); + if (reactContext == null) { + reactInstanceManager.addReactInstanceEventListener( + new ReactInstanceManager.ReactInstanceEventListener() { + @Override + public void onReactContextInitialized(ReactContext reactContext) { + reactInstanceManager.removeReactInstanceEventListener(this); + reactContext.runOnNativeModulesQueueThread( + new Runnable() { + @Override + public void run() { + client.addPlugin(new FrescoFlipperPlugin()); + } + }); + } + }); + } else { + client.addPlugin(new FrescoFlipperPlugin()); + } + } + } +} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..dfcf75a --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/com/wednesdaysolutions/rntws/MainActivity.java b/android/app/src/main/java/com/wednesdaysolutions/rntws/MainActivity.java new file mode 100644 index 0000000..29eb7af --- /dev/null +++ b/android/app/src/main/java/com/wednesdaysolutions/rntws/MainActivity.java @@ -0,0 +1,83 @@ +package com.wednesdaysolutions.rntws; + +import android.os.Build; +import android.os.Bundle; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; + +import expo.modules.ReactActivityDelegateWrapper; + +public class MainActivity extends ReactActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + setTheme(R.style.AppTheme); + super.onCreate(null); + } + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "main"; + } + + /** + * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and + * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer + * (Paper). + */ + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, + new MainActivityDelegate(this, getMainComponentName()) + ); + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + @Override + public void invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed(); + } + return; + } + + // Use the default back button implementation on Android S + // because it's doing more than {@link Activity#moveTaskToBack} in fact. + super.invokeDefaultOnBackPressed(); + } + + public static class MainActivityDelegate extends ReactActivityDelegate { + public MainActivityDelegate(ReactActivity activity, String mainComponentName) { + super(activity, mainComponentName); + } + + @Override + protected ReactRootView createRootView() { + ReactRootView reactRootView = new ReactRootView(getContext()); + // If you opted-in for the New Architecture, we enable the Fabric Renderer. + reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); + return reactRootView; + } + + @Override + protected boolean isConcurrentRootEnabled() { + // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). + // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } + } +} diff --git a/android/app/src/main/java/com/wednesdaysolutions/rntws/MainApplication.java b/android/app/src/main/java/com/wednesdaysolutions/rntws/MainApplication.java new file mode 100644 index 0000000..9ac0764 --- /dev/null +++ b/android/app/src/main/java/com/wednesdaysolutions/rntws/MainApplication.java @@ -0,0 +1,106 @@ +package com.wednesdaysolutions.rntws; + +import android.app.Application; +import android.content.Context; +import android.content.res.Configuration; +import androidx.annotation.NonNull; + +import com.facebook.react.PackageList; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; +import com.facebook.soloader.SoLoader; +import com.wednesdaysolutions.rntws.newarchitecture.MainApplicationReactNativeHost; + +import expo.modules.ApplicationLifecycleDispatcher; +import expo.modules.ReactNativeHostWrapper; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper( + this, + new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages; + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }); + + private final ReactNativeHost mNewArchitectureNativeHost = + new ReactNativeHostWrapper(this, new MainApplicationReactNativeHost(this)); + + @Override + public ReactNativeHost getReactNativeHost() { + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + return mNewArchitectureNativeHost; + } else { + return mReactNativeHost; + } + } + + @Override + public void onCreate() { + super.onCreate(); + // If you opted-in for the New Architecture, we enable the TurboModule system + ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + SoLoader.init(this, /* native exopackage */ false); + + initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); + ApplicationLifecycleDispatcher.onApplicationCreate(this); + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); + } + + /** + * Loads Flipper in React Native templates. Call this in the onCreate method with something like + * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); + * + * @param context + * @param reactInstanceManager + */ + private static void initializeFlipper( + Context context, ReactInstanceManager reactInstanceManager) { + if (BuildConfig.DEBUG) { + try { + /* + We use reflection here to pick up the class that initializes Flipper, + since Flipper library is not available in release mode + */ + Class aClass = Class.forName("com.wednesdaysolutions.rntws.ReactNativeFlipper"); + aClass + .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) + .invoke(null, context, reactInstanceManager); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } +} diff --git a/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/MainApplicationReactNativeHost.java b/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/MainApplicationReactNativeHost.java new file mode 100644 index 0000000..2f5eef1 --- /dev/null +++ b/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/MainApplicationReactNativeHost.java @@ -0,0 +1,117 @@ +package com.wednesdaysolutions.rntws.newarchitecture; + +import android.app.Application; +import androidx.annotation.NonNull; +import com.facebook.react.PackageList; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.JSIModulePackage; +import com.facebook.react.bridge.JSIModuleProvider; +import com.facebook.react.bridge.JSIModuleSpec; +import com.facebook.react.bridge.JSIModuleType; +import com.facebook.react.bridge.JavaScriptContextHolder; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.UIManager; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.react.fabric.CoreComponentsRegistry; +import com.facebook.react.fabric.EmptyReactNativeConfig; +import com.facebook.react.fabric.FabricJSIModuleProvider; +import com.facebook.react.fabric.ReactNativeConfig; +import com.facebook.react.uimanager.ViewManagerRegistry; +import com.wednesdaysolutions.rntws.BuildConfig; +import com.wednesdaysolutions.rntws.newarchitecture.components.MainComponentsRegistry; +import com.wednesdaysolutions.rntws.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate; +import java.util.ArrayList; +import java.util.List; + +/** + * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both + * TurboModule delegates and the Fabric Renderer. + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +public class MainApplicationReactNativeHost extends ReactNativeHost { + public MainApplicationReactNativeHost(Application application) { + super(application); + } + + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + // TurboModules must also be loaded here providing a valid TurboReactPackage implementation: + // packages.add(new TurboReactPackage() { ... }); + // If you have custom Fabric Components, their ViewManagers should also be loaded here + // inside a ReactPackage. + return packages; + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + + @NonNull + @Override + protected ReactPackageTurboModuleManagerDelegate.Builder + getReactPackageTurboModuleManagerDelegateBuilder() { + // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary + // for the new architecture and to use TurboModules correctly. + return new MainApplicationTurboModuleManagerDelegate.Builder(); + } + + @Override + protected JSIModulePackage getJSIModulePackage() { + return new JSIModulePackage() { + @Override + public List getJSIModules( + final ReactApplicationContext reactApplicationContext, + final JavaScriptContextHolder jsContext) { + final List specs = new ArrayList<>(); + + // Here we provide a new JSIModuleSpec that will be responsible of providing the + // custom Fabric Components. + specs.add( + new JSIModuleSpec() { + @Override + public JSIModuleType getJSIModuleType() { + return JSIModuleType.UIManager; + } + + @Override + public JSIModuleProvider getJSIModuleProvider() { + final ComponentFactory componentFactory = new ComponentFactory(); + CoreComponentsRegistry.register(componentFactory); + + // Here we register a Components Registry. + // The one that is generated with the template contains no components + // and just provides you the one from React Native core. + MainComponentsRegistry.register(componentFactory); + + final ReactInstanceManager reactInstanceManager = getReactInstanceManager(); + + ViewManagerRegistry viewManagerRegistry = + new ViewManagerRegistry( + reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)); + + return new FabricJSIModuleProvider( + reactApplicationContext, + componentFactory, + ReactNativeConfig.DEFAULT_CONFIG, + viewManagerRegistry); + } + }); + return specs; + } + }; + } +} diff --git a/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/components/MainComponentsRegistry.java b/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/components/MainComponentsRegistry.java new file mode 100644 index 0000000..f0fe8da --- /dev/null +++ b/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/components/MainComponentsRegistry.java @@ -0,0 +1,36 @@ +package com.wednesdaysolutions.rntws.newarchitecture.components; + +import com.facebook.jni.HybridData; +import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.soloader.SoLoader; + +/** + * Class responsible to load the custom Fabric Components. This class has native methods and needs a + * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ + * folder for you). + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +@DoNotStrip +public class MainComponentsRegistry { + static { + SoLoader.loadLibrary("fabricjni"); + } + + @DoNotStrip private final HybridData mHybridData; + + @DoNotStrip + private native HybridData initHybrid(ComponentFactory componentFactory); + + @DoNotStrip + private MainComponentsRegistry(ComponentFactory componentFactory) { + mHybridData = initHybrid(componentFactory); + } + + @DoNotStrip + public static MainComponentsRegistry register(ComponentFactory componentFactory) { + return new MainComponentsRegistry(componentFactory); + } +} diff --git a/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java new file mode 100644 index 0000000..8f43d8a --- /dev/null +++ b/android/app/src/main/java/com/wednesdaysolutions/rntws/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java @@ -0,0 +1,48 @@ +package com.wednesdaysolutions.rntws.newarchitecture.modules; + +import com.facebook.jni.HybridData; +import com.facebook.react.ReactPackage; +import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.soloader.SoLoader; +import java.util.List; + +/** + * Class responsible to load the TurboModules. This class has native methods and needs a + * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ + * folder for you). + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +public class MainApplicationTurboModuleManagerDelegate + extends ReactPackageTurboModuleManagerDelegate { + + private static volatile boolean sIsSoLibraryLoaded; + + protected MainApplicationTurboModuleManagerDelegate( + ReactApplicationContext reactApplicationContext, List packages) { + super(reactApplicationContext, packages); + } + + protected native HybridData initHybrid(); + + native boolean canCreateTurboModule(String moduleName); + + public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder { + protected MainApplicationTurboModuleManagerDelegate build( + ReactApplicationContext context, List packages) { + return new MainApplicationTurboModuleManagerDelegate(context, packages); + } + } + + @Override + protected synchronized void maybeLoadOtherSoLibraries() { + if (!sIsSoLibraryLoaded) { + // If you change the name of your application .so file in the Android.mk file, + // make sure you update the name here as well. + SoLoader.loadLibrary("reactnativetemplatews_appmodules"); + sIsSoLibraryLoaded = true; + } + } +} diff --git a/android/app/src/main/jni/CMakeLists.txt b/android/app/src/main/jni/CMakeLists.txt new file mode 100644 index 0000000..4bcea14 --- /dev/null +++ b/android/app/src/main/jni/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.13) + +# Define the library name here. +project(reactnativetemplatews_appmodules) + +# This file includes all the necessary to let you build your application with the New Architecture. +include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake) diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/android/app/src/main/jni/MainApplicationModuleProvider.cpp new file mode 100644 index 0000000..26162dd --- /dev/null +++ b/android/app/src/main/jni/MainApplicationModuleProvider.cpp @@ -0,0 +1,32 @@ +#include "MainApplicationModuleProvider.h" + +#include +#include + +namespace facebook { +namespace react { + +std::shared_ptr MainApplicationModuleProvider( + const std::string &moduleName, + const JavaTurboModule::InitParams ¶ms) { + // Here you can provide your own module provider for TurboModules coming from + // either your application or from external libraries. The approach to follow + // is similar to the following (for a library called `samplelibrary`: + // + // auto module = samplelibrary_ModuleProvider(moduleName, params); + // if (module != nullptr) { + // return module; + // } + // return rncore_ModuleProvider(moduleName, params); + + // Module providers autolinked by RN CLI + auto rncli_module = rncli_ModuleProvider(moduleName, params); + if (rncli_module != nullptr) { + return rncli_module; + } + + return rncore_ModuleProvider(moduleName, params); +} + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.h b/android/app/src/main/jni/MainApplicationModuleProvider.h new file mode 100644 index 0000000..b38ccf5 --- /dev/null +++ b/android/app/src/main/jni/MainApplicationModuleProvider.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include + +#include + +namespace facebook { +namespace react { + +std::shared_ptr MainApplicationModuleProvider( + const std::string &moduleName, + const JavaTurboModule::InitParams ¶ms); + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp new file mode 100644 index 0000000..5fd688c --- /dev/null +++ b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp @@ -0,0 +1,45 @@ +#include "MainApplicationTurboModuleManagerDelegate.h" +#include "MainApplicationModuleProvider.h" + +namespace facebook { +namespace react { + +jni::local_ref +MainApplicationTurboModuleManagerDelegate::initHybrid( + jni::alias_ref) { + return makeCxxInstance(); +} + +void MainApplicationTurboModuleManagerDelegate::registerNatives() { + registerHybrid({ + makeNativeMethod( + "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid), + makeNativeMethod( + "canCreateTurboModule", + MainApplicationTurboModuleManagerDelegate::canCreateTurboModule), + }); +} + +std::shared_ptr +MainApplicationTurboModuleManagerDelegate::getTurboModule( + const std::string &name, + const std::shared_ptr &jsInvoker) { + // Not implemented yet: provide pure-C++ NativeModules here. + return nullptr; +} + +std::shared_ptr +MainApplicationTurboModuleManagerDelegate::getTurboModule( + const std::string &name, + const JavaTurboModule::InitParams ¶ms) { + return MainApplicationModuleProvider(name, params); +} + +bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule( + const std::string &name) { + return getTurboModule(name, nullptr) != nullptr || + getTurboModule(name, {.moduleName = name}) != nullptr; +} + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h new file mode 100644 index 0000000..0335a6f --- /dev/null +++ b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h @@ -0,0 +1,38 @@ +#include +#include + +#include +#include + +namespace facebook { +namespace react { + +class MainApplicationTurboModuleManagerDelegate + : public jni::HybridClass< + MainApplicationTurboModuleManagerDelegate, + TurboModuleManagerDelegate> { + public: + // Adapt it to the package you used for your Java class. + static constexpr auto kJavaDescriptor = + "Lcom/wednesdaysolutions/rntws/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; + + static jni::local_ref initHybrid(jni::alias_ref); + + static void registerNatives(); + + std::shared_ptr getTurboModule( + const std::string &name, + const std::shared_ptr &jsInvoker) override; + std::shared_ptr getTurboModule( + const std::string &name, + const JavaTurboModule::InitParams ¶ms) override; + + /** + * Test-only method. Allows user to verify whether a TurboModule can be + * created by instances of this class. + */ + bool canCreateTurboModule(const std::string &name); +}; + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainComponentsRegistry.cpp b/android/app/src/main/jni/MainComponentsRegistry.cpp new file mode 100644 index 0000000..54f598a --- /dev/null +++ b/android/app/src/main/jni/MainComponentsRegistry.cpp @@ -0,0 +1,65 @@ +#include "MainComponentsRegistry.h" + +#include +#include +#include +#include +#include + +namespace facebook { +namespace react { + +MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {} + +std::shared_ptr +MainComponentsRegistry::sharedProviderRegistry() { + auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); + + // Autolinked providers registered by RN CLI + rncli_registerProviders(providerRegistry); + + // Custom Fabric Components go here. You can register custom + // components coming from your App or from 3rd party libraries here. + // + // providerRegistry->add(concreteComponentDescriptorProvider< + // AocViewerComponentDescriptor>()); + return providerRegistry; +} + +jni::local_ref +MainComponentsRegistry::initHybrid( + jni::alias_ref, + ComponentFactory *delegate) { + auto instance = makeCxxInstance(delegate); + + auto buildRegistryFunction = + [](EventDispatcher::Weak const &eventDispatcher, + ContextContainer::Shared const &contextContainer) + -> ComponentDescriptorRegistry::Shared { + auto registry = MainComponentsRegistry::sharedProviderRegistry() + ->createComponentDescriptorRegistry( + {eventDispatcher, contextContainer}); + + auto mutableRegistry = + std::const_pointer_cast(registry); + + mutableRegistry->setFallbackComponentDescriptor( + std::make_shared( + ComponentDescriptorParameters{ + eventDispatcher, contextContainer, nullptr})); + + return registry; + }; + + delegate->buildRegistryFunction = buildRegistryFunction; + return instance; +} + +void MainComponentsRegistry::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid), + }); +} + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainComponentsRegistry.h b/android/app/src/main/jni/MainComponentsRegistry.h new file mode 100644 index 0000000..0dc30d4 --- /dev/null +++ b/android/app/src/main/jni/MainComponentsRegistry.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include +#include + +namespace facebook { +namespace react { + +class MainComponentsRegistry + : public facebook::jni::HybridClass { + public: + // Adapt it to the package you used for your Java class. + constexpr static auto kJavaDescriptor = + "Lcom/wednesdaysolutions/rntws/newarchitecture/components/MainComponentsRegistry;"; + + static void registerNatives(); + + MainComponentsRegistry(ComponentFactory *delegate); + + private: + static std::shared_ptr + sharedProviderRegistry(); + + static jni::local_ref initHybrid( + jni::alias_ref, + ComponentFactory *delegate); +}; + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/OnLoad.cpp b/android/app/src/main/jni/OnLoad.cpp new file mode 100644 index 0000000..c569b6e --- /dev/null +++ b/android/app/src/main/jni/OnLoad.cpp @@ -0,0 +1,11 @@ +#include +#include "MainApplicationTurboModuleManagerDelegate.h" +#include "MainComponentsRegistry.h" + +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { + return facebook::jni::initialize(vm, [] { + facebook::react::MainApplicationTurboModuleManagerDelegate:: + registerNatives(); + facebook::react::MainComponentsRegistry::registerNatives(); + }); +} diff --git a/android/app/src/main/res/drawable-hdpi/splashscreen_image.png b/android/app/src/main/res/drawable-hdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..0b35410be23e64e0f5933a514bc85a57edd01eb2 GIT binary patch literal 32726 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 OjF+wy#eK7J@BaY<3)0L0 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-mdpi/splashscreen_image.png b/android/app/src/main/res/drawable-mdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..0b35410be23e64e0f5933a514bc85a57edd01eb2 GIT binary patch literal 32726 zcmeIbdsvO>`#$`XY_iKLCi_@62_u9;!dQkfX_Q1%WYnmkQYmR?zp@=wZ@0^L@X^d%XYt-ecxChMCs$-1oITuk*U@r)LFy zzjE1tzQg-+95=vtxyYR3RQ{rW`}D$3_8;kI!f^rN#-hcmy_G)PTM##HtIwEM+SAJA zH~00b-f-c!$S}*N163B?EO7{(IevI~@0`(ZRPTf@8WXnjPS2!luinbSaFxFb)DPc# zBQh-wiQ8Uewq}dN+qSt?Dp>yCfBv<=zZUq{0{>dzUkm)-Y=O+gf?FTQ8lAqiO>NuD z(e_2RK3>}Pa>@0-ZY{XEZMWF+<*h^bB*E$B-%tO4a@ndcDh-N-Zc5w@CuPoiM_yIK z+b5y=AOG=9&rz#x@z;pl7*RFR=o^V=O^d%?zPrW=C&`NPrqE`U21EV&DMi-j(q;Pf zs_%Afue6Fun&wyTQmK*K@G2*MwX@CV^zt0-^Hq0)?5-6jH~M7+nN7z68Rl#)eqsLu z*0s-?+9nzm80MS$nn^tW$TfGisnky0)o|5jROPr0)6U&i;#%KJcTYm+aDn+T zs+?4FZe;!!nKhnUpIf`dAxQUECSgd`T~+V5yoS3XLYogCf4I5zm#r7J*PkQ}9qH;c zh&F(e{&I%n{GY;1*j#Jp5v>AG8;uixx3sCBn3A=4 zd3k_X>#3)WUjHS&W~y9zOzzbBasT5=vQjSY{p;h-+uqOFwVba`$U0%=SH7!4)@_en zJ3E#ObiAU%8TP1Z_y-P5cO3c9+2JhLJOFMNzfj2tc{zDaQZc2+HZD`cN|}qe(eRHi zR9!emZv`i>+~ROIBco$bEIGD)$KBKcocCT6TTN5ML84KkQarcne`vP z{m&dustN;`{mxaI^`os*=!mt0AYbW8_OvSa$g6!!z)B8WE_dW{mB>c7g zwwj<`{>3+T1vXr!)$>~)D{ei4N6gkboRu06JvbJ@oE+y|S%84KLn3qXA*DSz-=4s} zI+<)Cd6M()g{YNZ>7P9anGUbkSGTvfFM*f1!1#+QT*dF6B<*Wvx#j`5 zK^G~XO-n7q{?If=h4cM3WZk=6$6wbEEu2-F{?EJ6g-dfHFIaM!nmaW)dC#P6yI;Tv z^*@e$SUbJH5@+{pdjA=OTHAS$v-=*qenUFu{1R7tVbf51OJ(UW*hX+$`se3&p)T!% z1p!WLaAPJc=U5EOk=BO8AJ)(7zl1Y%L`r!Jwj)w>VFTZ9o0^)mDtE)2!pjJpu>?T7 z8s3?X;N&5%V9<%|^Hn9DPXKR-gfk&;eU0ptIiu4lfFtRx3joI=gX1Neh9a1fbEn>h zB95+5BxrlA_pE&P(;j8f zDqY(0*slFQT7KmVQ+GGjO#|j7_v4xm0NN)YPBZ%z0&v%mWXhcXB?w|Cg-|mSRk+ke zuMKQp7qqpt(b7`fIW9cEY6Ws2P;;{0W9VR*%!kWK#Pu=*z!h-D_Y}5WSm816Omk28 zk`moN!>)4K4-TqQO(5!@$hftXquxz*rO+ZD5xnpg)O}%?|782^ zl>6@yaoH(evO4GjRBl!xSJ`_Sj@~@ak&J3uUBTZ5_ zhODzc6H+h1Zr-TCq@E>J>%6bmAcYeCk~OWk4o|02PN$UCeHGi%(xN6SOG`n3^hT^{ zy&^1SrWUKqkHU&1?rb2Da1LPr@(PfMo#b9K6Mt~PrWIRZLy=Oo`M@4ChmzNS(ZlTPjS9PY>;cy_OwYvG$XpqexKeyVRAyU1XwA5e}v;TXQGPl7QR5LaPeyZY~DnGgeI9TNI`IqnTq(k52!?G4_CkOh_@sk6L5)!;5IaA z^Unb2G@ERXbr`~>T2J7-&nSx2TErxMbPU=-@Un0Lxw?DkOgEa z2(rMfmhm#9LkytBLHQp*k?WXnm~}8fdq1-PsP=!j6W89UYwX{uCunPKBj2 zAgDHr=S ze_z4yfH83B9OS3`B)`pC01;}ucfkctx|A9SBzwkF#pR$ags*4#&a4wb9?nycOCI=b zuczSF$AGSWBTqbhLDiZN9ECD-%Gr=DKzu_Y&7fTJ83c(ZkW(t0Zm|s~w2oHM%Z}YIEVwQ1=;1H{4 zo_LfyGv6JV$}(pJuS0JT(ZX5xZ)0=T6lNZ=P!80rxz)E>_5ZQJvd90+0$Lt6C4eMI zLj`a52rkuN0vBi%)rl~`YKNf**Ph}0lX9mv7(RpvvA+U|Q9_0v9D8-^VV5tydJC(& zwSO#c|M-=>hXNss5TEduZx~=o4~!U13kj$%RN#-3LU>iNVO7045YRKw#)gjL?%nW;@ZGcix7* z;;o41fZi{G%YzYXM4V0>+|;`3N|e-S&85%}i*GZS+gM)J{sveSQw+~)@>*?;6dn*~stNm6H#)I}&dd#!#c zPX4enW&L$XiV7rOihyg*r6peFINg3(iu95@p}8;GhFa1Gwd8MvUJf8|B8pihEKbpx zFpNnV=m;Y8Le^B$En?A3QiS|XdNY!j>J2Xfzo7#5Aa?vGi&Io_Fmh(7hv@56xO`hx zE+PrmuAhXh?D?${_*@RubnMy*=>TA)z7yA{A&J*fa1#$vwY|S-aCRx4dcZCIaKdvCs@q4C-3>r$U8}GMZPu3hpnYckqBsOu@N=awrS|Uia;!C zlBXdWIO$d$rOd=nx*h+~4LD3bLQ|!irKkaPgZHfdOHkdMfv#IGP(kxv)ddHM9-5pX zrO5RDV07Mpg9YJE02y!Vz<{5rttNvgd~1(#sUOgni;$?JNA_YRifRkuS5B#mW)|AR zIS5KFv&0k2uRx=vZn!(Ccnj9BpUwKSKy4kp6^1jI+JN$ph$x9C=1j47`*9IbFjFGx zFzfnb57-Tz zuW=Fs& z#!(6_wRLGm@)M?J>E~JZzKtIONdH9j5G1gx6&VD~o!o~#A}#ofw>kk8PN+nDPh=!&c^q*uB;n+kh6_I5!lPG z1~yK3G9J~V4;KM_q<;bgZ}7>CU3$($BBB65xD>#LVI=Ax3EHEI08AING*Ug7D?aj4z%-Kcc9lNq}qvGwJYMw z9?wrQ_0F;Sk9>obeQk)NJ627@^>6qQCS$0|(gVNe&g4sdy?6hJgEUUgOvD(&upb6W zd*kc6U+g^_^U*0t#xC#qE`UjS2fC3<@Spdr+*m%oWWZv^++shccm~AG6wb_TJKvJHM)LV; z(nKyZve4Q>G%^X(Jo!2s6^zejRc#QseP~Hn<>V{y*V3FBRU6QAXe9UH0?i!q?waV7 zl(pC(yknaDb)z;^g{^3w;3P>d-F}GUqP+w-gZNJ8?O(eyLf5Ht(sMHtpYP5%XC9ZO zD-awSo$mY3e?oEDPP**(k2~kT^3zKkkLiuW+5Iwmhd)Yhzx=q9_IV@ZIHMrz*z~O+ z`~J_v+*QjZNml_6S&^^nu!3#{U9iVGR#^F>$xnlmnle#WIS;|Y_m*;;ud93B5WzB8 z+cYjS^nF_SxXSbHKp^?O3HW2rlet!%GP(-g^P&#T`1V=k&+fLHj|RKj`byqi}ad?Y-Pn5m%CK)oA6;J=ebd=*hm*{khXT@*}x(ONNfC87myv_N1uvlc}sN zuD9Nb&+(_q&WB8B3lFIYE&l6jMyUI=1xIH*8#-=j&e)o#`%+xyR$-53efPWxHIrL! z7GKzY`{haZbT~GBMc%HZIiD!%J6g*-S^_#?=B+U8%8!rF>1GsJ7g=kh=ZCp3%}HwV zKNqahdS!0a@Xc4m295gAP(Q6H1=}t&*3HR1H9GgZ@|(qT7BC56s8gLv&V(1VKb6U% zf}Lf4AqXZ;YdIq7dHa8GUX?F4*pcU@w<1exa@2-W3LVxxj6C za_3rJ#*wgOU8eXsO(SOZC_cC&b}ASNjWDa9EbrlrJls}756 z(`BK70hfwnFlYMN!_y1;IGkV;`eg38E3xv&6wb`O?YkY$jvs}1vxR4X;4xwYNTXu-+t9E>ie36%Av|Dn44Txar0i>sB!)}?E zv2pWrC&^*)5;ZOUrX}6wbLjX~6}=TL>COxj#XqOGNM=_wY?bH;S35&Yj!V6aIIw+6Y2aDjWZJx1 zv5hCZGck3J;@$^C$;@@>Z^O`6hVKuVV0=hE3+s2;2P&Kf`1E6uu3>acAq4D$_&)^H zBn_M-^s$X(cKE$8cjM%~W^e1(>%2{tffRbrHij(c`N-BP4|At1i(?jrfuCACJ4v=B ztts7pJDcE0UZ3gvI4$$K9k}CPpQQg$Cy8|RD*tGEK~<;3t8J}!9(2q z4wd9a?$o<2YY4^T#{(;^?NBjHn>$!QH2Ib9SGz`m_R8-iKwqwwJN08r9B+}&0%I=Ff_7WosX-JZxRZ=XDO{p1A7$00i?#KvNf>Qz9vzUQ+=jlGaqbMmz`afXTF}`f9InF4Bi>KRuaS!U`;e zCwSC!A}^f~zs5~jhn`v&60CFF$`2@{E2j#Nqo#ZBN?L>1NNd{dY?_&Pe%)V9e(p`+ zBcpI-YHC?a8ovt_Z*5D3InK?l+JH!Xn$2QC$>n0wRd%5ysc-y~+*2toNS$w4biJm^ zKt3h4zG2nb+0@&n+m`F~5^u^-;J^V;_T;}=J0BKr&b!=V~vRji5HUn+K)Lt(`xEL^T?J(J2T;39%zLM|l+p z9`c6N?QX~@25+B?@3erh)gZ84)u|>sIT(AZA{&X60J!8%3eGZltFuHk9u(pVtd~2r zX5W!7I)S19I4UOO5(9c)w;rC3ok?c@isj(`bFe7r+Gmwl#Ht#RKT;JZ$!CPKt4}vq zExRFWc~=J)%-?@*ql2*;yzC)x>%+PFz`H9Y#W65LZ%qamVYU)WmTEA$?-()#6*pLK zWjw{>60NWl7i4K!7t#paj?Oq`bi+E9k;5?SZnrP`Vo6sghqJHzVw2vF`=XuKSAu1E zyHul5ZA2q^C;M(xWLGUXWb|2gTY+135BDZhg^#^D)4DJwX|nJ*U_dEye@GMy;c)k9 z6*qZ2Dq4o32Htv(+{~zl-y(tA$F%aQu&jR|?UiwqKz?~T(nL3kL(eADXQ0hlHE+V; zop)if&*$SvN4RgR-#`C(dmB&O=yq7(VKB9hs*cvk4q0tUd`3Uc)dX-;=+3J5J0uDeAISXMeKg8-~;~>GI_IK~=K3}Dxd8NblStNPf z;c5WNPUG~d4L(CVi52K6EDV?r(5XrlR$80f{ksfBtzvcVRO5N?!cd)!1`!{itzix; zFbCPi;2p5z1YAT~ZZ2=ymZ#I|j(E~wG@>@NtOYcv{g*3V_H0*||0YeNU->(GCILhYM@ z!(h}}pI?*Shaz>VFEJMKYtq$22$|9*8v{*NgZ#>Sa+&Li2n`_8h3SS2}r*7ga46M$s7Q0`mptRn)D|+ZD3zS#Ok*Q*ocotevTu zyaJ9C1|&ss`BAd1Q|xbfvG3pl;uDRktdpAz8w1Ij{fWEIt!f!M4koILyN($Y3PB>>Kjicvkq#)yr%omUXDdjejy=oLs{Lq0qJY3XWC6xD8;$W-XH!yU zleY_dNs@@}?HSKyUc1|JRqbN&WUq42Tv;bAZVc+a?5W`Wc2|=+S@HY2M-;%Hr3&;0 zXOp)Bc2b-qPH27u9Z`!wgfjfw(s0iOTN}~Hxm6QVQy8BB@6ra)z(~y6uscY7R^iQJ zR!HI6;+TB20V%{L2dx}SSvd%5OHuSA;O|Cw)7y%bkiS`HqWavLm6KaCYID8yB(uK| zjWir~eICdV*m+12|gTLVdycb?RkLh!)Oc`e>&Wl zm4d`Ur-;Zf^8m{+TTP{PVrneQkrE0}1=m5e8Dtb+VEeN6oM>Szr07UY(tBhc zBd@@7nw)5(B+IJs!@6_|b#w@d^6UL|cS`ZBcOomrC{{8W&u|eR$yHYAhOfKpc0>D^b`K16d zZ8uO79+Gb-9kNRGc^wp#L~QV2sIjj7(UUMy876Lg;%MrVI(+HL40wjNfij?1jAzgC+&!RwN5rhJGLd3R-A~x)9c&UY3iF;8N06 zD3C7GFR`d>;ZEnmyxZo1u?ba4CPu6HQDTS#a^Q(Aoo3kXXNW-LL$%*uY8R zgJ*{+DY8OmFwA-O2g0o`-LLKQColM=mSSrU52||5592zYRV+GD7p3`V&5nrCUs@@q ztD!rZwjDj`vBTjk4FbbnVglN#%zMIt?|OA(FoeQ~{%6Ws76`#!o*ki$tz+docjQf> zc$W9ufGVyFn&qtl{0c9Hd4q_YEK zKcDu#3!B37GE)QdA|k{^x<5D=o1vtjQ>fSmT7!|+X*3s{?iRiZQAuEef_VgLZw66+l|^X<_A$5>=O97<>GL&fbbuT<_nCF9<6^u+AV0 zz~WS07zjbHNCNbLEcy{u9~3^_tGq?ZOjv1xs}JyrDZdKeLNisS8R$Ja&QOqCjH&Fq zG#fFKQb6Zzj3)6?3T0JdLSzxTFYp|EOI>H9QK9Ntw~d7FhJM12{6!n?K7HnOnnLt`?L3cUuF8tW%93F3kbL4R zzY&{>GBSTfqp8c=RdWEacnl*JZHO&!L(Q;VF0te|X)861+PpRvaPw%ipG#RH1K9#K zW^~#NT_%P^hG0*aH6zlWQNXIAutYPF8o%jus6hyyZbKCQG(*03x<&(T^44HcZkxk0 zb)xh-i_JzM6S~3_lC6ZBQRi{;@K(Pwv9cIK7#8tHvlX$!fPMxuhzAr|f9lIJqN1i# za}B1Ii22BZWpWK3gy0Quj_U9Ba+m~TS&(!I> z6FhhF0$uBp+#tz179MY&g+Fxd`5ewX!Vk_waJ-5VM$?PtjeP7{pvr5wb(JI;&gGPee1Lwb z_)h0dpUd-+=D}T+hl|FT775z9|Idp3bE(9sM>yr(^-xACrnpc;fm1w2PGz$mEC)5C z+|ovVV?&jceYpTa;)J1d>Ol1~yvU0c*wyjj{J|WC{9r zA_YoX8)&mj8tzo?_DAES4&aeV=Y2%mBM8}*dCNzlm!}40B_7e_3kADeqG&ewUxo#I!ab+-lO;7MnF6=C#Y)RKh5E^QsFU_3al}NA* zNI#_fpSS|a3vnsW0J}j4n!$jLXff3g>k873Rnh0uES7N6i^V(OR~wE{=2BC>DB1%( zsTmHwDg9NXxfugapJo3uTVYF@eSYD2N+{uG z7`Ul$ID$g?WuDgpgf#~fA8DtsjKrxfI&6wfE+Dg1ze0zBO!#U5PG-g*NLUL@At<`3 z)XfJ<;=~`RQelC5toSi`k&{P5WteISOFj8^N@Mzm|GB(3f{^~VJqpPd{f@FmHjV7Y zwe~}-uB@dw=j~#kiP2TY{I&IAGgoUCKJvQ%UX7DR@#B6AhOJ$yu~u%s9hx!QMbvmu zknvL4p%J3J_OMi^&^C~;0+~4L9So=PVd|5M` zudzC;9ECHVjg_LzT{(>is<_6l-_4wZQPRQj)a96Kp%$zJA_3uz4q#GRdOO}Oqn)0A zU|_&-Z+|qF2}eD{b2VBxivWY*@qK@E5RobmaO|!GmV!kf)jFlq2dd9m^JQ?<||y+qKf*gn5kqQQB-CoC=j-W3YZ!+GYn_jYf7oz zn#?~PfVn_8KL|ApXD7Wq03Bfn?Rl3-f1YObqro@{d|5$8c)Bm=iv(JA0O{@XBNMT`2tOEz@ z=qUQ~J*6%x6}hEmh=Pvtt+p{qqrt~KPr=f}=&Qi&l?Z_0%$_`NRW;+u#1HI=u7~Gz z?fk*}ZW1m>cTQUP6GG*c@F~BQf?Bh#kJ>+SoEZ<&(Tu1y3XwjSiYH62v$n2L*cmx& zPJxFgSZkmV>}SP%Lfv&HrVxeJg;Rc|_Ozk~FaYlBF|!MyauIRYQd^8$pe%^&AQf-zSS%p0Kbj}C@ zL22W}2G-6#L-@>^$Z$BEm0*Uht@!PotWY;1s*T_9$B0AZWr|@8+81U6mxmx_le$Vs zJD!tLkBFnWX=7(+rjmLZ?du&H2v9#+_LQG);o-QvZcIsqPi76)zdCh}YE)7a*kd0x z`9vYnYSI{3kFdK-KRREfu8GGjeb&!c-&c%nhR6?g4m@<(3>sy^g*BPazz!7z$UvfN zm)?r=W1udPWqS63#pDIny7z6)_;4>RX3HOE=DgQ0KKfJaV$JVO=k@(@+21dI^HkC> zav5}SrNP1PY!({~_+@0s$D1~eO9rjnbKdLHrpH^)x9EL!bKLr}!+*Lt?A#t6bLzcz z;*O5%kxjd7P4ae`7mX1LG_NGhdAFQN{^{m$jvJqZ)((84781`MY3H}ByByOiETQ->P9O+R>me44jS3C( z(;x#zOUZA;v^R_q1jP*Bk*6V!*pt#!{MWBZ+wV-TD@)Kg*~e#wBniKp`*4^=5rmz$ zyZ0c0z;B`;=*8XLz0>;O?=$AELAm{7hMSx85Sjg6x;t-IOwx9ty4xnj?n9aUIm4VK z0|p5S{+u5u7FVnO>a_OkguS+StQ9}rFi9_achulP3(kZ!T!~pM5=NXCiwu7;?_0+9 zfBc)sa)5z*Qn9IJc8y1JZ|EQ)9U?LnI(#d-9COgT@3f-ixJyZMOmxP4-k=k8Ddt|T zeB`UN*Z7U3Z^;V37XO7`5PY2*w0xEx1lh$4B3_=8S31A?K7OxYy>kyu{DvYf*Xb!* zXl1gMng4R97`!>iU#>7?fySz$8&g-Pqzxs@ndsbEEmU`wtasjaXLs)c?a5Kn1$x<0 zPLgBRwY_{+F%8BDg+4;E-hz|6B6d4(3$%UC}YYs{tKy(=aP6PO1PF`reV2B+SRbI$DP zEIGC-Vt%!yc)1EmI+siybjEy|PWsB*7>!jj?DP9{41VKr~66W2>QHw0IljD>$<48gh6&|E`xTho%c@(dn zEzMGdSC|-)Gq+0BYLTc?5gQj@zNuRfHS30+-iCQzGD*@Vhl?c%Q&+5};J&QAlM+Ny zSmWX1K$)kvgxqu>q+)@W?2dYE^1>yKjpVL=kJStHXjactm1?BhBY8hbNk1eiiAcmgDhlNwP&#T#TbY#%9oN5 zj^8_%lFcTI#>Y5KijrP9KWz2vH(}advWu~nCX1c7J-5~u1R3dj=@=vo^cms+iCvqHPqBAEM$fIf7Ob2+t**?%v5#hx&o+XQoyC6@aT zP_eiyTr8p}+sC3TDCXdnb;9Z*g&O08ZU{;nldXtvn^bcQ9#6*{^t9;_x13kv)6~c6 zmb1y_AtT9$-!VK>@|i8fkFNyxiu*ZavE`DyU6Z2%r&;Orlq4aPa{HI$lp+(L(9>At z3SxHJ_c}dwqU!M`k@CG_ab7Vqi%2Bg3G>B2$d%jb^ep*3msx0B)T~9C_e*!1Y~6^U zA9PYY<+OW*lO&XsaqCj%G*jjzuZ(4p^=;lD<4K*1F=L}urh%kfm#j+-L-{+ z$X^w46+gMk@R}1PyWTv~Y#1NRF^YWMKgEH}DoHxYyz3Ypyf^q+=60JB0{hI;`9=&% zr|Ui4g;!BUmRWU>(}1v>>ncXkNXOFR#dDk>XU^j>saMUnig6YPg5>|vtg zou9j?3ia&Qm^&WbWJ}{%4(9DuWU{`9Wimltbnr9Rrhz^)qXr|qb|w`+$%WmK=|cbg zRKfsgfqCCLZ#zG1T6jz^sys(1LB|qUlk|FeAHFf!3iG%w5sif)C=KF>L7@SWWchoH#ZF78$R z)A?a#Q=+6_1ufrDG8;)m&_RxQeP_3B)R-#6O;(fuP<}J3lc;p_M(~w($oG7u6#&g{ zmEqkK28*% zN9L6n!u5UP5y9reV-N^?^AIPppyfG3Kr*^)vN);u>ng*LbzC^g6=2;-Vj~i64;G6A zdqNISs%r#ZirExVHBBhckD+3bxzch8?IRv>j@HfX?_tXVR!MwEIc7LECL9(5l5Kw$ zi@5C46y)T(LBRfxz@Xy4mX5D{5Hc)x>Yd$oXD7T1)8>{~W*g>X&$tbcE~%KjN%$zf zV7 z*~NBGir0s;TY_G|T1Mwr4`BvN7c5@*D?|2+iNTco(nkoqE$b@J+4=8ML%Od=NQvSz zb5V{O3|&a0`?)vzA?_PjiN+u9gUtfNNqXT<%7x5vmILUuH4n!Lf|^Ar?CZ}?s9X>4 zYJKa49PZ2!0tD>*|Cs5KvZPvfnoZng9I-F$T?n1nnUVN`SkXj9ZTQCl)e*K zczN7fJsXfm0KzR8hINjBf?yrE?ddwkQ!iVo1CJcdEcb;}nDqRB2=#xJcDs0@Bp>mh`PdAoKr4ZJ+! zd%`Xt$0EmghNdLgQY!puLY@p>Z0JVIlI^1g-zZaXT$K?f4*_8!GMS33$E8-k+(*n9*tzr2=QR$qNaU+P%}(FhcX{ym?=9 zlh=5=SVqszh9wVZ2)wxXctSTaRe)cYKshL~)`vT8v1UU&qR@H-)l@GsSqO-UB&niq zlt%%zSv-5z1^hF}1(rLiqf47zSGJy!K}5=TOUaWuh{eO`{KSFNLPLPwfcT_h5Cn>S zGy}*OLhckXwV#z((NMr5=!a`dMrmcd&d5r3Ef+KUn zUET>+*Y-DfTw~TF(=iJ#%a}{Y*JC+Os8F?imA2D{v3Z;k5m)voz;}B5& z@cKc}AEL#=?)F?ZsnedsYc1WH%B)AQ2wXvZ8)NrspY4d2f>b}XRQM4E5)`v>fr$)#&pO7|fW&8fNTDL^AQDJnB}QOT3sjSgrDsfPx^+2%@33ilnW41s-;eW)cy zZ(TiqWpv>Ji18CeiOo>GB_>;Q8&WZ0uvwtDkLo?O1bjWNe$NEqu3Fbl6bcrpl&W~i zxQTi_uy0fl+?TwFF$YO)-{esa2X{rF*4V>bmS{$nA`?K?LFG1@gHyd&`qcCf*5)lD zsSogX!wEy82A>~Ry;Hn=u;BbU<~gOIOyufH)>!gJFjzvh`e`D=XcnV37pZLa+u{IL zwJQR4x){3Ify(}ZDnq5AjFXhTO4EI;zTSBWPgeSjsr(LjGks44m}v1|7_?A!9iXz3 zys=9Un=Y#Q+!~0sD}uPopA4e7?_v%!=5R6eEo}q$aDqlPC&|m-rq(~!&46Oz@l2|T zRKv}OqbYuBO5}bDlf<3zsC&7K;^6T;>JmYdV@gQY`fP@<{ty_-vMMJ zF;!>C(O|WDCk0E zy?%9NyhuE?YaFkz7tuz>%aIOLe&GFHWA^$7W3(hFV4NsfnLIbQYO9UaAU`cZP;GJ+ zX*7dOk1`Afd}O(b-z+cLXa;9IK%y_i#Ah!vk@ybIlYIk*NX234MfHRdut1OTa zrm8FQbl$6~)6#9DvA+`rbr&qX=0*w6huV5k>33dC`|jXp=ydFfNQ{7baT~3AU^G?w7(L1)o(5VVr75 zJ-t*b6PO_FC<-{6f0gc~JGbYsu@fo*##89!`L-0deM{`g@gpI51csoPfT8+`8dXto zj1G79{E-rxC{Wd5Gu!QA1>;+U3$dgTCd+Kpx;PSpF|4OqL3L`xIG_(NZ3L4Rz(PNE zC%79hQz7XB^rAGuA|VSfW$~DS6(e#xC#b^9`4+@-fz36T_(0pEOrN!k{b1NAyc~(y z3!^%)Md=Op>G>~nL2-3&Ods2N{Fm7W(9AWjtlr!AP${Cg@lChMrwHBk{Ob7%s)=&b z_y$}S`y8RVD_BgVPGKg|LJ)&a-Sgjj8>XWoF&kBXz`Gk;7*nkp_hm9Fye#WPY(xx< z(Lv*FQJbuV48~MDUNL^IUI!$AlkCY!qVi1+Y=8$*WZ(vt1BgrrKgW^A)mk*1 z!~8)k-icQJHJhe|?6ECY%&Ez5)j}9BZIT}2$DE+l5VOQh{Ct`%PiFwa&x;*;Sq{*N zQi7w-@PxH-2Me2NkH|ZMy1KeDHi}H6h$uK_43?7HAL2E>CZc~i67?)|8rZtXV;msT z#ioSwabv7jO-&6Xt6(Y3W5q^~lH(MyT>U627%dd_F<3_HEfeF%PBD^opwBo)1<+T} zJ_T$aGkb+KE{B4W>SHXVh@$F3X06CvV)jgqo?UGQ{O6ZUrm%-8!UyoC!0-kIocZM% z&6ED29|)6&lCbyh5Q@#4Lek8w`h&*1(~eSFT)|X-QPo>mV?dXKBJUH|_(qh%`!TX1>DK0Bah~NT8ip^;zCR>RW{wd%G)pVRv01A10 zN`<20^YNoiF=;cN`Zh(FMVt3UXqze;2cS&&*DOnp?4T>J&?t3k5J>>y45TQy%P0ju zu3QIjBg{^o#2kgUD#>o(Smf!Sj9y|q!CXEClX;$)0s=*5#DRrAbHFhuZr}@%NH>@G zG7aZQp$6)5raeL=J{(7aI`T7MroRv{exOtTkUi55vD$v0^a7J>;M26dRNpGK+U18jdLuO55Eqw^;Js4in@}xOZ2A))z}$IKRG_%}?iEFh z(Txun=^=;IK=|afAcx5YP~Zbkp2ZQUoWak&FS-G0W)sGyBR1D5Y%1~A$lZqMy^{^P zMFd{E+Zhq(;Nj6o{oNEh3^Z;{T`^ej^z95ia9bLF9zYLWUB!&fX!XS-HzDlw;}2iY zr{tjd?zCqBrryckicXoby80&=YM6=6F?J+I{cJ3cv>!=o!+#xS%GT0%ik>WHU<-L>prTb4xS6Bm{07Vdt(}RNh_{<#%#KD3Zj3vO`IQEF zg$5FuPmo(qY{>bm6W|d-UA7u46m-TS?k35?X{hw@b^R#ZcbVPyk#e~Dy<)C{V*#;k zM2c7HMVdF_)KX9H=_e=2fDejhh20~&`c^6NWy?s$gRC z!&f$uv1s6Jb&t(9O%-7lUCa-R2Nf)3-Is#j>)+3nA6nR2LCQ}iK(eY}J55xW?f1E6 zv{fMns@kh*c4AH`fU=!ztmqquP>#jY3?MPLKNwL8o3sdhX5tV?g$Aw;NgaoW1+%LMVb?i~r5YFH_9r~z z#}AELU!|R+b@+o1vHy23Fo%nKhHB_>hT?KGjjz!F15r!L~^=ri4JfW2;+k~Kcz zogtq(+AB3Pnitvyw0){*%INUp3QjaXaq-`WH-MD93}`C}7)5U`Jx0H9U18Vp$*!ZS zHa^3swY@1rZA`LTM_YME8-FuiX0xKXROYYm|0&k)z{2+W6BYUy{|pcttzq)fnVClt zlMhF}jTZb_&IlUmiqO9+=rMW#GgdS_iU?&aTWTRkKtTNwyVgj0A!>7*EI?~fqaeMx z@<_Ief5V8@&m|dU>Fu9uvjbWm21uC@RRQf)?e{h9MlSLg_bRP}{&uDyjg3(wDbgG9Jw}t4-cpT{Tnh{5lrB);Pk2c*(12E~_}5 z5F1(K?aIQ-(1?7N?k6!+|4WyVib(=yB2<+5rnn$P0YXSD#boAk{%VtZ><(>{jVCeeaHHG zG??sEOiZGL@P1bmNnU^p# zp+iVJs*q1!?5REz#D-)1Okf5(Yr?1jL!IPdo%)5xU_K79%Ee=RCPWQxeUhD>O)yYM zGQB%cidByClLc3*fqV!lhFe8$d|4dOY3UpcksNW-b^~v(l%ZPb>w+9r7hsL`tUJRD zEDu=Bj?<(#S?6bD_dAy{G%sS}iS-y~##DS!Lxyb(tUj57UpJvC zgV1L%?BDpcmzS5zgMlJVlkQ8t0GsR_9en^DG79BS;t*wOfGNCA6yzdZ;I{ZxT95OK zZn`)5dwDhWLa`~Q6l(O!+WujYN6-H{Zo>d6t2a%fUf}(N2@vLUZ~nB+zQlS&^Tw=| z{5fJ}iclPv!xwEq8`ZtbGQrNxy)RE8aDWX@uux4vm)uNNR7$}E71WmYPz-W#_AkG; zKRl)~jSrR~i#?*U29jvwP>8F0?=O83#h(imB+-BiXY$H$6HRRH5OEs7^(em_qf|bV zA9UsY%xm6!7Skv%Q+`O5-vIvKyi6d{7k)tOH1;50`{yidD_q$2lE4+Djze~PtiU5d z+Fe`x0)99emi3)3_rkfQHdrg%2e0{_K(Aq#Pi{MbBa7xZ)%lk9Z-c_a_LW*o2bJC- z7Eo}4ILv1O0<7KJu=3-}+jd}gfxv7b9tap6)TjMHu5vnBnbBWAR}p}O#PzkFt7)I*{m#3;G5_oN*x^qH zP0G1&`}?pr){epYPI%O%g?_@NV83)@#ahvR!OF3Rx7-t4Qv zzv0@YQNeHVtqR|>Pi{=)q*H2I(vLk!#+QO*4GhKi@KobFPvSq^(21IgZ>(9Qvt{m2 zxcfI;IHHH-{T!~`e&aqcT(nd8qmil>En4n**8>V9}38sSmitN;f#Zu)|#7` za;fS%Q4@v5Qp+P5X1Y6*D5!rZFY2FGXc+XrTZnLh#$=&}E`w=h}vIi0?~ zisTt`EotSs$6N6IYJ>5L>d`y$ob&z}DyWS%i)@d8lgwc6xEFJ8TRHFBK&sE75_6&ri~68szB;Z0bH_dB1o zvSRD#bQv~|#l~l1J2!srS-Rw>&W)?`Bk>B`(49t+_>G2db7lyOzj$#3sVRV(JMMnB z?PWxA-0nVs@spySi*kmy>X_)zx8y+5a@S6;k9dabXYkk8UkNt1fT4XCBS?hD?;Qy? zKN}hvx>*E)k2%Jb)NYe__T{{PxxfYL$H`jeL>L+w6(f@Hl@oYfvmoKY>Do^|>nR+{ z_CWek6b_D~wX~c~t_5{0(b*DY3eRxqznVYV5fD(mePvRy4kr!YipvvVFK@hYzNRWN zpgrIF9sU`bv39fG@z-PLWKW+8zjH4n!N0XOzdq5i$~n9eCl`Y``M}vqTmb3nYVcis z?jbd;c0oSO_~K322@=L_q*}tTgPYi{fnIUJzva-|#^=nfnms3SVSrJN%cQ8O2zRWp z3g3QY_u}o2f2Kv?o5~L3Mbc{ZQ|P+6RhwJMSFT=oMXbvzs6bzpWQf?Qk3U|2WOfAJ zS&aaC*5o&W%UlR?T2DZ-(8q6Q-p7~qnblu`$G!185oM*NqwJ$ufN7W^oGYy;pbZga z_&YUIZDH#T_|ZS%f$WZL{O$TH#q;ouL=W5A{P5D;_jtc|WMzGQ!UH|npVpjA>w}KsE5Y{h5HqY{c*|^^s29%s zhyJD}I)CFq6_`1}?zH*gG`v-tR4)17FCPd`2`>bj`%ckX=-&#BGw#PX`jtP(pd5e* z*YI0#sdJGG$i&n|FK4#(@>i>#yR*VO*~=U)r_Yk_|)@UI2_wZQ+)7HB@(-mm<}$6i`HUJfKZ OjF+wy#eK7J@BaY<3)0L0 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png b/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..0b35410be23e64e0f5933a514bc85a57edd01eb2 GIT binary patch literal 32726 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 OjF+wy#eK7J@BaY<3)0L0 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png b/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..0b35410be23e64e0f5933a514bc85a57edd01eb2 GIT binary patch literal 32726 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 OjF+wy#eK7J@BaY<3)0L0 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png b/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..0b35410be23e64e0f5933a514bc85a57edd01eb2 GIT binary patch literal 32726 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 OjF+wy#eK7J@BaY<3)0L0 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 0000000..f35d996 --- /dev/null +++ b/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/splashscreen.xml b/android/app/src/main/res/drawable/splashscreen.xml new file mode 100644 index 0000000..c8568e1 --- /dev/null +++ b/android/app/src/main/res/drawable/splashscreen.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4954d88e011a1d9e9d765429a667ce6a42939cf4 GIT binary patch literal 3240 zcmZ`+3p~?nA1`$nr-XW4m&+oxQ<&2`L#Q=HZn;b;k;{?FC8pANiB`sDPVES1LzLT` za!S-Rxn-hE9mgr<60*^&(1<`D}YW&+qv^&;R*-f0yrfse4>^tyI!h zTC!xxN=FBR2aJWXFG3!E8{etxELpN5(vh&;D|YFdhTcf#uulEt_`hsU_3ylUDZE#H zEL~$+8iJ8^CNwaRepq+5gj}3*-$9cqhms%UBS|Z;^1p?>c`mw_fSq(y?>t#YE$?WU zmf#jv+fY=V_4EXvKAlrkWOTGjyJ~;>&MQfriw}qIL=P*iUcEY|^3I(HJw3?uoo8Kl z7pY~L`iF#t(Ia$i$oIj@*=@XT-8$cznACy-gBmVLq&)Ms_X=y>F2?bJ#_!F_qQT{C1XwkH3Ejt9)-o^wfxZjgOB{Ktu$iz1`(GoAfH$GOZca9C%@L z^aw-GjxnPvLe|ET5eC0=xvf>lp6>JU*-jiK5J&Ba-89Z0G|o*8V$sKsz07u6hm-cj zIviext}R91EkjR}bIG-W=g+lG{dkAs4y1e@u_cAXPRV#O* zSEe5xF$RYjQMQ@N4s${z`FUm5QdCBaDD|*5rG~$(LHzFnyFadixfI>&RZcX|S@rCv}#%k;a~3YAjBR|4&)rL4Xi)-FAa;>XvzHxp>r%>W~<;lzL%EPha009-jA4|b8PR~tk zoEh&w924`4Sk%Gn5KVI000hb6{P@N-N;1gG$~G2mXv|K0LDMk36E!4%;J|^f@Nf(U z)9~k?Yi?FnHc6#hEBxz1PMpY8Sf#7df`M~4r0pR-hf)%Y#baY*`mklw=FJyy@v~-q zarEw0nY+&owPY~&?cX1G?AZ6RRE~>dRpSflU%fI!C1d8d6SCRtt9v#)uCA?ZZ);P! zdFvJ-5K0abklyVEVLDp1JMhR6#j>uWhHb;(`sB9F44W5vRi_q@w5JQ$89 zxKl9m8`DsHK0kJ*_taz`>1F*=X^~SF!r(D>>sC5RIp{r;#5h{j_TT{ml}vqEQe13S z+)toTI4Dh~Try^({+D5q6?w0~g=k3#VGUxrx~IYkjtU`Zdf_%Qv{zq6S0NFXq`u}R0wU-PS|NZBxV2dE{9wDH^Z63 z!#`d3uXDwlt^aO$kjJ*KhWZYHppa9F-mzncX6GtY@=PAZ?!@ag;hZ$;A!j?JRSdPm zcAierfV=^l}xtiIercL=h>|3y;(UTG&imXqMU)N2-|f4slP#`LnJno^#zFC0DIj)o%EfPSEh>#Fg>I-= z!O`rDG+6#?`+CIy4PtY4!XDzu)pWPKs9C&W?_(w5c!$I&XY;`~osfgQJbXH1uvrXtkrRr%7a!VP#f z2`4fW*1cpmS*A=FkK3ermp2QA>-l2}#Gfq2ZNj0V;xedv%De8I8rQuY*)QxW->WH( zeBRUZ>TT~`9(g(q3*3-FQtrqnP}0*^M)confBhOAh3v$_9m>2Kvu{sB1}4mn8iNdp zU6fiL7O(>X1Laf;TxOka>@!S54dQkZef<1{e_cE9TSdice0_Ezic&u}XLUQGcd(Ud z3@s?nCXV0OCY5t#z;zITo%g;cfzw0m&s(wLkzCZh2b= z1i98Rp4Ys&@e*^HTl|(5$#9lGbtpUV#)C(XR)9<^_9&Y;m8Xo(RDvT82L>khCw|BU zeZ`xJ8D#GujMx*73!bEtltG+Q5w$oG%xKidw66^$h97|fiz5&&Q-S4s6l!XaeI+ZJ z`v?RPND`#=Njj)F=zh7eH4j8$XBQWYt*z@CdnzIdxf;I>%JecvdVo!mZPSnuX5V=@ zlTG4nmQCJ+RY!!3ixS*`#ZT{Pi4a&4mWz-myluXy)6LE(4Ry17lfbe@qNl63mzOO* Se+vGAEOE4VC0xfJO8yVQ3>lXI literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4954d88e011a1d9e9d765429a667ce6a42939cf4 GIT binary patch literal 3240 zcmZ`+3p~?nA1`$nr-XW4m&+oxQ<&2`L#Q=HZn;b;k;{?FC8pANiB`sDPVES1LzLT` za!S-Rxn-hE9mgr<60*^&(1<`D}YW&+qv^&;R*-f0yrfse4>^tyI!h zTC!xxN=FBR2aJWXFG3!E8{etxELpN5(vh&;D|YFdhTcf#uulEt_`hsU_3ylUDZE#H zEL~$+8iJ8^CNwaRepq+5gj}3*-$9cqhms%UBS|Z;^1p?>c`mw_fSq(y?>t#YE$?WU zmf#jv+fY=V_4EXvKAlrkWOTGjyJ~;>&MQfriw}qIL=P*iUcEY|^3I(HJw3?uoo8Kl z7pY~L`iF#t(Ia$i$oIj@*=@XT-8$cznACy-gBmVLq&)Ms_X=y>F2?bJ#_!F_qQT{C1XwkH3Ejt9)-o^wfxZjgOB{Ktu$iz1`(GoAfH$GOZca9C%@L z^aw-GjxnPvLe|ET5eC0=xvf>lp6>JU*-jiK5J&Ba-89Z0G|o*8V$sKsz07u6hm-cj zIviext}R91EkjR}bIG-W=g+lG{dkAs4y1e@u_cAXPRV#O* zSEe5xF$RYjQMQ@N4s${z`FUm5QdCBaDD|*5rG~$(LHzFnyFadixfI>&RZcX|S@rCv}#%k;a~3YAjBR|4&)rL4Xi)-FAa;>XvzHxp>r%>W~<;lzL%EPha009-jA4|b8PR~tk zoEh&w924`4Sk%Gn5KVI000hb6{P@N-N;1gG$~G2mXv|K0LDMk36E!4%;J|^f@Nf(U z)9~k?Yi?FnHc6#hEBxz1PMpY8Sf#7df`M~4r0pR-hf)%Y#baY*`mklw=FJyy@v~-q zarEw0nY+&owPY~&?cX1G?AZ6RRE~>dRpSflU%fI!C1d8d6SCRtt9v#)uCA?ZZ);P! zdFvJ-5K0abklyVEVLDp1JMhR6#j>uWhHb;(`sB9F44W5vRi_q@w5JQ$89 zxKl9m8`DsHK0kJ*_taz`>1F*=X^~SF!r(D>>sC5RIp{r;#5h{j_TT{ml}vqEQe13S z+)toTI4Dh~Try^({+D5q6?w0~g=k3#VGUxrx~IYkjtU`Zdf_%Qv{zq6S0NFXq`u}R0wU-PS|NZBxV2dE{9wDH^Z63 z!#`d3uXDwlt^aO$kjJ*KhWZYHppa9F-mzncX6GtY@=PAZ?!@ag;hZ$;A!j?JRSdPm zcAierfV=^l}xtiIercL=h>|3y;(UTG&imXqMU)N2-|f4slP#`LnJno^#zFC0DIj)o%EfPSEh>#Fg>I-= z!O`rDG+6#?`+CIy4PtY4!XDzu)pWPKs9C&W?_(w5c!$I&XY;`~osfgQJbXH1uvrXtkrRr%7a!VP#f z2`4fW*1cpmS*A=FkK3ermp2QA>-l2}#Gfq2ZNj0V;xedv%De8I8rQuY*)QxW->WH( zeBRUZ>TT~`9(g(q3*3-FQtrqnP}0*^M)confBhOAh3v$_9m>2Kvu{sB1}4mn8iNdp zU6fiL7O(>X1Laf;TxOka>@!S54dQkZef<1{e_cE9TSdice0_Ezic&u}XLUQGcd(Ud z3@s?nCXV0OCY5t#z;zITo%g;cfzw0m&s(wLkzCZh2b= z1i98Rp4Ys&@e*^HTl|(5$#9lGbtpUV#)C(XR)9<^_9&Y;m8Xo(RDvT82L>khCw|BU zeZ`xJ8D#GujMx*73!bEtltG+Q5w$oG%xKidw66^$h97|fiz5&&Q-S4s6l!XaeI+ZJ z`v?RPND`#=Njj)F=zh7eH4j8$XBQWYt*z@CdnzIdxf;I>%JecvdVo!mZPSnuX5V=@ zlTG4nmQCJ+RY!!3ixS*`#ZT{Pi4a&4mWz-myluXy)6LE(4Ry17lfbe@qNl63mzOO* Se+vGAEOE4VC0xfJO8yVQ3>lXI literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4934bc0fcda4680739fd95d3d46f5b8b38b0bb10 GIT binary patch literal 2174 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7b6a56547be91c7c573846165f59808630604e GIT binary patch literal 7000 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5d992dd727559e2775a9226b721cd86a1a4c4f88 GIT binary patch literal 10240 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..5d992dd727559e2775a9226b721cd86a1a4c4f88 GIT binary patch literal 10240 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-night/colors.xml b/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000..3c05de5 --- /dev/null +++ b/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..bb2087f --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + #ffffff + #FFFFFF + #023c69 + #ffffff + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..3bdb9c7 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + react-native-template-ws + contain + false + \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..f03e23f --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..8181b28 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,65 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = findProperty('android.buildToolsVersion') ?: '31.0.0' + minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21') + compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '31') + targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '31') + if (findProperty('android.kotlinVersion')) { + kotlinVersion = findProperty('android.kotlinVersion') + } + frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0' + + if (System.properties['os.arch'] == 'aarch64') { + // For M1 Users we need to use the NDK 24 which added support for aarch64 + ndkVersion = '24.0.8215888' + } else { + // Otherwise we default to the side-by-side NDK version from AGP. + ndkVersion = '21.4.7075529' + } + } + repositories { + google() + mavenCentral() + } + dependencies { + classpath('com.android.tools.build:gradle:7.2.1') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('de.undercouch:gradle-download-task:5.0.1') + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +def REACT_NATIVE_VERSION = new File(['node', '--print', "JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"].execute(null, rootDir).text.trim()) + +allprojects { + configurations.all { + resolutionStrategy { + force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION + } + } + + repositories { + mavenLocal() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist')) + } + + google() + mavenCentral { + // We don't want to fetch react-native from Maven Central as there are + // older versions over there. + content { + excludeGroup 'com.facebook.react' + } + } + maven { url 'https://www.jitpack.io' } + } +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..fab3fb6 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,53 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true + +# Version of flipper SDK to use with React Native +FLIPPER_VERSION=0.125.0 + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# The hosted JavaScript engine +# Supported values: expo.jsEngine = "hermes" | "jsc" +expo.jsEngine=jsc + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 zcmb5WV{~QRw(p$^Dz@00IL3?^hro$gg*4VI_WAaTyVM5Foj~O|-84 z$;06hMwt*rV;^8iB z1~&0XWpYJmG?Ts^K9PC62H*`G}xom%S%yq|xvG~FIfP=9*f zZoDRJBm*Y0aId=qJ?7dyb)6)JGWGwe)MHeNSzhi)Ko6J<-m@v=a%NsP537lHe0R* z`If4$aaBA#S=w!2z&m>{lpTy^Lm^mg*3?M&7HFv}7K6x*cukLIGX;bQG|QWdn{%_6 zHnwBKr84#B7Z+AnBXa16a?or^R?+>$4`}{*a_>IhbjvyTtWkHw)|ay)ahWUd-qq$~ zMbh6roVsj;_qnC-R{G+Cy6bApVOinSU-;(DxUEl!i2)1EeQ9`hrfqj(nKI7?Z>Xur zoJz-a`PxkYit1HEbv|jy%~DO^13J-ut986EEG=66S}D3!L}Efp;Bez~7tNq{QsUMm zh9~(HYg1pA*=37C0}n4g&bFbQ+?-h-W}onYeE{q;cIy%eZK9wZjSwGvT+&Cgv z?~{9p(;bY_1+k|wkt_|N!@J~aoY@|U_RGoWX<;p{Nu*D*&_phw`8jYkMNpRTWx1H* z>J-Mi_!`M468#5Aix$$u1M@rJEIOc?k^QBc?T(#=n&*5eS#u*Y)?L8Ha$9wRWdH^3D4|Ps)Y?m0q~SiKiSfEkJ!=^`lJ(%W3o|CZ zSrZL-Xxc{OrmsQD&s~zPfNJOpSZUl%V8tdG%ei}lQkM+z@-4etFPR>GOH9+Y_F<3=~SXln9Kb-o~f>2a6Xz@AS3cn^;c_>lUwlK(n>z?A>NbC z`Ud8^aQy>wy=$)w;JZzA)_*Y$Z5hU=KAG&htLw1Uh00yE!|Nu{EZkch zY9O6x7Y??>!7pUNME*d!=R#s)ghr|R#41l!c?~=3CS8&zr6*aA7n9*)*PWBV2w+&I zpW1-9fr3j{VTcls1>ua}F*bbju_Xq%^v;-W~paSqlf zolj*dt`BBjHI)H9{zrkBo=B%>8}4jeBO~kWqO!~Thi!I1H(in=n^fS%nuL=X2+s!p}HfTU#NBGiwEBF^^tKU zbhhv+0dE-sbK$>J#t-J!B$TMgN@Wh5wTtK2BG}4BGfsZOoRUS#G8Cxv|6EI*n&Xxq zt{&OxCC+BNqz$9b0WM7_PyBJEVObHFh%%`~!@MNZlo*oXDCwDcFwT~Rls!aApL<)^ zbBftGKKBRhB!{?fX@l2_y~%ygNFfF(XJzHh#?`WlSL{1lKT*gJM zs>bd^H9NCxqxn(IOky5k-wALFowQr(gw%|`0991u#9jXQh?4l|l>pd6a&rx|v=fPJ z1mutj{YzpJ_gsClbWFk(G}bSlFi-6@mwoQh-XeD*j@~huW4(8ub%^I|azA)h2t#yG z7e_V_<4jlM3D(I+qX}yEtqj)cpzN*oCdYHa!nm%0t^wHm)EmFP*|FMw!tb@&`G-u~ zK)=Sf6z+BiTAI}}i{*_Ac$ffr*Wrv$F7_0gJkjx;@)XjYSh`RjAgrCck`x!zP>Ifu z&%he4P|S)H*(9oB4uvH67^0}I-_ye_!w)u3v2+EY>eD3#8QR24<;7?*hj8k~rS)~7 zSXs5ww)T(0eHSp$hEIBnW|Iun<_i`}VE0Nc$|-R}wlSIs5pV{g_Dar(Zz<4X3`W?K z6&CAIl4U(Qk-tTcK{|zYF6QG5ArrEB!;5s?tW7 zrE3hcFY&k)+)e{+YOJ0X2uDE_hd2{|m_dC}kgEKqiE9Q^A-+>2UonB+L@v3$9?AYw zVQv?X*pK;X4Ovc6Ev5Gbg{{Eu*7{N3#0@9oMI~}KnObQE#Y{&3mM4`w%wN+xrKYgD zB-ay0Q}m{QI;iY`s1Z^NqIkjrTlf`B)B#MajZ#9u41oRBC1oM1vq0i|F59> z#StM@bHt|#`2)cpl_rWB($DNJ3Lap}QM-+A$3pe}NyP(@+i1>o^fe-oxX#Bt`mcQc zb?pD4W%#ep|3%CHAYnr*^M6Czg>~L4?l16H1OozM{P*en298b+`i4$|w$|4AHbzqB zHpYUsHZET$Z0ztC;U+0*+amF!@PI%^oUIZy{`L{%O^i{Xk}X0&nl)n~tVEpcAJSJ} zverw15zP1P-O8h9nd!&hj$zuwjg?DoxYIw{jWM zW5_pj+wFy8Tsa9g<7Qa21WaV&;ejoYflRKcz?#fSH_)@*QVlN2l4(QNk| z4aPnv&mrS&0|6NHq05XQw$J^RR9T{3SOcMKCXIR1iSf+xJ0E_Wv?jEc*I#ZPzyJN2 zUG0UOXHl+PikM*&g$U@g+KbG-RY>uaIl&DEtw_Q=FYq?etc!;hEC_}UX{eyh%dw2V zTTSlap&5>PY{6I#(6`j-9`D&I#|YPP8a;(sOzgeKDWsLa!i-$frD>zr-oid!Hf&yS z!i^cr&7tN}OOGmX2)`8k?Tn!!4=tz~3hCTq_9CdiV!NIblUDxHh(FJ$zs)B2(t5@u z-`^RA1ShrLCkg0)OhfoM;4Z{&oZmAec$qV@ zGQ(7(!CBk<5;Ar%DLJ0p0!ResC#U<+3i<|vib1?{5gCebG7$F7URKZXuX-2WgF>YJ^i zMhHDBsh9PDU8dlZ$yJKtc6JA#y!y$57%sE>4Nt+wF1lfNIWyA`=hF=9Gj%sRwi@vd z%2eVV3y&dvAgyuJ=eNJR+*080dbO_t@BFJO<@&#yqTK&+xc|FRR;p;KVk@J3$S{p` zGaMj6isho#%m)?pOG^G0mzOAw0z?!AEMsv=0T>WWcE>??WS=fII$t$(^PDPMU(P>o z_*0s^W#|x)%tx8jIgZY~A2yG;US0m2ZOQt6yJqW@XNY_>_R7(Nxb8Ged6BdYW6{prd!|zuX$@Q2o6Ona8zzYC1u!+2!Y$Jc9a;wy+pXt}o6~Bu1oF1c zp7Y|SBTNi@=I(K%A60PMjM#sfH$y*c{xUgeSpi#HB`?|`!Tb&-qJ3;vxS!TIzuTZs-&%#bAkAyw9m4PJgvey zM5?up*b}eDEY+#@tKec)-c(#QF0P?MRlD1+7%Yk*jW;)`f;0a-ZJ6CQA?E%>i2Dt7T9?s|9ZF|KP4;CNWvaVKZ+Qeut;Jith_y{v*Ny6Co6!8MZx;Wgo z=qAi%&S;8J{iyD&>3CLCQdTX*$+Rx1AwA*D_J^0>suTgBMBb=*hefV+Ars#mmr+YsI3#!F@Xc1t4F-gB@6aoyT+5O(qMz*zG<9Qq*f0w^V!03rpr*-WLH}; zfM{xSPJeu6D(%8HU%0GEa%waFHE$G?FH^kMS-&I3)ycx|iv{T6Wx}9$$D&6{%1N_8 z_CLw)_9+O4&u94##vI9b-HHm_95m)fa??q07`DniVjAy`t7;)4NpeyAY(aAk(+T_O z1om+b5K2g_B&b2DCTK<>SE$Ode1DopAi)xaJjU>**AJK3hZrnhEQ9E`2=|HHe<^tv z63e(bn#fMWuz>4erc47}!J>U58%<&N<6AOAewyzNTqi7hJc|X{782&cM zHZYclNbBwU6673=!ClmxMfkC$(CykGR@10F!zN1Se83LR&a~$Ht&>~43OX22mt7tcZUpa;9@q}KDX3O&Ugp6< zLZLfIMO5;pTee1vNyVC$FGxzK2f>0Z-6hM82zKg44nWo|n}$Zk6&;5ry3`(JFEX$q zK&KivAe${e^5ZGc3a9hOt|!UOE&OocpVryE$Y4sPcs4rJ>>Kbi2_subQ9($2VN(3o zb~tEzMsHaBmBtaHAyES+d3A(qURgiskSSwUc9CfJ@99&MKp2sooSYZu+-0t0+L*!I zYagjOlPgx|lep9tiU%ts&McF6b0VE57%E0Ho%2oi?=Ks+5%aj#au^OBwNwhec zta6QAeQI^V!dF1C)>RHAmB`HnxyqWx?td@4sd15zPd*Fc9hpDXP23kbBenBxGeD$k z;%0VBQEJ-C)&dTAw_yW@k0u?IUk*NrkJ)(XEeI z9Y>6Vel>#s_v@=@0<{4A{pl=9cQ&Iah0iD0H`q)7NeCIRz8zx;! z^OO;1+IqoQNak&pV`qKW+K0^Hqp!~gSohcyS)?^P`JNZXw@gc6{A3OLZ?@1Uc^I2v z+X!^R*HCm3{7JPq{8*Tn>5;B|X7n4QQ0Bs79uTU%nbqOJh`nX(BVj!#f;#J+WZxx4 z_yM&1Y`2XzhfqkIMO7tB3raJKQS+H5F%o83bM+hxbQ zeeJm=Dvix$2j|b4?mDacb67v-1^lTp${z=jc1=j~QD>7c*@+1?py>%Kj%Ejp7Y-!? z8iYRUlGVrQPandAaxFfks53@2EC#0)%mrnmGRn&>=$H$S8q|kE_iWko4`^vCS2aWg z#!`RHUGyOt*k?bBYu3*j3u0gB#v(3tsije zgIuNNWNtrOkx@Pzs;A9un+2LX!zw+p3_NX^Sh09HZAf>m8l@O*rXy_82aWT$Q>iyy zqO7Of)D=wcSn!0+467&!Hl))eff=$aneB?R!YykdKW@k^_uR!+Q1tR)+IJb`-6=jj zymzA>Sv4>Z&g&WWu#|~GcP7qP&m*w-S$)7Xr;(duqCTe7p8H3k5>Y-n8438+%^9~K z3r^LIT_K{i7DgEJjIocw_6d0!<;wKT`X;&vv+&msmhAAnIe!OTdybPctzcEzBy88_ zWO{6i4YT%e4^WQZB)KHCvA(0tS zHu_Bg+6Ko%a9~$EjRB90`P(2~6uI@SFibxct{H#o&y40MdiXblu@VFXbhz>Nko;7R z70Ntmm-FePqhb%9gL+7U8@(ch|JfH5Fm)5${8|`Lef>LttM_iww6LW2X61ldBmG0z zax3y)njFe>j*T{i0s8D4=L>X^j0)({R5lMGVS#7(2C9@AxL&C-lZQx~czI7Iv+{%1 z2hEG>RzX4S8x3v#9sgGAnPzptM)g&LB}@%E>fy0vGSa(&q0ch|=ncKjNrK z`jA~jObJhrJ^ri|-)J^HUyeZXz~XkBp$VhcTEcTdc#a2EUOGVX?@mYx#Vy*!qO$Jv zQ4rgOJ~M*o-_Wptam=~krnmG*p^j!JAqoQ%+YsDFW7Cc9M%YPiBOrVcD^RY>m9Pd< zu}#9M?K{+;UIO!D9qOpq9yxUquQRmQNMo0pT`@$pVt=rMvyX)ph(-CCJLvUJy71DI zBk7oc7)-%ngdj~s@76Yse3L^gV0 z2==qfp&Q~L(+%RHP0n}+xH#k(hPRx(!AdBM$JCfJ5*C=K3ts>P?@@SZ_+{U2qFZb>4kZ{Go37{# zSQc+-dq*a-Vy4?taS&{Ht|MLRiS)Sn14JOONyXqPNnpq&2y~)6wEG0oNy>qvod$FF z`9o&?&6uZjhZ4_*5qWVrEfu(>_n2Xi2{@Gz9MZ8!YmjYvIMasE9yVQL10NBrTCczq zcTY1q^PF2l!Eraguf{+PtHV3=2A?Cu&NN&a8V(y;q(^_mFc6)%Yfn&X&~Pq zU1?qCj^LF(EQB1F`8NxNjyV%fde}dEa(Hx=r7$~ts2dzDwyi6ByBAIx$NllB4%K=O z$AHz1<2bTUb>(MCVPpK(E9wlLElo(aSd(Os)^Raum`d(g9Vd_+Bf&V;l=@mM=cC>) z)9b0enb)u_7V!!E_bl>u5nf&Rl|2r=2F3rHMdb7y9E}}F82^$Rf+P8%dKnOeKh1vs zhH^P*4Ydr^$)$h@4KVzxrHyy#cKmWEa9P5DJ|- zG;!Qi35Tp7XNj60=$!S6U#!(${6hyh7d4q=pF{`0t|N^|L^d8pD{O9@tF~W;#Je*P z&ah%W!KOIN;SyAEhAeTafJ4uEL`(RtnovM+cb(O#>xQnk?dzAjG^~4$dFn^<@-Na3 z395;wBnS{t*H;Jef2eE!2}u5Ns{AHj>WYZDgQJt8v%x?9{MXqJsGP|l%OiZqQ1aB! z%E=*Ig`(!tHh>}4_z5IMpg{49UvD*Pp9!pxt_gdAW%sIf3k6CTycOT1McPl=_#0?8 zVjz8Hj*Vy9c5-krd-{BQ{6Xy|P$6LJvMuX$* zA+@I_66_ET5l2&gk9n4$1M3LN8(yEViRx&mtd#LD}AqEs?RW=xKC(OCWH;~>(X6h!uDxXIPH06xh z*`F4cVlbDP`A)-fzf>MuScYsmq&1LUMGaQ3bRm6i7OsJ|%uhTDT zlvZA1M}nz*SalJWNT|`dBm1$xlaA>CCiQ zK`xD-RuEn>-`Z?M{1%@wewf#8?F|(@1e0+T4>nmlSRrNK5f)BJ2H*$q(H>zGD0>eL zQ!tl_Wk)k*e6v^m*{~A;@6+JGeWU-q9>?+L_#UNT%G?4&BnOgvm9@o7l?ov~XL+et zbGT)|G7)KAeqb=wHSPk+J1bdg7N3$vp(ekjI1D9V$G5Cj!=R2w=3*4!z*J-r-cyeb zd(i2KmX!|Lhey!snRw z?#$Gu%S^SQEKt&kep)up#j&9}e+3=JJBS(s>MH+|=R(`8xK{mmndWo_r`-w1#SeRD&YtAJ#GiVI*TkQZ}&aq<+bU2+coU3!jCI6E+Ad_xFW*ghnZ$q zAoF*i&3n1j#?B8x;kjSJD${1jdRB;)R*)Ao!9bd|C7{;iqDo|T&>KSh6*hCD!rwv= zyK#F@2+cv3=|S1Kef(E6Niv8kyLVLX&e=U;{0x{$tDfShqkjUME>f8d(5nzSkY6@! z^-0>DM)wa&%m#UF1F?zR`8Y3X#tA!*7Q$P3lZJ%*KNlrk_uaPkxw~ zxZ1qlE;Zo;nb@!SMazSjM>;34ROOoygo%SF);LL>rRonWwR>bmSd1XD^~sGSu$Gg# zFZ`|yKU0%!v07dz^v(tY%;So(e`o{ZYTX`hm;@b0%8|H>VW`*cr8R%3n|ehw2`(9B+V72`>SY}9^8oh$En80mZK9T4abVG*to;E z1_S6bgDOW?!Oy1LwYy=w3q~KKdbNtyH#d24PFjX)KYMY93{3-mPP-H>@M-_>N~DDu zENh~reh?JBAK=TFN-SfDfT^=+{w4ea2KNWXq2Y<;?(gf(FgVp8Zp-oEjKzB%2Iqj;48GmY3h=bcdYJ}~&4tS`Q1sb=^emaW$IC$|R+r-8V- zf0$gGE(CS_n4s>oicVk)MfvVg#I>iDvf~Ov8bk}sSxluG!6#^Z_zhB&U^`eIi1@j( z^CK$z^stBHtaDDHxn+R;3u+>Lil^}fj?7eaGB z&5nl^STqcaBxI@v>%zG|j))G(rVa4aY=B@^2{TFkW~YP!8!9TG#(-nOf^^X-%m9{Z zCC?iC`G-^RcBSCuk=Z`(FaUUe?hf3{0C>>$?Vs z`2Uud9M+T&KB6o4o9kvdi^Q=Bw!asPdxbe#W-Oaa#_NP(qpyF@bVxv5D5))srkU#m zj_KA+#7sqDn*Ipf!F5Byco4HOSd!Ui$l94|IbW%Ny(s1>f4|Mv^#NfB31N~kya9!k zWCGL-$0ZQztBate^fd>R!hXY_N9ZjYp3V~4_V z#eB)Kjr8yW=+oG)BuNdZG?jaZlw+l_ma8aET(s+-x+=F-t#Qoiuu1i`^x8Sj>b^U} zs^z<()YMFP7CmjUC@M=&lA5W7t&cxTlzJAts*%PBDAPuqcV5o7HEnqjif_7xGt)F% zGx2b4w{@!tE)$p=l3&?Bf#`+!-RLOleeRk3 z7#pF|w@6_sBmn1nECqdunmG^}pr5(ZJQVvAt$6p3H(16~;vO>?sTE`Y+mq5YP&PBo zvq!7#W$Gewy`;%6o^!Dtjz~x)T}Bdk*BS#=EY=ODD&B=V6TD2z^hj1m5^d6s)D*wk zu$z~D7QuZ2b?5`p)E8e2_L38v3WE{V`bVk;6fl#o2`) z99JsWhh?$oVRn@$S#)uK&8DL8>An0&S<%V8hnGD7Z^;Y(%6;^9!7kDQ5bjR_V+~wp zfx4m3z6CWmmZ<8gDGUyg3>t8wgJ5NkkiEm^(sedCicP^&3D%}6LtIUq>mXCAt{9eF zNXL$kGcoUTf_Lhm`t;hD-SE)m=iBnxRU(NyL}f6~1uH)`K!hmYZjLI%H}AmEF5RZt z06$wn63GHnApHXZZJ}s^s)j9(BM6e*7IBK6Bq(!)d~zR#rbxK9NVIlgquoMq z=eGZ9NR!SEqP6=9UQg#@!rtbbSBUM#ynF);zKX+|!Zm}*{H z+j=d?aZ2!?@EL7C~%B?6ouCKLnO$uWn;Y6Xz zX8dSwj732u(o*U3F$F=7xwxm>E-B+SVZH;O-4XPuPkLSt_?S0)lb7EEg)Mglk0#eS z9@jl(OnH4juMxY+*r03VDfPx_IM!Lmc(5hOI;`?d37f>jPP$?9jQQIQU@i4vuG6MagEoJrQ=RD7xt@8E;c zeGV*+Pt+t$@pt!|McETOE$9k=_C!70uhwRS9X#b%ZK z%q(TIUXSS^F0`4Cx?Rk07C6wI4!UVPeI~-fxY6`YH$kABdOuiRtl73MqG|~AzZ@iL&^s?24iS;RK_pdlWkhcF z@Wv-Om(Aealfg)D^adlXh9Nvf~Uf@y;g3Y)i(YP zEXDnb1V}1pJT5ZWyw=1i+0fni9yINurD=EqH^ciOwLUGi)C%Da)tyt=zq2P7pV5-G zR7!oq28-Fgn5pW|nlu^b!S1Z#r7!Wtr{5J5PQ>pd+2P7RSD?>(U7-|Y z7ZQ5lhYIl_IF<9?T9^IPK<(Hp;l5bl5tF9>X-zG14_7PfsA>6<$~A338iYRT{a@r_ zuXBaT=`T5x3=s&3=RYx6NgG>No4?5KFBVjE(swfcivcIpPQFx5l+O;fiGsOrl5teR z_Cm+;PW}O0Dwe_(4Z@XZ)O0W-v2X><&L*<~*q3dg;bQW3g7)a#3KiQP>+qj|qo*Hk z?57>f2?f@`=Fj^nkDKeRkN2d$Z@2eNKpHo}ksj-$`QKb6n?*$^*%Fb3_Kbf1(*W9K>{L$mud2WHJ=j0^=g30Xhg8$#g^?36`p1fm;;1@0Lrx+8t`?vN0ZorM zSW?rhjCE8$C|@p^sXdx z|NOHHg+fL;HIlqyLp~SSdIF`TnSHehNCU9t89yr@)FY<~hu+X`tjg(aSVae$wDG*C zq$nY(Y494R)hD!i1|IIyP*&PD_c2FPgeY)&mX1qujB1VHPG9`yFQpLFVQ0>EKS@Bp zAfP5`C(sWGLI?AC{XEjLKR4FVNw(4+9b?kba95ukgR1H?w<8F7)G+6&(zUhIE5Ef% z=fFkL3QKA~M@h{nzjRq!Y_t!%U66#L8!(2-GgFxkD1=JRRqk=n%G(yHKn%^&$dW>; zSjAcjETMz1%205se$iH_)ZCpfg_LwvnsZQAUCS#^FExp8O4CrJb6>JquNV@qPq~3A zZ<6dOU#6|8+fcgiA#~MDmcpIEaUO02L5#T$HV0$EMD94HT_eXLZ2Zi&(! z&5E>%&|FZ`)CN10tM%tLSPD*~r#--K(H-CZqIOb99_;m|D5wdgJ<1iOJz@h2Zkq?} z%8_KXb&hf=2Wza(Wgc;3v3TN*;HTU*q2?#z&tLn_U0Nt!y>Oo>+2T)He6%XuP;fgn z-G!#h$Y2`9>Jtf}hbVrm6D70|ERzLAU>3zoWhJmjWfgM^))T+2u$~5>HF9jQDkrXR z=IzX36)V75PrFjkQ%TO+iqKGCQ-DDXbaE;C#}!-CoWQx&v*vHfyI>$HNRbpvm<`O( zlx9NBWD6_e&J%Ous4yp~s6)Ghni!I6)0W;9(9$y1wWu`$gs<$9Mcf$L*piP zPR0Av*2%ul`W;?-1_-5Zy0~}?`e@Y5A&0H!^ApyVTT}BiOm4GeFo$_oPlDEyeGBbh z1h3q&Dx~GmUS|3@4V36&$2uO8!Yp&^pD7J5&TN{?xphf*-js1fP?B|`>p_K>lh{ij zP(?H%e}AIP?_i^f&Li=FDSQ`2_NWxL+BB=nQr=$ zHojMlXNGauvvwPU>ZLq!`bX-5F4jBJ&So{kE5+ms9UEYD{66!|k~3vsP+mE}x!>%P za98bAU0!h0&ka4EoiDvBM#CP#dRNdXJcb*(%=<(g+M@<)DZ!@v1V>;54En?igcHR2 zhubQMq}VSOK)onqHfczM7YA@s=9*ow;k;8)&?J3@0JiGcP! zP#00KZ1t)GyZeRJ=f0^gc+58lc4Qh*S7RqPIC6GugG1gXe$LIQMRCo8cHf^qXgAa2 z`}t>u2Cq1CbSEpLr~E=c7~=Qkc9-vLE%(v9N*&HF`(d~(0`iukl5aQ9u4rUvc8%m) zr2GwZN4!s;{SB87lJB;veebPmqE}tSpT>+`t?<457Q9iV$th%i__Z1kOMAswFldD6 ztbOvO337S5o#ZZgN2G99_AVqPv!?Gmt3pzgD+Hp3QPQ`9qJ(g=kjvD+fUSS3upJn! zqoG7acIKEFRX~S}3|{EWT$kdz#zrDlJU(rPkxjws_iyLKU8+v|*oS_W*-guAb&Pj1 z35Z`3z<&Jb@2Mwz=KXucNYdY#SNO$tcVFr9KdKm|%^e-TXzs6M`PBper%ajkrIyUe zp$vVxVs9*>Vp4_1NC~Zg)WOCPmOxI1V34QlG4!aSFOH{QqSVq1^1)- z0P!Z?tT&E-ll(pwf0?=F=yOzik=@nh1Clxr9}Vij89z)ePDSCYAqw?lVI?v?+&*zH z)p$CScFI8rrwId~`}9YWPFu0cW1Sf@vRELs&cbntRU6QfPK-SO*mqu|u~}8AJ!Q$z znzu}50O=YbjwKCuSVBs6&CZR#0FTu)3{}qJJYX(>QPr4$RqWiwX3NT~;>cLn*_&1H zaKpIW)JVJ>b{uo2oq>oQt3y=zJjb%fU@wLqM{SyaC6x2snMx-}ivfU<1- znu1Lh;i$3Tf$Kh5Uk))G!D1UhE8pvx&nO~w^fG)BC&L!_hQk%^p`Kp@F{cz>80W&T ziOK=Sq3fdRu*V0=S53rcIfWFazI}Twj63CG(jOB;$*b`*#B9uEnBM`hDk*EwSRdwP8?5T?xGUKs=5N83XsR*)a4|ijz|c{4tIU+4j^A5C<#5 z*$c_d=5ml~%pGxw#?*q9N7aRwPux5EyqHVkdJO=5J>84!X6P>DS8PTTz>7C#FO?k#edkntG+fJk8ZMn?pmJSO@`x-QHq;7^h6GEXLXo1TCNhH z8ZDH{*NLAjo3WM`xeb=X{((uv3H(8&r8fJJg_uSs_%hOH%JDD?hu*2NvWGYD+j)&` zz#_1%O1wF^o5ryt?O0n;`lHbzp0wQ?rcbW(F1+h7_EZZ9{>rePvLAPVZ_R|n@;b$;UchU=0j<6k8G9QuQf@76oiE*4 zXOLQ&n3$NR#p4<5NJMVC*S);5x2)eRbaAM%VxWu9ohlT;pGEk7;002enCbQ>2r-us z3#bpXP9g|mE`65VrN`+3mC)M(eMj~~eOf)do<@l+fMiTR)XO}422*1SL{wyY(%oMpBgJagtiDf zz>O6(m;};>Hi=t8o{DVC@YigqS(Qh+ix3Rwa9aliH}a}IlOCW1@?%h_bRbq-W{KHF z%Vo?-j@{Xi@=~Lz5uZP27==UGE15|g^0gzD|3x)SCEXrx`*MP^FDLl%pOi~~Il;dc z^hrwp9sYeT7iZ)-ajKy@{a`kr0-5*_!XfBpXwEcFGJ;%kV$0Nx;apKrur zJN2J~CAv{Zjj%FolyurtW8RaFmpn&zKJWL>(0;;+q(%(Hx!GMW4AcfP0YJ*Vz!F4g z!ZhMyj$BdXL@MlF%KeInmPCt~9&A!;cRw)W!Hi@0DY(GD_f?jeV{=s=cJ6e}JktJw zQORnxxj3mBxfrH=x{`_^Z1ddDh}L#V7i}$njUFRVwOX?qOTKjfPMBO4y(WiU<)epb zvB9L=%jW#*SL|Nd_G?E*_h1^M-$PG6Pc_&QqF0O-FIOpa4)PAEPsyvB)GKasmBoEt z?_Q2~QCYGH+hW31x-B=@5_AN870vY#KB~3a*&{I=f);3Kv7q4Q7s)0)gVYx2#Iz9g(F2;=+Iy4 z6KI^8GJ6D@%tpS^8boU}zpi=+(5GfIR)35PzrbuXeL1Y1N%JK7PG|^2k3qIqHfX;G zQ}~JZ-UWx|60P5?d1e;AHx!_;#PG%d=^X(AR%i`l0jSpYOpXoKFW~7ip7|xvN;2^? zsYC9fanpO7rO=V7+KXqVc;Q5z%Bj})xHVrgoR04sA2 zl~DAwv=!(()DvH*=lyhIlU^hBkA0$e*7&fJpB0|oB7)rqGK#5##2T`@_I^|O2x4GO z;xh6ROcV<9>?e0)MI(y++$-ksV;G;Xe`lh76T#Htuia+(UrIXrf9?

L(tZ$0BqX1>24?V$S+&kLZ`AodQ4_)P#Q3*4xg8}lMV-FLwC*cN$< zt65Rf%7z41u^i=P*qO8>JqXPrinQFapR7qHAtp~&RZ85$>ob|Js;GS^y;S{XnGiBc zGa4IGvDl?x%gY`vNhv8wgZnP#UYI-w*^4YCZnxkF85@ldepk$&$#3EAhrJY0U)lR{F6sM3SONV^+$;Zx8BD&Eku3K zKNLZyBni3)pGzU0;n(X@1fX8wYGKYMpLmCu{N5-}epPDxClPFK#A@02WM3!myN%bkF z|GJ4GZ}3sL{3{qXemy+#Uk{4>Kf8v11;f8I&c76+B&AQ8udd<8gU7+BeWC`akUU~U zgXoxie>MS@rBoyY8O8Tc&8id!w+_ooxcr!1?#rc$-|SBBtH6S?)1e#P#S?jFZ8u-Bs&k`yLqW|{j+%c#A4AQ>+tj$Y z^CZajspu$F%73E68Lw5q7IVREED9r1Ijsg#@DzH>wKseye>hjsk^{n0g?3+gs@7`i zHx+-!sjLx^fS;fY!ERBU+Q zVJ!e0hJH%P)z!y%1^ZyG0>PN@5W~SV%f>}c?$H8r;Sy-ui>aruVTY=bHe}$e zi&Q4&XK!qT7-XjCrDaufT@>ieQ&4G(SShUob0Q>Gznep9fR783jGuUynAqc6$pYX; z7*O@@JW>O6lKIk0G00xsm|=*UVTQBB`u1f=6wGAj%nHK_;Aqmfa!eAykDmi-@u%6~ z;*c!pS1@V8r@IX9j&rW&d*}wpNs96O2Ute>%yt{yv>k!6zfT6pru{F1M3P z2WN1JDYqoTB#(`kE{H676QOoX`cnqHl1Yaru)>8Ky~VU{)r#{&s86Vz5X)v15ULHA zAZDb{99+s~qI6;-dQ5DBjHJP@GYTwn;Dv&9kE<0R!d z8tf1oq$kO`_sV(NHOSbMwr=To4r^X$`sBW4$gWUov|WY?xccQJN}1DOL|GEaD_!@& z15p?Pj+>7d`@LvNIu9*^hPN)pwcv|akvYYq)ks%`G>!+!pW{-iXPZsRp8 z35LR;DhseQKWYSD`%gO&k$Dj6_6q#vjWA}rZcWtQr=Xn*)kJ9kacA=esi*I<)1>w^ zO_+E>QvjP)qiSZg9M|GNeLtO2D7xT6vsj`88sd!94j^AqxFLi}@w9!Y*?nwWARE0P znuI_7A-saQ+%?MFA$gttMV-NAR^#tjl_e{R$N8t2NbOlX373>e7Ox=l=;y#;M7asp zRCz*CLnrm$esvSb5{T<$6CjY zmZ(i{Rs_<#pWW>(HPaaYj`%YqBra=Ey3R21O7vUbzOkJJO?V`4-D*u4$Me0Bx$K(lYo`JO}gnC zx`V}a7m-hLU9Xvb@K2ymioF)vj12<*^oAqRuG_4u%(ah?+go%$kOpfb`T96P+L$4> zQ#S+sA%VbH&mD1k5Ak7^^dZoC>`1L%i>ZXmooA!%GI)b+$D&ziKrb)a=-ds9xk#~& z7)3iem6I|r5+ZrTRe_W861x8JpD`DDIYZNm{$baw+$)X^Jtjnl0xlBgdnNY}x%5za zkQ8E6T<^$sKBPtL4(1zi_Rd(tVth*3Xs!ulflX+70?gb&jRTnI8l+*Aj9{|d%qLZ+ z>~V9Z;)`8-lds*Zgs~z1?Fg?Po7|FDl(Ce<*c^2=lFQ~ahwh6rqSjtM5+$GT>3WZW zj;u~w9xwAhOc<kF}~`CJ68 z?(S5vNJa;kriPlim33{N5`C{9?NWhzsna_~^|K2k4xz1`xcui*LXL-1#Y}Hi9`Oo!zQ>x-kgAX4LrPz63uZ+?uG*84@PKq-KgQlMNRwz=6Yes) zY}>YN+qP}nwr$(CZQFjUOI=-6J$2^XGvC~EZ+vrqWaOXB$k?%Suf5k=4>AveC1aJ! ziaW4IS%F$_Babi)kA8Y&u4F7E%99OPtm=vzw$$ zEz#9rvn`Iot_z-r3MtV>k)YvErZ<^Oa${`2>MYYODSr6?QZu+be-~MBjwPGdMvGd!b!elsdi4% z`37W*8+OGulab8YM?`KjJ8e+jM(tqLKSS@=jimq3)Ea2EB%88L8CaM+aG7;27b?5` z4zuUWBr)f)k2o&xg{iZ$IQkJ+SK>lpq4GEacu~eOW4yNFLU!Kgc{w4&D$4ecm0f}~ zTTzquRW@`f0}|IILl`!1P+;69g^upiPA6F{)U8)muWHzexRenBU$E^9X-uIY2%&1w z_=#5*(nmxJ9zF%styBwivi)?#KMG96-H@hD-H_&EZiRNsfk7mjBq{L%!E;Sqn!mVX*}kXhwH6eh;b42eD!*~upVG@ z#smUqz$ICm!Y8wY53gJeS|Iuard0=;k5i5Z_hSIs6tr)R4n*r*rE`>38Pw&lkv{_r!jNN=;#?WbMj|l>cU(9trCq; z%nN~r^y7!kH^GPOf3R}?dDhO=v^3BeP5hF|%4GNQYBSwz;x({21i4OQY->1G=KFyu z&6d`f2tT9Yl_Z8YACZaJ#v#-(gcyeqXMhYGXb=t>)M@fFa8tHp2x;ODX=Ap@a5I=U z0G80^$N0G4=U(>W%mrrThl0DjyQ-_I>+1Tdd_AuB3qpYAqY54upwa3}owa|x5iQ^1 zEf|iTZxKNGRpI>34EwkIQ2zHDEZ=(J@lRaOH>F|2Z%V_t56Km$PUYu^xA5#5Uj4I4RGqHD56xT%H{+P8Ag>e_3pN$4m8n>i%OyJFPNWaEnJ4McUZPa1QmOh?t8~n& z&RulPCors8wUaqMHECG=IhB(-tU2XvHP6#NrLVyKG%Ee*mQ5Ps%wW?mcnriTVRc4J`2YVM>$ixSF2Xi+Wn(RUZnV?mJ?GRdw%lhZ+t&3s7g!~g{%m&i<6 z5{ib-<==DYG93I(yhyv4jp*y3#*WNuDUf6`vTM%c&hiayf(%=x@4$kJ!W4MtYcE#1 zHM?3xw63;L%x3drtd?jot!8u3qeqctceX3m;tWetK+>~q7Be$h>n6riK(5@ujLgRS zvOym)k+VAtyV^mF)$29Y`nw&ijdg~jYpkx%*^ z8dz`C*g=I?;clyi5|!27e2AuSa$&%UyR(J3W!A=ZgHF9OuKA34I-1U~pyD!KuRkjA zbkN!?MfQOeN>DUPBxoy5IX}@vw`EEB->q!)8fRl_mqUVuRu|C@KD-;yl=yKc=ZT0% zB$fMwcC|HE*0f8+PVlWHi>M`zfsA(NQFET?LrM^pPcw`cK+Mo0%8*x8@65=CS_^$cG{GZQ#xv($7J z??R$P)nPLodI;P!IC3eEYEHh7TV@opr#*)6A-;EU2XuogHvC;;k1aI8asq7ovoP!* z?x%UoPrZjj<&&aWpsbr>J$Er-7!E(BmOyEv!-mbGQGeJm-U2J>74>o5x`1l;)+P&~ z>}f^=Rx(ZQ2bm+YE0u=ZYrAV@apyt=v1wb?R@`i_g64YyAwcOUl=C!i>=Lzb$`tjv zOO-P#A+)t-JbbotGMT}arNhJmmGl-lyUpMn=2UacVZxmiG!s!6H39@~&uVokS zG=5qWhfW-WOI9g4!R$n7!|ViL!|v3G?GN6HR0Pt_L5*>D#FEj5wM1DScz4Jv@Sxnl zB@MPPmdI{(2D?;*wd>3#tjAirmUnQoZrVv`xM3hARuJksF(Q)wd4P$88fGYOT1p6U z`AHSN!`St}}UMBT9o7i|G`r$ zrB=s$qV3d6$W9@?L!pl0lf%)xs%1ko^=QY$ty-57=55PvP(^6E7cc zGJ*>m2=;fOj?F~yBf@K@9qwX0hA803Xw+b0m}+#a(>RyR8}*Y<4b+kpp|OS+!whP( zH`v{%s>jsQI9rd$*vm)EkwOm#W_-rLTHcZRek)>AtF+~<(did)*oR1|&~1|e36d-d zgtm5cv1O0oqgWC%Et@P4Vhm}Ndl(Y#C^MD03g#PH-TFy+7!Osv1z^UWS9@%JhswEq~6kSr2DITo59+; ze=ZC}i2Q?CJ~Iyu?vn|=9iKV>4j8KbxhE4&!@SQ^dVa-gK@YfS9xT(0kpW*EDjYUkoj! zE49{7H&E}k%5(>sM4uGY)Q*&3>{aitqdNnRJkbOmD5Mp5rv-hxzOn80QsG=HJ_atI-EaP69cacR)Uvh{G5dTpYG7d zbtmRMq@Sexey)||UpnZ?;g_KMZq4IDCy5}@u!5&B^-=6yyY{}e4Hh3ee!ZWtL*s?G zxG(A!<9o!CL+q?u_utltPMk+hn?N2@?}xU0KlYg?Jco{Yf@|mSGC<(Zj^yHCvhmyx z?OxOYoxbptDK()tsJ42VzXdINAMWL$0Gcw?G(g8TMB)Khw_|v9`_ql#pRd2i*?CZl z7k1b!jQB=9-V@h%;Cnl7EKi;Y^&NhU0mWEcj8B|3L30Ku#-9389Q+(Yet0r$F=+3p z6AKOMAIi|OHyzlHZtOm73}|ntKtFaXF2Fy|M!gOh^L4^62kGUoWS1i{9gsds_GWBc zLw|TaLP64z3z9?=R2|T6Xh2W4_F*$cq>MtXMOy&=IPIJ`;!Tw?PqvI2b*U1)25^<2 zU_ZPoxg_V0tngA0J+mm?3;OYw{i2Zb4x}NedZug!>EoN3DC{1i)Z{Z4m*(y{ov2%- zk(w>+scOO}MN!exSc`TN)!B=NUX`zThWO~M*ohqq;J2hx9h9}|s#?@eR!=F{QTrq~ zTcY|>azkCe$|Q0XFUdpFT=lTcyW##i;-e{}ORB4D?t@SfqGo_cS z->?^rh$<&n9DL!CF+h?LMZRi)qju!meugvxX*&jfD!^1XB3?E?HnwHP8$;uX{Rvp# zh|)hM>XDv$ZGg=$1{+_bA~u-vXqlw6NH=nkpyWE0u}LQjF-3NhATL@9rRxMnpO%f7 z)EhZf{PF|mKIMFxnC?*78(}{Y)}iztV12}_OXffJ;ta!fcFIVjdchyHxH=t%ci`Xd zX2AUB?%?poD6Zv*&BA!6c5S#|xn~DK01#XvjT!w!;&`lDXSJT4_j$}!qSPrb37vc{ z9^NfC%QvPu@vlxaZ;mIbn-VHA6miwi8qJ~V;pTZkKqqOii<1Cs}0i?uUIss;hM4dKq^1O35y?Yp=l4i zf{M!@QHH~rJ&X~8uATV><23zZUbs-J^3}$IvV_ANLS08>k`Td7aU_S1sLsfi*C-m1 z-e#S%UGs4E!;CeBT@9}aaI)qR-6NU@kvS#0r`g&UWg?fC7|b^_HyCE!8}nyh^~o@< zpm7PDFs9yxp+byMS(JWm$NeL?DNrMCNE!I^ko-*csB+dsf4GAq{=6sfyf4wb>?v1v zmb`F*bN1KUx-`ra1+TJ37bXNP%`-Fd`vVQFTwWpX@;s(%nDQa#oWhgk#mYlY*!d>( zE&!|ySF!mIyfING+#%RDY3IBH_fW$}6~1%!G`suHub1kP@&DoAd5~7J55;5_noPI6eLf{t;@9Kf<{aO0`1WNKd?<)C-|?C?)3s z>wEq@8=I$Wc~Mt$o;g++5qR+(6wt9GI~pyrDJ%c?gPZe)owvy^J2S=+M^ z&WhIE`g;;J^xQLVeCtf7b%Dg#Z2gq9hp_%g)-%_`y*zb; zn9`f`mUPN-Ts&fFo(aNTsXPA|J!TJ{0hZp0^;MYHLOcD=r_~~^ymS8KLCSeU3;^QzJNqS z5{5rEAv#l(X?bvwxpU;2%pQftF`YFgrD1jt2^~Mt^~G>T*}A$yZc@(k9orlCGv&|1 zWWvVgiJsCAtamuAYT~nzs?TQFt<1LSEx!@e0~@yd6$b5!Zm(FpBl;(Cn>2vF?k zOm#TTjFwd2D-CyA!mqR^?#Uwm{NBemP>(pHmM}9;;8`c&+_o3#E5m)JzfwN?(f-a4 zyd%xZc^oQx3XT?vcCqCX&Qrk~nu;fxs@JUoyVoi5fqpi&bUhQ2y!Ok2pzsFR(M(|U zw3E+kH_zmTRQ9dUMZWRE%Zakiwc+lgv7Z%|YO9YxAy`y28`Aw;WU6HXBgU7fl@dnt z-fFBV)}H-gqP!1;V@Je$WcbYre|dRdp{xt!7sL3Eoa%IA`5CAA%;Wq8PktwPdULo! z8!sB}Qt8#jH9Sh}QiUtEPZ6H0b*7qEKGJ%ITZ|vH)5Q^2m<7o3#Z>AKc%z7_u`rXA zqrCy{-{8;9>dfllLu$^M5L z-hXs))h*qz%~ActwkIA(qOVBZl2v4lwbM>9l70Y`+T*elINFqt#>OaVWoja8RMsep z6Or3f=oBnA3vDbn*+HNZP?8LsH2MY)x%c13@(XfuGR}R?Nu<|07{$+Lc3$Uv^I!MQ z>6qWgd-=aG2Y^24g4{Bw9ueOR)(9h`scImD=86dD+MnSN4$6 z^U*o_mE-6Rk~Dp!ANp#5RE9n*LG(Vg`1)g6!(XtDzsov$Dvz|Gv1WU68J$CkshQhS zCrc|cdkW~UK}5NeaWj^F4MSgFM+@fJd{|LLM)}_O<{rj z+?*Lm?owq?IzC%U%9EBga~h-cJbIu=#C}XuWN>OLrc%M@Gu~kFEYUi4EC6l#PR2JS zQUkGKrrS#6H7}2l0F@S11DP`@pih0WRkRJl#F;u{c&ZC{^$Z+_*lB)r)-bPgRFE;* zl)@hK4`tEP=P=il02x7-C7p%l=B`vkYjw?YhdJU9!P!jcmY$OtC^12w?vy3<<=tlY zUwHJ_0lgWN9vf>1%WACBD{UT)1qHQSE2%z|JHvP{#INr13jM}oYv_5#xsnv9`)UAO zuwgyV4YZ;O)eSc3(mka6=aRohi!HH@I#xq7kng?Acdg7S4vDJb6cI5fw?2z%3yR+| zU5v@Hm}vy;${cBp&@D=HQ9j7NcFaOYL zj-wV=eYF{|XTkFNM2uz&T8uH~;)^Zo!=KP)EVyH6s9l1~4m}N%XzPpduPg|h-&lL` zAXspR0YMOKd2yO)eMFFJ4?sQ&!`dF&!|niH*!^*Ml##o0M(0*uK9&yzekFi$+mP9s z>W9d%Jb)PtVi&-Ha!o~Iyh@KRuKpQ@)I~L*d`{O8!kRObjO7=n+Gp36fe!66neh+7 zW*l^0tTKjLLzr`x4`_8&on?mjW-PzheTNox8Hg7Nt@*SbE-%kP2hWYmHu#Fn@Q^J(SsPUz*|EgOoZ6byg3ew88UGdZ>9B2Tq=jF72ZaR=4u%1A6Vm{O#?@dD!(#tmR;eP(Fu z{$0O%=Vmua7=Gjr8nY%>ul?w=FJ76O2js&17W_iq2*tb!i{pt#`qZB#im9Rl>?t?0c zicIC}et_4d+CpVPx)i4~$u6N-QX3H77ez z?ZdvXifFk|*F8~L(W$OWM~r`pSk5}#F?j_5u$Obu9lDWIknO^AGu+Blk7!9Sb;NjS zncZA?qtASdNtzQ>z7N871IsPAk^CC?iIL}+{K|F@BuG2>qQ;_RUYV#>hHO(HUPpk@ z(bn~4|F_jiZi}Sad;_7`#4}EmD<1EiIxa48QjUuR?rC}^HRocq`OQPM@aHVKP9E#q zy%6bmHygCpIddPjE}q_DPC`VH_2m;Eey&ZH)E6xGeStOK7H)#+9y!%-Hm|QF6w#A( zIC0Yw%9j$s-#odxG~C*^MZ?M<+&WJ+@?B_QPUyTg9DJGtQN#NIC&-XddRsf3n^AL6 zT@P|H;PvN;ZpL0iv$bRb7|J{0o!Hq+S>_NrH4@coZtBJu#g8#CbR7|#?6uxi8d+$g z87apN>EciJZ`%Zv2**_uiET9Vk{pny&My;+WfGDw4EVL#B!Wiw&M|A8f1A@ z(yFQS6jfbH{b8Z-S7D2?Ixl`j0{+ZnpT=;KzVMLW{B$`N?Gw^Fl0H6lT61%T2AU**!sX0u?|I(yoy&Xveg7XBL&+>n6jd1##6d>TxE*Vj=8lWiG$4=u{1UbAa5QD>5_ z;Te^42v7K6Mmu4IWT6Rnm>oxrl~b<~^e3vbj-GCdHLIB_>59}Ya+~OF68NiH=?}2o zP(X7EN=quQn&)fK>M&kqF|<_*H`}c zk=+x)GU>{Af#vx&s?`UKUsz})g^Pc&?Ka@t5$n$bqf6{r1>#mWx6Ep>9|A}VmWRnowVo`OyCr^fHsf# zQjQ3Ttp7y#iQY8l`zEUW)(@gGQdt(~rkxlkefskT(t%@i8=|p1Y9Dc5bc+z#n$s13 zGJk|V0+&Ekh(F};PJzQKKo+FG@KV8a<$gmNSD;7rd_nRdc%?9)p!|B-@P~kxQG}~B zi|{0}@}zKC(rlFUYp*dO1RuvPC^DQOkX4<+EwvBAC{IZQdYxoq1Za!MW7%p7gGr=j zzWnAq%)^O2$eItftC#TTSArUyL$U54-O7e|)4_7%Q^2tZ^0-d&3J1}qCzR4dWX!)4 zzIEKjgnYgMus^>6uw4Jm8ga6>GBtMjpNRJ6CP~W=37~||gMo_p@GA@#-3)+cVYnU> zE5=Y4kzl+EbEh%dhQokB{gqNDqx%5*qBusWV%!iprn$S!;oN_6E3?0+umADVs4ako z?P+t?m?};gev9JXQ#Q&KBpzkHPde_CGu-y z<{}RRAx=xlv#mVi+Ibrgx~ujW$h{?zPfhz)Kp7kmYS&_|97b&H&1;J-mzrBWAvY} zh8-I8hl_RK2+nnf&}!W0P+>5?#?7>npshe<1~&l_xqKd0_>dl_^RMRq@-Myz&|TKZBj1=Q()) zF{dBjv5)h=&Z)Aevx}+i|7=R9rG^Di!sa)sZCl&ctX4&LScQ-kMncgO(9o6W6)yd< z@Rk!vkja*X_N3H=BavGoR0@u0<}m-7|2v!0+2h~S2Q&a=lTH91OJsvms2MT~ zY=c@LO5i`mLpBd(vh|)I&^A3TQLtr>w=zoyzTd=^f@TPu&+*2MtqE$Avf>l>}V|3-8Fp2hzo3y<)hr_|NO(&oSD z!vEjTWBxbKTiShVl-U{n*B3#)3a8$`{~Pk}J@elZ=>Pqp|MQ}jrGv7KrNcjW%TN_< zZz8kG{#}XoeWf7qY?D)L)8?Q-b@Na&>i=)(@uNo zr;cH98T3$Iau8Hn*@vXi{A@YehxDE2zX~o+RY`)6-X{8~hMpc#C`|8y> zU8Mnv5A0dNCf{Ims*|l-^ z(MRp{qoGohB34|ggDI*p!Aw|MFyJ|v+<+E3brfrI)|+l3W~CQLPbnF@G0)P~Ly!1TJLp}xh8uW`Q+RB-v`MRYZ9Gam3cM%{ zb4Cb*f)0deR~wtNb*8w-LlIF>kc7DAv>T0D(a3@l`k4TFnrO+g9XH7;nYOHxjc4lq zMmaW6qpgAgy)MckYMhl?>sq;-1E)-1llUneeA!ya9KM$)DaNGu57Z5aE>=VST$#vb zFo=uRHr$0M{-ha>h(D_boS4zId;3B|Tpqo|?B?Z@I?G(?&Iei+-{9L_A9=h=Qfn-U z1wIUnQe9!z%_j$F_{rf&`ZFSott09gY~qrf@g3O=Y>vzAnXCyL!@(BqWa)Zqt!#_k zfZHuwS52|&&)aK;CHq9V-t9qt0au{$#6c*R#e5n3rje0hic7c7m{kW$p(_`wB=Gw7 z4k`1Hi;Mc@yA7dp@r~?@rfw)TkjAW++|pkfOG}0N|2guek}j8Zen(!+@7?qt_7ndX zB=BG6WJ31#F3#Vk3=aQr8T)3`{=p9nBHlKzE0I@v`{vJ}h8pd6vby&VgFhzH|q;=aonunAXL6G2y(X^CtAhWr*jI zGjpY@raZDQkg*aMq}Ni6cRF z{oWv}5`nhSAv>usX}m^GHt`f(t8@zHc?K|y5Zi=4G*UG1Sza{$Dpj%X8 zzEXaKT5N6F5j4J|w#qlZP!zS7BT)9b+!ZSJdToqJts1c!)fwih4d31vfb{}W)EgcA zH2pZ^8_k$9+WD2n`6q5XbOy8>3pcYH9 z07eUB+p}YD@AH!}p!iKv><2QF-Y^&xx^PAc1F13A{nUeCDg&{hnix#FiO!fe(^&%Qcux!h znu*S!s$&nnkeotYsDthh1dq(iQrE|#f_=xVgfiiL&-5eAcC-> z5L0l|DVEM$#ulf{bj+Y~7iD)j<~O8CYM8GW)dQGq)!mck)FqoL^X zwNdZb3->hFrbHFm?hLvut-*uK?zXn3q1z|UX{RZ;-WiLoOjnle!xs+W0-8D)kjU#R z+S|A^HkRg$Ij%N4v~k`jyHffKaC~=wg=9)V5h=|kLQ@;^W!o2^K+xG&2n`XCd>OY5Ydi= zgHH=lgy++erK8&+YeTl7VNyVm9-GfONlSlVb3)V9NW5tT!cJ8d7X)!b-$fb!s76{t z@d=Vg-5K_sqHA@Zx-L_}wVnc@L@GL9_K~Zl(h5@AR#FAiKad8~KeWCo@mgXIQ#~u{ zgYFwNz}2b6Vu@CP0XoqJ+dm8px(5W5-Jpis97F`+KM)TuP*X8H@zwiVKDKGVp59pI zifNHZr|B+PG|7|Y<*tqap0CvG7tbR1R>jn70t1X`XJixiMVcHf%Ez*=xm1(CrTSDt z0cle!+{8*Ja&EOZ4@$qhBuKQ$U95Q%rc7tg$VRhk?3=pE&n+T3upZg^ZJc9~c2es% zh7>+|mrmA-p&v}|OtxqmHIBgUxL~^0+cpfkSK2mhh+4b=^F1Xgd2)}U*Yp+H?ls#z zrLxWg_hm}AfK2XYWr!rzW4g;+^^&bW%LmbtRai9f3PjU${r@n`JThy-cphbcwn)rq9{A$Ht`lmYKxOacy z6v2R(?gHhD5@&kB-Eg?4!hAoD7~(h>(R!s1c1Hx#s9vGPePUR|of32bS`J5U5w{F) z>0<^ktO2UHg<0{oxkdOQ;}coZDQph8p6ruj*_?uqURCMTac;>T#v+l1Tc~%^k-Vd@ zkc5y35jVNc49vZpZx;gG$h{%yslDI%Lqga1&&;mN{Ush1c7p>7e-(zp}6E7f-XmJb4nhk zb8zS+{IVbL$QVF8pf8}~kQ|dHJAEATmmnrb_wLG}-yHe>W|A&Y|;muy-d^t^<&)g5SJfaTH@P1%euONny=mxo+C z4N&w#biWY41r8k~468tvuYVh&XN&d#%QtIf9;iVXfWY)#j=l`&B~lqDT@28+Y!0E+MkfC}}H*#(WKKdJJq=O$vNYCb(ZG@p{fJgu;h z21oHQ(14?LeT>n5)s;uD@5&ohU!@wX8w*lB6i@GEH0pM>YTG+RAIWZD;4#F1&F%Jp zXZUml2sH0!lYJT?&sA!qwez6cXzJEd(1ZC~kT5kZSp7(@=H2$Azb_*W&6aA|9iwCL zdX7Q=42;@dspHDwYE?miGX#L^3xD&%BI&fN9^;`v4OjQXPBaBmOF1;#C)8XA(WFlH zycro;DS2?(G&6wkr6rqC>rqDv3nfGw3hmN_9Al>TgvmGsL8_hXx09};l9Ow@)F5@y z#VH5WigLDwZE4nh^7&@g{1FV^UZ%_LJ-s<{HN*2R$OPg@R~Z`c-ET*2}XB@9xvAjrK&hS=f|R8Gr9 zr|0TGOsI7RD+4+2{ZiwdVD@2zmg~g@^D--YL;6UYGSM8i$NbQr4!c7T9rg!8;TM0E zT#@?&S=t>GQm)*ua|?TLT2ktj#`|R<_*FAkOu2Pz$wEc%-=Y9V*$&dg+wIei3b*O8 z2|m$!jJG!J!ZGbbIa!(Af~oSyZV+~M1qGvelMzPNE_%5?c2>;MeeG2^N?JDKjFYCy z7SbPWH-$cWF9~fX%9~v99L!G(wi!PFp>rB!9xj7=Cv|F+7CsGNwY0Q_J%FID%C^CBZQfJ9K(HK%k31j~e#&?hQ zNuD6gRkVckU)v+53-fc} z7ZCzYN-5RG4H7;>>Hg?LU9&5_aua?A0)0dpew1#MMlu)LHe(M;OHjHIUl7|%%)YPo z0cBk;AOY00%Fe6heoN*$(b<)Cd#^8Iu;-2v@>cE-OB$icUF9EEoaC&q8z9}jMTT2I z8`9;jT%z0;dy4!8U;GW{i`)3!c6&oWY`J3669C!tM<5nQFFrFRglU8f)5Op$GtR-3 zn!+SPCw|04sv?%YZ(a7#L?vsdr7ss@WKAw&A*}-1S|9~cL%uA+E~>N6QklFE>8W|% zyX-qAUGTY1hQ-+um`2|&ji0cY*(qN!zp{YpDO-r>jPk*yuVSay<)cUt`t@&FPF_&$ zcHwu1(SQ`I-l8~vYyUxm@D1UEdFJ$f5Sw^HPH7b!9 zzYT3gKMF((N(v0#4f_jPfVZ=ApN^jQJe-X$`A?X+vWjLn_%31KXE*}5_}d8 zw_B1+a#6T1?>M{ronLbHIlEsMf93muJ7AH5h%;i99<~JX^;EAgEB1uHralD*!aJ@F zV2ruuFe9i2Q1C?^^kmVy921eb=tLDD43@-AgL^rQ3IO9%+vi_&R2^dpr}x{bCVPej z7G0-0o64uyWNtr*loIvslyo0%)KSDDKjfThe0hcqs)(C-MH1>bNGBDRTW~scy_{w} zp^aq8Qb!h9Lwielq%C1b8=?Z=&U)ST&PHbS)8Xzjh2DF?d{iAv)Eh)wsUnf>UtXN( zL7=$%YrZ#|^c{MYmhn!zV#t*(jdmYdCpwqpZ{v&L8KIuKn`@IIZfp!uo}c;7J57N` zAxyZ-uA4=Gzl~Ovycz%MW9ZL7N+nRo&1cfNn9(1H5eM;V_4Z_qVann7F>5f>%{rf= zPBZFaV@_Sobl?Fy&KXyzFDV*FIdhS5`Uc~S^Gjo)aiTHgn#<0C=9o-a-}@}xDor;D zZyZ|fvf;+=3MZd>SR1F^F`RJEZo+|MdyJYQAEauKu%WDol~ayrGU3zzbHKsnHKZ*z zFiwUkL@DZ>!*x05ql&EBq@_Vqv83&?@~q5?lVmffQZ+V-=qL+!u4Xs2Z2zdCQ3U7B&QR9_Iggy} z(om{Y9eU;IPe`+p1ifLx-XWh?wI)xU9ik+m#g&pGdB5Bi<`PR*?92lE0+TkRuXI)z z5LP!N2+tTc%cB6B1F-!fj#}>S!vnpgVU~3!*U1ej^)vjUH4s-bd^%B=ItQqDCGbrEzNQi(dJ`J}-U=2{7-d zK8k^Rlq2N#0G?9&1?HSle2vlkj^KWSBYTwx`2?9TU_DX#J+f+qLiZCqY1TXHFxXZqYMuD@RU$TgcnCC{_(vwZ-*uX)~go#%PK z@}2Km_5aQ~(<3cXeJN6|F8X_1@L%@xTzs}$_*E|a^_URF_qcF;Pfhoe?FTFwvjm1o z8onf@OY@jC2tVcMaZS;|T!Ks(wOgPpRzRnFS-^RZ4E!9dsnj9sFt609a|jJbb1Dt@ z<=Gal2jDEupxUSwWu6zp<<&RnAA;d&4gKVG0iu6g(DsST(4)z6R)zDpfaQ}v{5ARt zyhwvMtF%b-YazR5XLz+oh=mn;y-Mf2a8>7?2v8qX;19y?b>Z5laGHvzH;Nu9S`B8} zI)qN$GbXIQ1VL3lnof^6TS~rvPVg4V?Dl2Bb*K2z4E{5vy<(@@K_cN@U>R!>aUIRnb zL*)=787*cs#zb31zBC49x$`=fkQbMAef)L2$dR{)6BAz!t5U_B#1zZG`^neKSS22oJ#5B=gl%U=WeqL9REF2g zZnfCb0?quf?Ztj$VXvDSWoK`0L=Zxem2q}!XWLoT-kYMOx)!7fcgT35uC~0pySEme z`{wGWTkGr7>+Kb^n;W?BZH6ZP(9tQX%-7zF>vc2}LuWDI(9kh1G#7B99r4x6;_-V+k&c{nPUrR zAXJGRiMe~aup{0qzmLNjS_BC4cB#sXjckx{%_c&^xy{M61xEb>KW_AG5VFXUOjAG4 z^>Qlm9A#1N{4snY=(AmWzatb!ngqiqPbBZ7>Uhb3)dTkSGcL#&SH>iMO-IJBPua`u zo)LWZ>=NZLr758j{%(|uQuZ)pXq_4c!!>s|aDM9#`~1bzK3J1^^D#<2bNCccH7~-X}Ggi!pIIF>uFx%aPARGQsnC8ZQc8lrQ5o~smqOg>Ti^GNme94*w z)JZy{_{#$jxGQ&`M z!OMvZMHR>8*^>eS%o*6hJwn!l8VOOjZQJvh)@tnHVW&*GYPuxqXw}%M!(f-SQf`=L z5;=5w2;%82VMH6Xi&-K3W)o&K^+vJCepWZ-rW%+Dc6X3(){z$@4zjYxQ|}8UIojeC zYZpQ1dU{fy=oTr<4VX?$q)LP}IUmpiez^O&N3E_qPpchGTi5ZM6-2ScWlQq%V&R2Euz zO|Q0Hx>lY1Q1cW5xHv5!0OGU~PVEqSuy#fD72d#O`N!C;o=m+YioGu-wH2k6!t<~K zSr`E=W9)!g==~x9VV~-8{4ZN9{~-A9zJpRe%NGg$+MDuI-dH|b@BD)~>pPCGUNNzY zMDg||0@XGQgw`YCt5C&A{_+J}mvV9Wg{6V%2n#YSRN{AP#PY?1FF1#|vO_%e+#`|2*~wGAJaeRX6=IzFNeWhz6gJc8+(03Ph4y6ELAm=AkN7TOgMUEw*N{= z_)EIDQx5q22oUR+_b*tazu9+pX|n1c*IB-}{DqIj z-?E|ks{o3AGRNb;+iKcHkZvYJvFsW&83RAPs1Oh@IWy%l#5x2oUP6ZCtv+b|q>jsf zZ_9XO;V!>n`UxH1LvH8)L4?8raIvasEhkpQoJ`%!5rBs!0Tu(s_D{`4opB;57)pkX z4$A^8CsD3U5*!|bHIEqsn~{q+Ddj$ME@Gq4JXtgVz&7l{Ok!@?EA{B3P~NAqb9)4? zkQo30A^EbHfQ@87G5&EQTd`frrwL)&Yw?%-W@uy^Gn23%j?Y!Iea2xw<-f;esq zf%w5WN@E1}zyXtYv}}`U^B>W`>XPmdLj%4{P298|SisrE;7HvXX;A}Ffi8B#3Lr;1 zHt6zVb`8{#+e$*k?w8|O{Uh|&AG}|DG1PFo1i?Y*cQm$ZwtGcVgMwtBUDa{~L1KT-{jET4w60>{KZ27vXrHJ;fW{6| z=|Y4!&UX020wU1>1iRgB@Q#m~1^Z^9CG1LqDhYBrnx%IEdIty z!46iOoKlKs)c}newDG)rWUikD%j`)p z_w9Ph&e40=(2eBy;T!}*1p1f1SAUDP9iWy^u^Ubdj21Kn{46;GR+hwLO=4D11@c~V zI8x&(D({K~Df2E)Nx_yQvYfh4;MbMJ@Z}=Dt3_>iim~QZ*hZIlEs0mEb z_54+&*?wMD`2#vsQRN3KvoT>hWofI_Vf(^C1ff-Ike@h@saEf7g}<9T`W;HAne-Nd z>RR+&SP35w)xKn8^U$7))PsM!jKwYZ*RzEcG-OlTrX3}9a{q%#Un5E5W{{hp>w~;` zGky+3(vJvQyGwBo`tCpmo0mo((?nM8vf9aXrrY1Ve}~TuVkB(zeds^jEfI}xGBCM2 zL1|#tycSaWCurP+0MiActG3LCas@_@tao@(R1ANlwB$4K53egNE_;!&(%@Qo$>h`^1S_!hN6 z)vZtG$8fN!|BXBJ=SI>e(LAU(y(i*PHvgQ2llulxS8>qsimv7yL}0q_E5WiAz7)(f zC(ahFvG8&HN9+6^jGyLHM~$)7auppeWh_^zKk&C_MQ~8;N??OlyH~azgz5fe^>~7F zl3HnPN3z-kN)I$4@`CLCMQx3sG~V8hPS^}XDXZrQA>}mQPw%7&!sd(Pp^P=tgp-s^ zjl}1-KRPNWXgV_K^HkP__SR`S-|OF0bR-N5>I%ODj&1JUeAQ3$9i;B~$S6}*^tK?= z**%aCiH7y?xdY?{LgVP}S0HOh%0%LI$wRx;$T|~Y8R)Vdwa}kGWv8?SJVm^>r6+%I z#lj1aR94{@MP;t-scEYQWc#xFA30^}?|BeX*W#9OL;Q9#WqaaM546j5j29((^_8Nu z4uq}ESLr~r*O7E7$D{!k9W>`!SLoyA53i9QwRB{!pHe8um|aDE`Cg0O*{jmor)^t)3`>V>SWN-2VJcFmj^1?~tT=JrP`fVh*t zXHarp=8HEcR#vFe+1a%XXuK+)oFs`GDD}#Z+TJ}Ri`FvKO@ek2ayn}yaOi%(8p%2$ zpEu)v0Jym@f}U|-;}CbR=9{#<^z28PzkkTNvyKvJDZe+^VS2bES3N@Jq!-*}{oQlz z@8bgC_KnDnT4}d#&Cpr!%Yb?E!brx0!eVOw~;lLwUoz#Np%d$o%9scc3&zPm`%G((Le|6o1 zM(VhOw)!f84zG^)tZ1?Egv)d8cdNi+T${=5kV+j;Wf%2{3g@FHp^Gf*qO0q!u$=m9 zCaY`4mRqJ;FTH5`a$affE5dJrk~k`HTP_7nGTY@B9o9vvnbytaID;^b=Tzp7Q#DmD zC(XEN)Ktn39z5|G!wsVNnHi) z%^q94!lL|hF`IijA^9NR0F$@h7k5R^ljOW(;Td9grRN0Mb)l_l7##{2nPQ@?;VjXv zaLZG}yuf$r$<79rVPpXg?6iiieX|r#&`p#Con2i%S8*8F}(E) zI5E6c3tG*<;m~6>!&H!GJ6zEuhH7mkAzovdhLy;)q z{H2*8I^Pb}xC4s^6Y}6bJvMu=8>g&I)7!N!5QG$xseeU#CC?ZM-TbjsHwHgDGrsD= z{%f;@Sod+Ch66Ko2WF~;Ty)v>&x^aovCbCbD7>qF*!?BXmOV3(s|nxsb*Lx_2lpB7 zokUnzrk;P=T-&kUHO}td+Zdj!3n&NR?K~cRU zAXU!DCp?51{J4w^`cV#ye}(`SQhGQkkMu}O3M*BWt4UsC^jCFUy;wTINYmhD$AT;4 z?Xd{HaJjP`raZ39qAm;%beDbrLpbRf(mkKbANan7XsL>_pE2oo^$TgdidjRP!5-`% zv0d!|iKN$c0(T|L0C~XD0aS8t{*&#LnhE;1Kb<9&=c2B+9JeLvJr*AyyRh%@jHej=AetOMSlz^=!kxX>>B{2B1uIrQyfd8KjJ+DBy!h)~*(!|&L4^Q_07SQ~E zcemVP`{9CwFvPFu7pyVGCLhH?LhEVb2{7U+Z_>o25#+3<|8%1T^5dh}*4(kfJGry} zm%r#hU+__Z;;*4fMrX=Bkc@7|v^*B;HAl0((IBPPii%X9+u3DDF6%bI&6?Eu$8&aWVqHIM7mK6?Uvq$1|(-T|)IV<>e?!(rY zqkmO1MRaLeTR=)io(0GVtQT@s6rN%C6;nS3@eu;P#ry4q;^O@1ZKCJyp_Jo)Ty^QW z+vweTx_DLm{P-XSBj~Sl<%_b^$=}odJ!S2wAcxenmzFGX1t&Qp8Vxz2VT`uQsQYtdn&_0xVivIcxZ_hnrRtwq4cZSj1c-SG9 z7vHBCA=fd0O1<4*=lu$6pn~_pVKyL@ztw1swbZi0B?spLo56ZKu5;7ZeUml1Ws1?u zqMf1p{5myAzeX$lAi{jIUqo1g4!zWLMm9cfWcnw`k6*BR^?$2(&yW?>w;G$EmTA@a z6?y#K$C~ZT8+v{87n5Dm&H6Pb_EQ@V0IWmG9cG=O;(;5aMWWrIPzz4Q`mhK;qQp~a z+BbQrEQ+w{SeiuG-~Po5f=^EvlouB@_|4xQXH@A~KgpFHrwu%dwuCR)=B&C(y6J4J zvoGk9;lLs9%iA-IJGU#RgnZZR+@{5lYl8(e1h6&>Vc_mvg0d@);X zji4T|n#lB!>pfL|8tQYkw?U2bD`W{na&;*|znjmalA&f;*U++_aBYerq;&C8Kw7mI z7tsG*?7*5j&dU)Lje;^{D_h`%(dK|pB*A*1(Jj)w^mZ9HB|vGLkF1GEFhu&rH=r=8 zMxO42e{Si6$m+Zj`_mXb&w5Q(i|Yxyg?juUrY}78uo@~3v84|8dfgbPd0iQJRdMj< zncCNGdMEcsxu#o#B5+XD{tsg*;j-eF8`mp~K8O1J!Z0+>0=7O=4M}E?)H)ENE;P*F z$Ox?ril_^p0g7xhDUf(q652l|562VFlC8^r8?lQv;TMvn+*8I}&+hIQYh2 z1}uQQaag&!-+DZ@|C+C$bN6W;S-Z@)d1|en+XGvjbOxCa-qAF*LA=6s(Jg+g;82f$ z(Vb)8I)AH@cdjGFAR5Rqd0wiNCu!xtqWbcTx&5kslzTb^7A78~Xzw1($UV6S^VWiP zFd{Rimd-0CZC_Bu(WxBFW7+k{cOW7DxBBkJdJ;VsJ4Z@lERQr%3eVv&$%)b%<~ zCl^Y4NgO}js@u{|o~KTgH}>!* z_iDNqX2(As7T0xivMH|3SC1ivm8Q}6Ffcd7owUKN5lHAtzMM4<0v+ykUT!QiowO;`@%JGv+K$bBx@*S7C8GJVqQ_K>12}M`f_Ys=S zKFh}HM9#6Izb$Y{wYzItTy+l5U2oL%boCJn?R3?jP@n$zSIwlmyGq30Cw4QBO|14` zW5c);AN*J3&eMFAk$SR~2k|&+&Bc$e>s%c{`?d~85S-UWjA>DS5+;UKZ}5oVa5O(N zqqc@>)nee)+4MUjH?FGv%hm2{IlIF-QX}ym-7ok4Z9{V+ZHVZQl$A*x!(q%<2~iVv znUa+BX35&lCb#9VE-~Y^W_f;Xhl%vgjwdjzMy$FsSIj&ok}L+X`4>J=9BkN&nu^E*gbhj3(+D>C4E z@Fwq_=N)^bKFSHTzZk?-gNU$@l}r}dwGyh_fNi=9b|n}J>&;G!lzilbWF4B}BBq4f zYIOl?b)PSh#XTPp4IS5ZR_2C!E)Z`zH0OW%4;&~z7UAyA-X|sh9@~>cQW^COA9hV4 zXcA6qUo9P{bW1_2`eo6%hgbN%(G-F1xTvq!sc?4wN6Q4`e9Hku zFwvlAcRY?6h^Fj$R8zCNEDq8`=uZB8D-xn)tA<^bFFy}4$vA}Xq0jAsv1&5!h!yRA zU()KLJya5MQ`q&LKdH#fwq&(bNFS{sKlEh_{N%{XCGO+po#(+WCLmKW6&5iOHny>g z3*VFN?mx!16V5{zyuMWDVP8U*|BGT$(%IO|)?EF|OI*sq&RovH!N%=>i_c?K*A>>k zyg1+~++zY4Q)J;VWN0axhoIKx;l&G$gvj(#go^pZskEVj8^}is3Jw26LzYYVos0HX zRPvmK$dVxM8(Tc?pHFe0Z3uq){{#OK3i-ra#@+;*=ui8)y6hsRv z4Fxx1c1+fr!VI{L3DFMwXKrfl#Q8hfP@ajgEau&QMCxd{g#!T^;ATXW)nUg&$-n25 zruy3V!!;{?OTobo|0GAxe`Acn3GV@W=&n;~&9 zQM>NWW~R@OYORkJAo+eq1!4vzmf9K%plR4(tB@TR&FSbDoRgJ8qVcH#;7lQub*nq&?Z>7WM=oeEVjkaG zT#f)=o!M2DO5hLR+op>t0CixJCIeXH*+z{-XS|%jx)y(j&}Wo|3!l7{o)HU3m7LYyhv*xF&tq z%IN7N;D4raue&&hm0xM=`qv`+TK@;_xAcGKuK(2|75~ar2Yw)geNLSmVxV@x89bQu zpViVKKnlkwjS&&c|-X6`~xdnh}Ps)Hs z4VbUL^{XNLf7_|Oi>tA%?SG5zax}esF*FH3d(JH^Gvr7Rp*n=t7frH!U;!y1gJB^i zY_M$KL_}mW&XKaDEi9K-wZR|q*L32&m+2n_8lq$xRznJ7p8}V>w+d@?uB!eS3#u<} zIaqi!b!w}a2;_BfUUhGMy#4dPx>)_>yZ`ai?Rk`}d0>~ce-PfY-b?Csd(28yX22L% zI7XI>OjIHYTk_@Xk;Gu^F52^Gn6E1&+?4MxDS2G_#PQ&yXPXP^<-p|2nLTb@AAQEY zI*UQ9Pmm{Kat}wuazpjSyXCdnrD&|C1c5DIb1TnzF}f4KIV6D)CJ!?&l&{T)e4U%3HTSYqsQ zo@zWB1o}ceQSV)<4G<)jM|@@YpL+XHuWsr5AYh^Q{K=wSV99D~4RRU52FufmMBMmd z_H}L#qe(}|I9ZyPRD6kT>Ivj&2Y?qVZq<4bG_co_DP`sE*_Xw8D;+7QR$Uq(rr+u> z8bHUWbV19i#)@@G4bCco@Xb<8u~wVDz9S`#k@ciJtlu@uP1U0X?yov8v9U3VOig2t zL9?n$P3=1U_Emi$#slR>N5wH-=J&T=EdUHA}_Z zZIl3nvMP*AZS9{cDqFanrA~S5BqxtNm9tlu;^`)3X&V4tMAkJ4gEIPl= zoV!Gyx0N{3DpD@)pv^iS*dl2FwANu;1;%EDl}JQ7MbxLMAp>)UwNwe{=V}O-5C*>F zu?Ny+F64jZn<+fKjF01}8h5H_3pey|;%bI;SFg$w8;IC<8l|3#Lz2;mNNik6sVTG3 z+Su^rIE#40C4a-587$U~%KedEEw1%r6wdvoMwpmlXH$xPnNQN#f%Z7|p)nC>WsuO= z4zyqapLS<8(UJ~Qi9d|dQijb_xhA2)v>la)<1md5s^R1N&PiuA$^k|A<+2C?OiHbj z>Bn$~t)>Y(Zb`8hW7q9xQ=s>Rv81V+UiuZJc<23HplI88isqRCId89fb`Kt|CxVIg znWcwprwXnotO>3s&Oypkte^9yJjlUVVxSe%_xlzmje|mYOVPH^vjA=?6xd0vaj0Oz zwJ4OJNiFdnHJX3rw&inskjryukl`*fRQ#SMod5J|KroJRsVXa5_$q7whSQ{gOi*s0 z1LeCy|JBWRsDPn7jCb4s(p|JZiZ8+*ExC@Vj)MF|*Vp{B(ziccSn`G1Br9bV(v!C2 z6#?eqpJBc9o@lJ#^p-`-=`4i&wFe>2)nlPK1p9yPFzJCzBQbpkcR>={YtamIw)3nt z(QEF;+)4`>8^_LU)_Q3 zC5_7lgi_6y>U%m)m@}Ku4C}=l^J=<<7c;99ec3p{aR+v=diuJR7uZi%aQv$oP?dn?@6Yu_+*^>T0ptf(oobdL;6)N-I!TO`zg^Xbv3#L0I~sn@WGk-^SmPh5>W+LB<+1PU}AKa?FCWF|qMNELOgdxR{ zbqE7@jVe+FklzdcD$!(A$&}}H*HQFTJ+AOrJYnhh}Yvta(B zQ_bW4Rr;R~&6PAKwgLWXS{Bnln(vUI+~g#kl{r+_zbngT`Y3`^Qf=!PxN4IYX#iW4 zucW7@LLJA9Zh3(rj~&SyN_pjO8H&)|(v%!BnMWySBJV=eSkB3YSTCyIeJ{i;(oc%_hk{$_l;v>nWSB)oVeg+blh=HB5JSlG_r7@P z3q;aFoZjD_qS@zygYqCn=;Zxjo!?NK!%J$ z52lOP`8G3feEj+HTp@Tnn9X~nG=;tS+z}u{mQX_J0kxtr)O30YD%oo)L@wy`jpQYM z@M>Me=95k1p*FW~rHiV1CIfVc{K8r|#Kt(ApkXKsDG$_>76UGNhHExFCw#Ky9*B-z zNq2ga*xax!HMf_|Vp-86r{;~YgQKqu7%szk8$hpvi_2I`OVbG1doP(`gn}=W<8%Gn z%81#&WjkH4GV;4u43EtSW>K_Ta3Zj!XF?;SO3V#q=<=>Tc^@?A`i;&`-cYj|;^ zEo#Jl5zSr~_V-4}y8pnufXLa80vZY4z2ko7fj>DR)#z=wWuS1$$W!L?(y}YC+yQ|G z@L&`2upy3f>~*IquAjkVNU>}c10(fq#HdbK$~Q3l6|=@-eBbo>B9(6xV`*)sae58*f zym~RRVx;xoCG3`JV`xo z!lFw)=t2Hy)e!IFs?0~7osWk(d%^wxq&>_XD4+U#y&-VF%4z?XH^i4w`TxpF{`XhZ z%G}iEzf!T(l>g;W9<~K+)$g!{UvhW{E0Lis(S^%I8OF&%kr!gJ&fMOpM=&=Aj@wuL zBX?*6i51Qb$uhkwkFYkaD_UDE+)rh1c;(&Y=B$3)J&iJfQSx!1NGgPtK!$c9OtJuu zX(pV$bfuJpRR|K(dp@^j}i&HeJOh@|7lWo8^$*o~Xqo z5Sb+!EtJ&e@6F+h&+_1ETbg7LfP5GZjvIUIN3ibCOldAv z)>YdO|NH$x7AC8dr=<2ekiY1%fN*r~e5h6Yaw<{XIErujKV~tiyrvV_DV0AzEknC- zR^xKM3i<1UkvqBj3C{wDvytOd+YtDSGu!gEMg+!&|8BQrT*|p)(dwQLEy+ zMtMzij3zo40)CA!BKZF~yWg?#lWhqD3@qR)gh~D{uZaJO;{OWV8XZ_)J@r3=)T|kt zUS1pXr6-`!Z}w2QR7nP%d?ecf90;K_7C3d!UZ`N(TZoWNN^Q~RjVhQG{Y<%E1PpV^4 z-m-K+$A~-+VDABs^Q@U*)YvhY4Znn2^w>732H?NRK(5QSS$V@D7yz2BVX4)f5A04~$WbxGOam22>t&uD)JB8-~yiQW6ik;FGblY_I>SvB_z2?PS z*Qm&qbKI{H1V@YGWzpx`!v)WeLT02};JJo*#f$a*FH?IIad-^(;9XC#YTWN6;Z6+S zm4O1KH=#V@FJw7Pha0!9Vb%ZIM$)a`VRMoiN&C|$YA3~ZC*8ayZRY^fyuP6$n%2IU z$#XceYZeqLTXw(m$_z|33I$B4k~NZO>pP6)H_}R{E$i%USGy{l{-jOE;%CloYPEU+ zRFxOn4;7lIOh!7abb23YKD+_-?O z0FP9otcAh+oSj;=f#$&*ExUHpd&e#bSF%#8*&ItcL2H$Sa)?pt0Xtf+t)z$_u^wZi z44oE}r4kIZGy3!Mc8q$B&6JqtnHZ>Znn!Zh@6rgIu|yU+zG8q`q9%B18|T|oN3zMq z`l&D;U!OL~%>vo&q0>Y==~zLiCZk4v%s_7!9DxQ~id1LLE93gf*gg&2$|hB#j8;?3 z5v4S;oM6rT{Y;I+#FdmNw z){d%tNM<<#GN%n9ox7B=3#;u7unZ~tLB_vRZ52a&2=IM)2VkXm=L+Iqq~uk#Dug|x z>S84e+A7EiOY5lj*!q?6HDkNh~0g;0Jy(al!ZHHDtur9T$y-~)94HelX1NHjXWIM7UAe}$?jiz z9?P4`I0JM=G5K{3_%2jPLC^_Mlw?-kYYgb7`qGa3@dn|^1fRMwiyM@Ch z;CB&o7&&?c5e>h`IM;Wnha0QKnEp=$hA8TJgR-07N~U5(>9vJzeoFsSRBkDq=x(YgEMpb=l4TDD`2 zwVJpWGTA_u7}?ecW7s6%rUs&NXD3+n;jB86`X?8(l3MBo6)PdakI6V6a}22{)8ilT zM~T*mU}__xSy|6XSrJ^%lDAR3Lft%+yxC|ZUvSO_nqMX!_ul3;R#*{~4DA=h$bP)%8Yv9X zyp><|e8=_ttI}ZAwOd#dlnSjck#6%273{E$kJuCGu=I@O)&6ID{nWF5@gLb16sj|&Sb~+du4e4O_%_o`Ix4NRrAsyr1_}MuP94s>de8cH-OUkVPk3+K z&jW)It9QiU-ti~AuJkL`XMca8Oh4$SyJ=`-5WU<{cIh+XVH#e4d&zive_UHC!pN>W z3TB;Mn5i)9Qn)#6@lo4QpI3jFYc0~+jS)4AFz8fVC;lD^+idw^S~Qhq>Tg(!3$yLD zzktzoFrU@6s4wwCMz}edpF5i5Q1IMmEJQHzp(LAt)pgN3&O!&d?3W@6U4)I^2V{;- z6A(?zd93hS*uQmnh4T)nHnE{wVhh(=MMD(h(P4+^p83Om6t<*cUW>l(qJzr%5vp@K zN27ka(L{JX=1~e2^)F^i=TYj&;<7jyUUR2Bek^A8+3Up*&Xwc{)1nRR5CT8vG>ExV zHnF3UqXJOAno_?bnhCX-&kwI~Ti8t4`n0%Up>!U`ZvK^w2+0Cs-b9%w%4`$+To|k= zKtgc&l}P`*8IS>8DOe?EB84^kx4BQp3<7P{Pq}&p%xF_81pg!l2|u=&I{AuUgmF5n zJQCTLv}%}xbFGYtKfbba{CBo)lWW%Z>i(_NvLhoQZ*5-@2l&x>e+I~0Nld3UI9tdL zRzu8}i;X!h8LHVvN?C+|M81e>Jr38%&*9LYQec9Ax>?NN+9(_>XSRv&6hlCYB`>Qm z1&ygi{Y()OU4@D_jd_-7vDILR{>o|7-k)Sjdxkjgvi{@S>6GqiF|o`*Otr;P)kLHN zZkpts;0zw_6;?f(@4S1FN=m!4^mv~W+lJA`&7RH%2$)49z0A+8@0BCHtj|yH--AEL z0tW6G%X-+J+5a{5*WKaM0QDznf;V?L5&uQw+yegDNDP`hA;0XPYc6e0;Xv6|i|^F2WB)Z$LR|HR4 zTQsRAby9(^Z@yATyOgcfQw7cKyr^3Tz7lc7+JEwwzA7)|2x+PtEb>nD(tpxJQm)Kn zW9K_*r!L%~N*vS8<5T=iv|o!zTe9k_2jC_j*7ik^M_ zaf%k{WX{-;0*`t`G!&`eW;gChVXnJ-Rn)To8vW-?>>a%QU1v`ZC=U)f8iA@%JG0mZ zDqH;~mgBnrCP~1II<=V9;EBL)J+xzCoiRBaeH&J6rL!{4zIY8tZka?_FBeQeNO3q6 zyG_alW54Ba&wQf{&F1v-r1R6ID)PTsqjIBc+5MHkcW5Fnvi~{-FjKe)t1bl}Y;z@< z=!%zvpRua>>t_x}^}z0<7MI!H2v6|XAyR9!t50q-A)xk0nflgF4*OQlCGK==4S|wc zRMsSscNhRzHMBU8TdcHN!q^I}x0iXJ%uehac|Zs_B$p@CnF)HeXPpB_Za}F{<@6-4 zl%kml@}kHQ(ypD8FsPJ2=14xXJE|b20RUIgs!2|R3>LUMGF6X*B_I|$`Qg=;zm7C z{mEDy9dTmPbued7mlO@phdmAmJ7p@GR1bjCkMw6*G7#4+`k>fk1czdJUB!e@Q(~6# zwo%@p@V5RL0ABU2LH7Asq^quDUho@H>eTZH9f*no9fY0T zD_-9px3e}A!>>kv5wk91%C9R1J_Nh!*&Kk$J3KNxC}c_@zlgpJZ+5L)Nw|^p=2ue}CJtm;uj*Iqr)K})kA$xtNUEvX;4!Px*^&9T_`IN{D z{6~QY=Nau6EzpvufB^hflc#XIsSq0Y9(nf$d~6ZwK}fal92)fr%T3=q{0mP-EyP_G z)UR5h@IX}3Qll2b0oCAcBF>b*@Etu*aTLPU<%C>KoOrk=x?pN!#f_Og-w+;xbFgjQ zXp`et%lDBBh~OcFnMKMUoox0YwBNy`N0q~bSPh@+enQ=4RUw1) zpovN`QoV>vZ#5LvC;cl|6jPr}O5tu!Ipoyib8iXqy}TeJ;4+_7r<1kV0v5?Kv>fYp zg>9L`;XwXa&W7-jf|9~uP2iyF5`5AJ`Q~p4eBU$MCC00`rcSF>`&0fbd^_eqR+}mK z4n*PMMa&FOcc)vTUR zlDUAn-mh`ahi_`f`=39JYTNVjsTa_Y3b1GOIi)6dY)D}xeshB0T8Eov5%UhWd1)u}kjEQ|LDo{tqKKrYIfVz~@dp!! zMOnah@vp)%_-jDTUG09l+;{CkDCH|Q{NqX*uHa1YxFShy*1+;J`gywKaz|2Q{lG8x zP?KBur`}r`!WLKXY_K;C8$EWG>jY3UIh{+BLv0=2)KH%P}6xE2kg)%(-uA6lC?u8}{K(#P*c zE9C8t*u%j2r_{;Rpe1A{9nNXU;b_N0vNgyK!EZVut~}+R2rcbsHilqsOviYh-pYX= zHw@53nlmwYI5W5KP>&`dBZe0Jn?nAdC^HY1wlR6$u^PbpB#AS&5L6zqrXN&7*N2Q` z+Rae1EwS)H=aVSIkr8Ek^1jy2iS2o7mqm~Mr&g5=jjt7VxwglQ^`h#Mx+x2v|9ZAwE$i_9918MjJxTMr?n!bZ6n$}y11u8I9COTU`Z$Fi z!AeAQLMw^gp_{+0QTEJrhL424pVDp%wpku~XRlD3iv{vQ!lAf!_jyqd_h}+Tr1XG| z`*FT*NbPqvHCUsYAkFnM`@l4u_QH&bszpUK#M~XLJt{%?00GXY?u_{gj3Hvs!=N(I z(=AuWPijyoU!r?aFTsa8pLB&cx}$*%;K$e*XqF{~*rA-qn)h^!(-;e}O#B$|S~c+U zN4vyOK0vmtx$5K!?g*+J@G1NmlEI=pyZXZ69tAv=@`t%ag_Hk{LP~OH9iE)I= zaJ69b4kuCkV0V zo(M0#>phpQ_)@j;h%m{-a*LGi(72TP)ws2w*@4|C-3+;=5DmC4s7Lp95%n%@Ko zfdr3-a7m*dys9iIci$A=4NPJ`HfJ;hujLgU)ZRuJI`n;Pw|yksu!#LQnJ#dJysgNb z@@qwR^wrk(jbq4H?d!lNyy72~Dnn87KxsgQ!)|*m(DRM+eC$wh7KnS-mho3|KE)7h zK3k;qZ;K1Lj6uEXLYUYi)1FN}F@-xJ z@@3Hb84sl|j{4$3J}aTY@cbX@pzB_qM~APljrjju6P0tY{C@ zpUCOz_NFmALMv1*blCcwUD3?U6tYs+N%cmJ98D%3)%)Xu^uvzF zS5O!sc#X6?EwsYkvPo6A%O8&y8sCCQH<%f2togVwW&{M;PR!a(ZT_A+jVAbf{@5kL zB@Z(hb$3U{T_}SKA_CoQVU-;j>2J=L#lZ~aQCFg-d<9rzs$_gO&d5N6eFSc z1ml8)P*FSi+k@!^M9nDWR5e@ATD8oxtDu=36Iv2!;dZzidIS(PCtEuXAtlBb1;H%Z zwnC^Ek*D)EX4#Q>R$$WA2sxC_t(!!6Tr?C#@{3}n{<^o;9id1RA&-Pig1e-2B1XpG zliNjgmd3c&%A}s>qf{_j#!Z`fu0xIwm4L0)OF=u(OEmp;bLCIaZX$&J_^Z%4Sq4GZ zPn6sV_#+6pJmDN_lx@1;Zw6Md_p0w9h6mHtzpuIEwNn>OnuRSC2=>fP^Hqgc)xu^4 z<3!s`cORHJh#?!nKI`Et7{3C27+EuH)Gw1f)aoP|B3y?fuVfvpYYmmukx0ya-)TQX zR{ggy5cNf4X|g)nl#jC9p>7|09_S7>1D2GTRBUTW zAkQ=JMRogZqG#v;^=11O6@rPPwvJkr{bW-Qg8`q8GoD#K`&Y+S#%&B>SGRL>;ZunM@49!}Uy zN|bBCJ%sO;@3wl0>0gbl3L@1^O60ONObz8ZI7nder>(udj-jt`;yj^nTQ$L9`OU9W zX4alF#$|GiR47%x@s&LV>2Sz2R6?;2R~5k6V>)nz!o_*1Y!$p>BC5&?hJg_MiE6UBy>RkVZj`9UWbRkN-Hk!S`=BS3t3uyX6)7SF#)71*}`~Ogz z1rap5H6~dhBJ83;q-Y<5V35C2&F^JI-it(=5D#v!fAi9p#UwV~2tZQI+W(Dv?1t9? zfh*xpxxO{-(VGB>!Q&0%^YW_F!@aZS#ucP|YaD#>wd1Fv&Z*SR&mc;asi}1G) z_H>`!akh-Zxq9#io(7%;a$)w+{QH)Y$?UK1Dt^4)up!Szcxnu}kn$0afcfJL#IL+S z5gF_Y30j;{lNrG6m~$Ay?)*V9fZuU@3=kd40=LhazjFrau>(Y>SJNtOz>8x_X-BlA zIpl{i>OarVGj1v(4?^1`R}aQB&WCRQzS~;7R{tDZG=HhgrW@B`W|#cdyj%YBky)P= zpxuOZkW>S6%q7U{VsB#G(^FMsH5QuGXhb(sY+!-R8Bmv6Sx3WzSW<1MPPN1!&PurYky(@`bP9tz z52}LH9Q?+FF5jR6-;|+GVdRA!qtd;}*-h&iIw3Tq3qF9sDIb1FFxGbo&fbG5n8$3F zyY&PWL{ys^dTO}oZ#@sIX^BKW*bon=;te9j5k+T%wJ zNJtoN1~YVj4~YRrlZl)b&kJqp+Z`DqT!la$x&&IxgOQw#yZd-nBP3!7FijBXD|IsU8Zl^ zc6?MKpJQ+7ka|tZQLfchD$PD|;K(9FiLE|eUZX#EZxhG!S-63C$jWX1Yd!6-Yxi-u zjULIr|0-Q%D9jz}IF~S%>0(jOqZ(Ln<$9PxiySr&2Oic7vb<8q=46)Ln%Z|<*z5&> z3f~Zw@m;vR(bESB<=Jqkxn(=#hQw42l(7)h`vMQQTttz9XW6^|^8EK7qhju4r_c*b zJIi`)MB$w@9epwdIfnEBR+?~);yd6C(LeMC& zn&&N*?-g&BBJcV;8&UoZi4Lmxcj16ojlxR~zMrf=O_^i1wGb9X-0@6_rpjPYemIin zmJb+;lHe;Yp=8G)Q(L1bzH*}I>}uAqhj4;g)PlvD9_e_ScR{Ipq|$8NvAvLD8MYr}xl=bU~)f%B3E>r3Bu9_t|ThF3C5~BdOve zEbk^r&r#PT&?^V1cb{72yEWH}TXEE}w>t!cY~rA+hNOTK8FAtIEoszp!qqptS&;r$ zaYV-NX96-h$6aR@1xz6_E0^N49mU)-v#bwtGJm)ibygzJ8!7|WIrcb`$XH~^!a#s& z{Db-0IOTFq#9!^j!n_F}#Z_nX{YzBK8XLPVmc&X`fT7!@$U-@2KM9soGbmOSAmqV z{nr$L^MBo_u^Joyf0E^=eo{Rt0{{e$IFA(#*kP@SQd6lWT2-#>` zP1)7_@IO!9lk>Zt?#CU?cuhiLF&)+XEM9B)cS(gvQT!X3`wL*{fArTS;Ak`J<84du zALKPz4}3nlG8Fo^MH0L|oK2-4xIY!~Oux~1sw!+It)&D3p;+N8AgqKI`ld6v71wy8I!eP0o~=RVcFQR2Gr(eP_JbSytoQ$Yt}l*4r@A8Me94y z8cTDWhqlq^qoAhbOzGBXv^Wa4vUz$(7B!mX`T=x_ueKRRDfg&Uc-e1+z4x$jyW_Pm zp?U;-R#xt^Z8Ev~`m`iL4*c#65Nn)q#=Y0l1AuD&+{|8-Gsij3LUZXpM0Bx0u7WWm zH|%yE@-#XEph2}-$-thl+S;__ciBxSSzHveP%~v}5I%u!z_l_KoW{KRx2=eB33umE zIYFtu^5=wGU`Jab8#}cnYry@9p5UE#U|VVvx_4l49JQ;jQdp(uw=$^A$EA$LM%vmE zvdEOaIcp5qX8wX{mYf0;#51~imYYPn4=k&#DsKTxo{_Mg*;S495?OBY?#gv=edYC* z^O@-sd-qa+U24xvcbL0@C7_6o!$`)sVr-jSJE4XQUQ$?L7}2(}Eixqv;L8AdJAVqc zq}RPgpnDb@E_;?6K58r3h4-!4rT4Ab#rLHLX?eMOfluJk=3i1@Gt1i#iA=O`M0@x! z(HtJP9BMHXEzuD93m|B&woj0g6T?f#^)>J>|I4C5?Gam>n9!8CT%~aT;=oco5d6U8 zMXl(=W;$ND_8+DD*?|5bJ!;8ebESXMUKBAf7YBwNVJibGaJ*(2G`F%wx)grqVPjudiaq^Kl&g$8A2 zWMxMr@_$c}d+;_B`#kUX-t|4VKH&_f^^EP0&=DPLW)H)UzBG%%Tra*5 z%$kyZe3I&S#gfie^z5)!twG={3Cuh)FdeA!Kj<-9** zvT*5%Tb`|QbE!iW-XcOuy39>D3oe6x{>&<#E$o8Ac|j)wq#kQzz|ATd=Z0K!p2$QE zPu?jL8Lb^y3_CQE{*}sTDe!2!dtlFjq&YLY@2#4>XS`}v#PLrpvc4*@q^O{mmnr5D zmyJq~t?8>FWU5vZdE(%4cuZuao0GNjp3~Dt*SLaxI#g_u>hu@k&9Ho*#CZP~lFJHj z(e!SYlLigyc?&5-YxlE{uuk$9b&l6d`uIlpg_z15dPo*iU&|Khx2*A5Fp;8iK_bdP z?T6|^7@lcx2j0T@x>X7|kuuBSB7<^zeY~R~4McconTxA2flHC0_jFxmSTv-~?zVT| zG_|yDqa9lkF*B6_{j=T>=M8r<0s;@z#h)3BQ4NLl@`Xr__o7;~M&dL3J8fP&zLfDfy z);ckcTev{@OUlZ`bCo(-3? z1u1xD`PKgSg?RqeVVsF<1SLF;XYA@Bsa&cY!I48ZJn1V<3d!?s=St?TLo zC0cNr`qD*M#s6f~X>SCNVkva^9A2ZP>CoJ9bvgXe_c}WdX-)pHM5m7O zrHt#g$F0AO+nGA;7dSJ?)|Mo~cf{z2L)Rz!`fpi73Zv)H=a5K)*$5sf_IZypi($P5 zsPwUc4~P-J1@^3C6-r9{V-u0Z&Sl7vNfmuMY4yy*cL>_)BmQF!8Om9Dej%cHxbIzA zhtV0d{=%cr?;bpBPjt@4w=#<>k5ee=TiWAXM2~tUGfm z$s&!Dm0R^V$}fOR*B^kGaipi~rx~A2cS0;t&khV1a4u38*XRUP~f za!rZMtay8bsLt6yFYl@>-y^31(*P!L^^s@mslZy(SMsv9bVoX`O#yBgEcjCmGpyc* zeH$Dw6vB5P*;jor+JOX@;6K#+xc)Z9B8M=x2a@Wx-{snPGpRmOC$zpsqW*JCh@M2Y z#K+M(>=#d^>Of9C`))h<=Bsy)6zaMJ&x-t%&+UcpLjV`jo4R2025 zXaG8EA!0lQa)|dx-@{O)qP6`$rhCkoQqZ`^SW8g-kOwrwsK8 z3ms*AIcyj}-1x&A&vSq{r=QMyp3CHdWH35!sad#!Sm>^|-|afB+Q;|Iq@LFgqIp#Z zD1%H+3I?6RGnk&IFo|u+E0dCxXz4yI^1i!QTu7uvIEH>i3rR{srcST`LIRwdV1P;W z+%AN1NIf@xxvVLiSX`8ILA8MzNqE&7>%jMzGt9wm78bo9<;h*W84i29^w!>V>{N+S zd`5Zmz^G;f=icvoOZfK5#1ctx*~UwD=ab4DGQXehQ!XYnak*dee%YN$_ZPL%KZuz$ zD;$PpT;HM^$KwtQm@7uvT`i6>Hae1CoRVM2)NL<2-k2PiX=eAx+-6j#JI?M}(tuBW zkF%jjLR)O`gI2fcPBxF^HeI|DWwQWHVR!;;{BXXHskxh8F@BMDn`oEi-NHt;CLymW z=KSv5)3dyzec0T5B*`g-MQ<;gz=nIWKUi9ko<|4I(-E0k$QncH>E4l z**1w&#={&zv4Tvhgz#c29`m|;lU-jmaXFMC11 z*dlXDMEOG>VoLMc>!rApwOu2prKSi*!w%`yzGmS+k(zm*CsLK*wv{S_0WX^8A-rKy zbk^Gf_92^7iB_uUF)EE+ET4d|X|>d&mdN?x@vxKAQk`O+r4Qdu>XGy(a(19g;=jU} zFX{O*_NG>!$@jh!U369Lnc+D~qch3uT+_Amyi}*k#LAAwh}k8IPK5a-WZ81ufD>l> z$4cF}GSz>ce`3FAic}6W4Z7m9KGO?(eWqi@L|5Hq0@L|&2flN1PVl}XgQ2q*_n2s3 zt5KtowNkTYB5b;SVuoXA@i5irXO)A&%7?V`1@HGCB&)Wgk+l|^XXChq;u(nyPB}b3 zY>m5jkxpZgi)zfbgv&ec4Zqdvm+D<?Im*mXweS9H+V>)zF#Zp3)bhl$PbISY{5=_z!8&*Jv~NYtI-g!>fDs zmvL5O^U%!^VaKA9gvKw|5?-jk>~%CVGvctKmP$kpnpfN{D8@X*Aazi$txfa%vd-|E z>kYmV66W!lNekJPom29LdZ%(I+ZLZYTXzTg*to~m?7vp%{V<~>H+2}PQ?PPAq`36R z<%wR8v6UkS>Wt#hzGk#44W<%9S=nBfB);6clKwnxY}T*w21Qc3_?IJ@4gYzC7s;WP zVQNI(M=S=JT#xsZy7G`cR(BP9*je0bfeN8JN5~zY(DDs0t{LpHOIbN);?T-69Pf3R zSNe*&p2%AwXHL>__g+xd4Hlc_vu<25H?(`nafS%)3UPP7_4;gk-9ckt8SJRTv5v0M z_Hww`qPudL?ajIR&X*;$y-`<)6dxx1U~5eGS13CB!lX;3w7n&lDDiArbAhSycd}+b zya_3p@A`$kQy;|NJZ~s44Hqo7Hwt}X86NK=(ey>lgWTtGL6k@Gy;PbO!M%1~Wcn2k zUFP|*5d>t-X*RU8g%>|(wwj*~#l4z^Aatf^DWd1Wj#Q*AY0D^V@sC`M zjJc6qXu0I7Y*2;;gGu!plAFzG=J;1%eIOdn zQA>J&e05UN*7I5@yRhK|lbBSfJ+5Uq;!&HV@xfPZrgD}kE*1DSq^=%{o%|LChhl#0 zlMb<^a6ixzpd{kNZr|3jTGeEzuo}-eLT-)Q$#b{!vKx8Tg}swCni>{#%vDY$Ww$84 zew3c9BBovqb}_&BRo#^!G(1Eg((BScRZ}C)Oz?y`T5wOrv);)b^4XR8 zhJo7+<^7)qB>I;46!GySzdneZ>n_E1oWZY;kf94#)s)kWjuJN1c+wbVoNQcmnv}{> zN0pF+Sl3E}UQ$}slSZeLJrwT>Sr}#V(dVaezCQl2|4LN`7L7v&siYR|r7M(*JYfR$ zst3=YaDw$FSc{g}KHO&QiKxuhEzF{f%RJLKe3p*7=oo`WNP)M(9X1zIQPP0XHhY3c znrP{$4#Ol$A0s|4S7Gx2L23dv*Gv2o;h((XVn+9+$qvm}s%zi6nI-_s6?mG! zj{DV;qesJb&owKeEK?=J>UcAlYckA7Sl+I&IN=yasrZOkejir*kE@SN`fk<8Fgx*$ zy&fE6?}G)d_N`){P~U@1jRVA|2*69)KSe_}!~?+`Yb{Y=O~_+@!j<&oVQQMnhoIRU zA0CyF1OFfkK44n*JD~!2!SCPM;PRSk%1XL=0&rz00wxPs&-_eapJy#$h!eqY%nS0{ z!aGg58JIJPF3_ci%n)QSVpa2H`vIe$RD43;#IRfDV&Ibit z+?>HW4{2wOfC6Fw)}4x}i1maDxcE1qi@BS*qcxD2gE@h3#4cgU*D-&3z7D|tVZWt= z-Cy2+*Cm@P4GN_TPUtaVyVesbVDazF@)j8VJ4>XZv!f%}&eO1SvIgr}4`A*3#vat< z_MoByL(qW6L7SFZ#|Gc1fFN)L2PxY+{B8tJp+pxRyz*87)vXR}*=&ahXjBlQKguuf zX6x<<6fQulE^C*KH8~W%ptpaC0l?b=_{~*U4?5Vt;dgM4t_{&UZ1C2j?b>b+5}{IF_CUyvz-@QZPMlJ)r_tS$9kH%RPv#2_nMb zRLj5;chJ72*U`Z@Dqt4$@_+k$%|8m(HqLG!qT4P^DdfvGf&){gKnGCX#H0!;W=AGP zbA&Z`-__a)VTS}kKFjWGk z%|>yE?t*EJ!qeQ%dPk$;xIQ+P0;()PCBDgjJm6Buj{f^awNoVx+9<|lg3%-$G(*f) zll6oOkN|yamn1uyl2*N-lnqRI1cvs_JxLTeahEK=THV$Sz*gQhKNb*p0fNoda#-&F zB-qJgW^g}!TtM|0bS2QZekW7_tKu%GcJ!4?lObt0z_$mZ4rbQ0o=^curCs3bJK6sq z9fu-aW-l#>z~ca(B;4yv;2RZ?tGYAU)^)Kz{L|4oPj zdOf_?de|#yS)p2v8-N||+XL=O*%3+y)oI(HbM)Ds?q8~HPzIP(vs*G`iddbWq}! z(2!VjP&{Z1w+%eUq^ '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +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 + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..f127cfd --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..a64cb07 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,17 @@ +rootProject.name = 'react-native-template-ws' + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); +useExpoModules() + +apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); +applyNativeModulesSettingsGradle(settings) + +include ':app' +includeBuild(new File(["node", "--print", "require.resolve('react-native-gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile()) + +if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { + include(":ReactAndroid") + project(":ReactAndroid").projectDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../ReactAndroid"); + include(":ReactAndroid:hermes-engine") + project(":ReactAndroid:hermes-engine").projectDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../ReactAndroid/hermes-engine"); +} From 451b0fe57e4d5976eebc8dfc89406ba7b20c3d30 Mon Sep 17 00:00:00 2001 From: Mac Date: Mon, 15 Apr 2024 20:53:07 +0530 Subject: [PATCH 3/6] feat: refactor file names --- .github/workflows/build.yml | 14 +++++++++++++- .../{AppNavigator.js => appNavigator.js} | 4 ++-- app/scenes/ExampleScreen/saga.js | 2 +- app/scenes/ExampleScreen/tests/saga.test.js | 2 +- app/scenes/RootScreen/index.js | 4 ++-- app/scenes/RootScreen/saga.js | 2 +- app/scenes/RootScreen/tests/saga.test.js | 10 +++++----- .../{NavigationService.js => navigationService.js} | 12 +++--------- app/services/{UserService.js => userService.js} | 0 .../{UserService.test.js => userService.test.js} | 2 +- index.js | 8 ++++++++ metro.config.js | 4 ++++ 12 files changed, 41 insertions(+), 23 deletions(-) rename app/navigators/{AppNavigator.js => appNavigator.js} (85%) rename app/services/{NavigationService.js => navigationService.js} (86%) rename app/services/{UserService.js => userService.js} (100%) rename app/services/{UserService.test.js => userService.test.js} (94%) create mode 100644 index.js create mode 100644 metro.config.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c8b7fe5..2fe1842 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,6 @@ name: react-native-template on: - pull_request_target: + pull_request: branches: [ master ] jobs: install-and-test: @@ -19,3 +19,15 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} threshold: 80 package-manager: yarn + - name: SonarQube Scan + uses: sonarsource/sonarqube-scan-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} + + - uses: sonarsource/sonarqube-quality-gate-action@master + timeout-minutes: 5 + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} diff --git a/app/navigators/AppNavigator.js b/app/navigators/appNavigator.js similarity index 85% rename from app/navigators/AppNavigator.js rename to app/navigators/appNavigator.js index d3baa1c..3ad9469 100644 --- a/app/navigators/AppNavigator.js +++ b/app/navigators/appNavigator.js @@ -3,7 +3,7 @@ import { createStackNavigator } from '@react-navigation/stack'; import SplashScreen from '@scenes/SplashScreen/'; import ExampleScreen from '@scenes/ExampleScreen'; import { NavigationContainer } from '@react-navigation/native'; -import NavigationService from '../services/NavigationService'; +import { setTopLevelNavigator } from '@services/navigationService'; const Stack = createStackNavigator(); /** * The root screen contains the application's navigation. @@ -12,7 +12,7 @@ const Stack = createStackNavigator(); */ export default function AppNavigator() { return ( - + diff --git a/app/scenes/ExampleScreen/saga.js b/app/scenes/ExampleScreen/saga.js index 618d25a..a0eefa1 100644 --- a/app/scenes/ExampleScreen/saga.js +++ b/app/scenes/ExampleScreen/saga.js @@ -1,6 +1,6 @@ import { put, call, takeLatest } from 'redux-saga/effects'; import { get } from 'lodash'; -import { getUser } from '@app/services/UserService'; +import { getUser } from '@app/services/userService'; import { exampleScreenActions, exampleScreenTypes } from './reducer'; /** diff --git a/app/scenes/ExampleScreen/tests/saga.test.js b/app/scenes/ExampleScreen/tests/saga.test.js index 5745a97..afb028f 100644 --- a/app/scenes/ExampleScreen/tests/saga.test.js +++ b/app/scenes/ExampleScreen/tests/saga.test.js @@ -5,7 +5,7 @@ /* eslint-disable redux-saga/yield-effects */ import { takeLatest, call, put } from 'redux-saga/effects'; -import { getUser } from 'app/services/UserService'; +import { getUser } from 'app/services/userService'; import { apiResponseGenerator } from 'app/utils/testUtils'; import exampleScreenSaga, { fetchUser } from '../saga'; import { exampleScreenTypes } from '../reducer'; diff --git a/app/scenes/RootScreen/index.js b/app/scenes/RootScreen/index.js index 1351e91..e27e26a 100644 --- a/app/scenes/RootScreen/index.js +++ b/app/scenes/RootScreen/index.js @@ -1,9 +1,9 @@ import { connect } from 'react-redux'; import { PropTypes } from 'prop-types'; -import AppNavigator from '@navigators/AppNavigator'; +import AppNavigator from '@navigators/appNavigator'; import Container from '@atoms/Container'; import React, { useEffect } from 'react'; -import { setRefForTopLevelNavigtor } from '@app/services/NavigationService'; +import { setRefForTopLevelNavigtor } from '@app/services/navigationService'; import { rootScreenActions } from './reducer'; const RootScreen = props => { diff --git a/app/scenes/RootScreen/saga.js b/app/scenes/RootScreen/saga.js index e9fa3e9..3df8651 100644 --- a/app/scenes/RootScreen/saga.js +++ b/app/scenes/RootScreen/saga.js @@ -1,5 +1,5 @@ import { takeLatest } from 'redux-saga/effects'; -import { navigateAndReset } from '@app/services/NavigationService'; +import { navigateAndReset } from '@app/services/navigationService'; import { rootScreenTypes } from './reducer'; /** diff --git a/app/scenes/RootScreen/tests/saga.test.js b/app/scenes/RootScreen/tests/saga.test.js index 0bed1dc..23143a1 100644 --- a/app/scenes/RootScreen/tests/saga.test.js +++ b/app/scenes/RootScreen/tests/saga.test.js @@ -5,7 +5,7 @@ /* eslint-disable redux-saga/yield-effects */ import { takeLatest } from 'redux-saga/effects'; -import NavigationService from 'app/services/NavigationService'; +import { setTopLevelNavigator } from 'app/services/navigationService'; import { timeout } from 'app/utils/testUtils'; import rootScreenSaga, { startup } from '../saga'; import { rootScreenTypes } from '../reducer'; @@ -25,17 +25,17 @@ describe('Tests for RootScreen sagas', () => { ); }); - it('should ensure that the navigation service is called after waiting for 1000ms', async () => { + it('should ensure that the navigation service is called after waiting for 1000ms11', async () => { const method = startup(); - NavigationService.navigateAndReset = submitSpy; + setTopLevelNavigator({ dispatch: submitSpy }); method.next(); - await timeout(1000); + await timeout(2000); expect(submitSpy).toHaveBeenCalled(); }); it('should ensure that the navigation service is called after waiting for 1000ms', async () => { const method = startup(); - NavigationService.navigateAndReset = submitSpy; + setTopLevelNavigator({ dispatch: submitSpy }); method.next(); await timeout(650); expect(submitSpy).not.toHaveBeenCalled(); diff --git a/app/services/NavigationService.js b/app/services/navigationService.js similarity index 86% rename from app/services/NavigationService.js rename to app/services/navigationService.js index 49c90a2..3bfe938 100644 --- a/app/services/NavigationService.js +++ b/app/services/navigationService.js @@ -11,7 +11,7 @@ let navigator; /** * This function is called when the RootScreen is created to set the navigator instance to use. */ -function setTopLevelNavigator(navigatorRef) { +export function setTopLevelNavigator(navigatorRef) { navigator = navigatorRef; } @@ -21,7 +21,7 @@ function setTopLevelNavigator(navigatorRef) { * @param routeName The name of the route to navigate to. Routes are defined in RootScreen using createStackNavigator() * @param params Route parameters. */ -function navigate(routeName, params) { +export function navigate(routeName, params) { navigator.dispatch( NavigationActions.navigate({ routeName, @@ -39,7 +39,7 @@ function navigate(routeName, params) { * @param routeName The name of the route to navigate to. Routes are defined in RootScreen using createStackNavigator() * @param params Route parameters. */ -function navigateAndReset(routeName, params) { +export function navigateAndReset(routeName, params) { navigator.dispatch( StackActions.replace({ routeName, @@ -47,9 +47,3 @@ function navigateAndReset(routeName, params) { }) ); } - -export default { - navigate, - navigateAndReset, - setTopLevelNavigator -}; diff --git a/app/services/UserService.js b/app/services/userService.js similarity index 100% rename from app/services/UserService.js rename to app/services/userService.js diff --git a/app/services/UserService.test.js b/app/services/userService.test.js similarity index 94% rename from app/services/UserService.test.js rename to app/services/userService.test.js index 53cbead..270b8a6 100644 --- a/app/services/UserService.test.js +++ b/app/services/userService.test.js @@ -1,6 +1,6 @@ import MockAdapter from 'axios-mock-adapter'; import { getApiClient } from 'app/utils/apiUtils'; -import { getUser } from './UserService'; +import { getUser } from './userService'; describe('UserService tests', () => { it('should make the api call to "/quotes?count=1"', async () => { diff --git a/index.js b/index.js new file mode 100644 index 0000000..1d6e981 --- /dev/null +++ b/index.js @@ -0,0 +1,8 @@ +import { registerRootComponent } from 'expo'; + +import App from './App'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); diff --git a/metro.config.js b/metro.config.js new file mode 100644 index 0000000..9430b0f --- /dev/null +++ b/metro.config.js @@ -0,0 +1,4 @@ +// Learn more https://docs.expo.io/guides/customizing-metro +const { getDefaultConfig } = require('expo/metro-config'); + +module.exports = getDefaultConfig(__dirname); From dd9d8144dd9e2b5cc5fcd0f8cee76e1271d0395a Mon Sep 17 00:00:00 2001 From: Mac Date: Tue, 16 Apr 2024 00:53:39 +0530 Subject: [PATCH 4/6] feat: uphrade coverage report action --- .github/workflows/build.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2fe1842..9925af8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,7 @@ jobs: install-and-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install npm dependencies run: | yarn @@ -14,11 +14,12 @@ jobs: run: | npm run lint - name: Test and generate coverage report - uses: artiomtr/jest-coverage-report-action@v2.0-rc.1 + uses: artiomtr/jest-coverage-report-action@v2.2.9 with: github-token: ${{ secrets.GITHUB_TOKEN }} threshold: 80 package-manager: yarn + skip-step: install - name: SonarQube Scan uses: sonarsource/sonarqube-scan-action@master env: From 85a4a9c5048526ae2563b93b69497692daa46ee0 Mon Sep 17 00:00:00 2001 From: Mac Date: Tue, 16 Apr 2024 00:57:47 +0530 Subject: [PATCH 5/6] feat: custom test-script --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9925af8..47c5caa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,6 +20,7 @@ jobs: threshold: 80 package-manager: yarn skip-step: install + test-script: yarn test - name: SonarQube Scan uses: sonarsource/sonarqube-scan-action@master env: From 21153ad08383f75da41357b4ac93eedb85533180 Mon Sep 17 00:00:00 2001 From: Mac Date: Tue, 16 Apr 2024 00:58:33 +0530 Subject: [PATCH 6/6] feat: exlcude android and ios files --- .github/workflows/build.yml | 2 ++ app/scenes/RootScreen/tests/saga.test.js | 2 +- sonar-project.properties | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47c5caa..8191128 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,7 @@ name: react-native-template on: + push: + branches: [ master ] pull_request: branches: [ master ] jobs: diff --git a/app/scenes/RootScreen/tests/saga.test.js b/app/scenes/RootScreen/tests/saga.test.js index 23143a1..b872d9d 100644 --- a/app/scenes/RootScreen/tests/saga.test.js +++ b/app/scenes/RootScreen/tests/saga.test.js @@ -25,7 +25,7 @@ describe('Tests for RootScreen sagas', () => { ); }); - it('should ensure that the navigation service is called after waiting for 1000ms11', async () => { + it('should ensure that the navigation service is called after waiting for 1000ms', async () => { const method = startup(); setTopLevelNavigator({ dispatch: submitSpy }); method.next(); diff --git a/sonar-project.properties b/sonar-project.properties index f32ce13..1b4bb43 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,8 @@ sonar.projectKey=wednesday-solutions_react-native-template_AY7hdnRSB2n8RRmGoU2M sonar.language=js -sonar.sources=. +sonar.sources=app sonar.tests=app +sonar.exclusions=**/android/**,**/ios/**,**/node_modules/** sonar.test.inclusions=**/*.test.js sonar.javascript.lcov.reportPaths=./coverage/lcov.info sonar.testExecutionReportPaths=./reports/test-report.xml