From 49ed84424178b1333b379b3581fadff95d953556 Mon Sep 17 00:00:00 2001 From: Prithpal Sooriya Date: Wed, 19 Nov 2025 13:29:43 +0000 Subject: [PATCH 01/13] feat: Open OS settings when push notifications are disabled (#22830) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** When the push notification toggle is tapped while OS-level notifications are turned off, the app now opens the system settings to allow the user to enable them. This change introduces a new `getPushPermission` function to check the current permission status and updates the `onToggle` handler in `PushNotificationToggle.hooks.tsx` to implement the new behavior. Additionally, the following unused files have been removed: - `app/util/notifications/settings/auth.ts` - `app/util/notifications/settings/firebase.ts` New unit tests have been added to cover the new functionality. ## **Changelog** CHANGELOG entry: feat: Open OS settings when push notifications are disabled ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-1344 ## **Manual testing steps** 0. Disable notifications for the app at an OS level 1. Open the app 2. Turn on notifications 3. Turn on push notifications: - should open OS app settings to turn this on. 4. Once notifications are enabled at the app settings, turn on/off push notifications. - should just using the previous flow (switch should turn on). ## **Screenshots/Recordings** ### **Before** ### **After** https://www.loom.com/share/000388a1f469425ea3d344b67bac4c29 https://www.loom.com/share/2f25a79ea61c44c0844469add9626b06 ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Opens system settings when push notifications are toggled but OS notifications are denied, via new permission check in NotificationService and updated toggle hook, with tests and minor cleanup. > > - **Notifications**: > - **Hook**: Update `usePushNotificationSettingsToggle` to call `getPushPermission`; if `denied`, invoke `NotificationService.openSystemSettings`, else toggle `usePushNotificationsToggle`. > - **Service**: Add `getPushPermission` and type `getAllPermissions` to return `{ permission }`; relax `hasPerimssion` to treat several statuses as `authorized`. > - **Tests**: > - Add/extend tests for `getPushPermission`, `openSystemSettings` navigation, and the toggle hook behavior. > - **Cleanup**: > - Remove unused `app/util/notifications/settings/auth.ts` and `firebase.ts`; update `settings/index.ts` exports. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7d8ff0312a5e82a773d5bd09ed0c24095fd096cc. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- .../PushNotificationToggle.hooks.test.tsx | 43 +++++++++++++++++-- .../PushNotificationToggle.hooks.tsx | 16 +++++-- .../services/NotificationService.test.ts | 24 ++++++++++- .../services/NotificationService.ts | 26 ++++++++--- app/util/notifications/settings/auth.ts | 3 -- app/util/notifications/settings/firebase.ts | 3 -- app/util/notifications/settings/index.ts | 2 - 7 files changed, 95 insertions(+), 22 deletions(-) delete mode 100644 app/util/notifications/settings/auth.ts delete mode 100644 app/util/notifications/settings/firebase.ts diff --git a/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.test.tsx b/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.test.tsx index a7ee574997ab..e145556f5642 100644 --- a/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.test.tsx +++ b/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.test.tsx @@ -1,12 +1,23 @@ import { renderHook, act } from '@testing-library/react-hooks'; // eslint-disable-next-line import/no-namespace import * as PushNotificationsHooks from '../../../../util/notifications/hooks/usePushNotifications'; +// eslint-disable-next-line import/no-namespace +import * as NotificationService from '../../../../util/notifications/services/NotificationService'; import { usePushNotificationSettingsToggle } from './PushNotificationToggle.hooks'; describe('usePushNotificationSettingsToggle', () => { + beforeEach(() => jest.resetAllMocks()); + const arrange = () => { const mockTogglePushNotification = jest.fn(); - + const mockGetPushPermission = jest.spyOn( + NotificationService, + 'getPushPermission', + ); + const mockOpenNotificationSettings = jest.spyOn( + NotificationService.default, + 'openSystemSettings', + ); jest .spyOn(PushNotificationsHooks, 'usePushNotificationsToggle') .mockReturnValue({ @@ -17,16 +28,40 @@ describe('usePushNotificationSettingsToggle', () => { const hook = renderHook(() => usePushNotificationSettingsToggle()); - return { hook, mockTogglePushNotification }; + return { + hook, + mockTogglePushNotification, + mockGetPushPermission, + mockOpenNotificationSettings, + }; }; it('toggles the push notification setting', async () => { - const { hook, mockTogglePushNotification } = arrange(); - + const { hook, mockTogglePushNotification, mockGetPushPermission } = + arrange(); + mockGetPushPermission.mockResolvedValue('authorized'); await act(async () => { hook.result.current.onToggle(); }); expect(mockTogglePushNotification).toHaveBeenCalled(); }); + + it('opens settings if permission is denied', async () => { + const { + hook, + mockGetPushPermission, + mockOpenNotificationSettings, + mockTogglePushNotification, + } = arrange(); + mockGetPushPermission.mockResolvedValue('denied'); + await act(async () => { + hook.result.current.onToggle(); + }); + + // Assert - opens settings + expect(mockOpenNotificationSettings).toHaveBeenCalled(); + // Assert - was not toggled as a user needs to complete settings action + expect(mockTogglePushNotification).not.toHaveBeenCalled(); + }); }); diff --git a/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.tsx b/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.tsx index 57d0ff49e31d..c550ddd74855 100644 --- a/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.tsx +++ b/app/components/Views/Settings/NotificationsSettings/PushNotificationToggle.hooks.tsx @@ -1,14 +1,22 @@ import { useCallback } from 'react'; +import NotificationService, { + getPushPermission, +} from '../../../../util/notifications/services/NotificationService'; import { usePushNotificationsToggle } from '../../../../util/notifications/hooks/usePushNotifications'; export function usePushNotificationSettingsToggle() { const { data, togglePushNotification, loading } = usePushNotificationsToggle({ nudgeEnablePush: true, }); - const onToggle = useCallback( - () => togglePushNotification(!data), - [data, togglePushNotification], - ); + const onToggle = useCallback(async () => { + const perm = await getPushPermission(); + if (perm === 'denied') { + await NotificationService.openSystemSettings(); + return; + } + + togglePushNotification(!data); + }, [data, togglePushNotification]); return { onToggle, value: data, diff --git a/app/util/notifications/services/NotificationService.test.ts b/app/util/notifications/services/NotificationService.test.ts index 59fa43323784..3902cd77a2d2 100644 --- a/app/util/notifications/services/NotificationService.test.ts +++ b/app/util/notifications/services/NotificationService.test.ts @@ -10,7 +10,7 @@ import { ChannelId, notificationChannels, } from '../../../util/notifications/androidChannels'; -import NotificationService from './NotificationService'; +import NotificationService, { getPushPermission } from './NotificationService'; import { store } from '../../../store'; jest.mock('@notifee/react-native', () => ({ @@ -124,6 +124,28 @@ describe('NotificationsService - getBlockedNotifications', () => { }); }); +describe('getPushPermission', () => { + const arrangeMocks = () => { + const mockGetAllPermissions = jest.spyOn( + NotificationService, + 'getAllPermissions', + ); + return { mockGetAllPermissions }; + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('returns the push permission from getAllPermissions', async () => { + const mocks = arrangeMocks(); + mocks.mockGetAllPermissions.mockResolvedValue({ permission: 'authorized' }); + expect(await getPushPermission()).toBe('authorized'); + mocks.mockGetAllPermissions.mockResolvedValue({ permission: 'denied' }); + expect(await getPushPermission()).toBe('denied'); + }); +}); + describe('NotificationService - getAllPermissions', () => { const arrangeMocks = () => { const mockCreateChannel = jest diff --git a/app/util/notifications/services/NotificationService.ts b/app/util/notifications/services/NotificationService.ts index 5a68af48ed6e..1a90ba791412 100644 --- a/app/util/notifications/services/NotificationService.ts +++ b/app/util/notifications/services/NotificationService.ts @@ -60,7 +60,9 @@ class NotificationsService { } } - async getAllPermissions(shouldOpenSettings = true) { + async getAllPermissions( + shouldOpenSettings = true, + ): Promise<{ permission: 'authorized' | 'denied' }> { const promises: Promise[] = notificationChannels.map( async (channel: AndroidChannel) => await withTimeout(this.createChannel(channel), 5000), @@ -174,10 +176,19 @@ class NotificationsService { async hasPerimssion() { const settings = await notifee.getNotificationSettings(); - return settings.authorizationStatus === AuthorizationStatus.AUTHORIZED || - settings.authorizationStatus === AuthorizationStatus.PROVISIONAL - ? ('authorized' as const) - : ('denied' as const); + // status where we can assume authorized + if ( + [ + AuthorizationStatus.NOT_DETERMINED, + AuthorizationStatus.AUTHORIZED, + AuthorizationStatus.PROVISIONAL, + ].includes(settings.authorizationStatus) + ) { + return 'authorized' as const; + } + + // Otherwise this settings has been denied + return 'denied' as const; } onForegroundEvent = ( @@ -311,3 +322,8 @@ export async function hasPushPermission() { const result = await NotificationService.getAllPermissions(false); return result.permission === 'authorized'; } + +export async function getPushPermission() { + const result = await NotificationService.getAllPermissions(false); + return result.permission; +} diff --git a/app/util/notifications/settings/auth.ts b/app/util/notifications/settings/auth.ts deleted file mode 100644 index b576e4cc6eca..000000000000 --- a/app/util/notifications/settings/auth.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function mmAuth() { - // TODO: This will be used to host all interactions with MM auth -} diff --git a/app/util/notifications/settings/firebase.ts b/app/util/notifications/settings/firebase.ts deleted file mode 100644 index e19382e0ea54..000000000000 --- a/app/util/notifications/settings/firebase.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function mmFirebase() { - // TODO: This will be used to host all interactions with MM storage -} diff --git a/app/util/notifications/settings/index.ts b/app/util/notifications/settings/index.ts index 5a27af866d02..85674ee7cdb7 100644 --- a/app/util/notifications/settings/index.ts +++ b/app/util/notifications/settings/index.ts @@ -1,3 +1 @@ -export * from './auth'; export * from './storage'; -export * from './firebase'; From e95cf72f697767327ef46cc36b3996ae1e3154ca Mon Sep 17 00:00:00 2001 From: cmd-ob Date: Wed, 19 Nov 2025 13:30:56 +0000 Subject: [PATCH 02/13] test: skip cash out test for open position in Predictions (#22935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** - Skip failing test in pipleine - Followup PR with a fix ## **Changelog** CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** ### **Before** ### **After** ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Skip the e2e test for cashing out an open Predictions position (Spurs vs. Pelicans) by marking it with `it.skip`. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 0c6b5fcb6bcc90b25d93a32483f3b333bcad8ae3. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- e2e/specs/predict/predict-cash-out.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/specs/predict/predict-cash-out.spec.ts b/e2e/specs/predict/predict-cash-out.spec.ts index 6e499432fa5d..271a8b139165 100644 --- a/e2e/specs/predict/predict-cash-out.spec.ts +++ b/e2e/specs/predict/predict-cash-out.spec.ts @@ -44,7 +44,7 @@ const PredictionMarketFeature = async (mockServer: Mockttp) => { }; describe(SmokePredictions('Predictions'), () => { - it('should cash out on open position: Spurs vs. Pelicans', async () => { + it.skip('should cash out on open position: Spurs vs. Pelicans', async () => { await withFixtures( { fixture: new FixtureBuilder().withPolygon().build(), From fa0c583ace1609b3d3ee5735e743e2cc6b5fd222 Mon Sep 17 00:00:00 2001 From: Salim TOUBAL Date: Wed, 19 Nov 2025 15:15:42 +0100 Subject: [PATCH 03/13] feat: cp-7.60.0 add new networks logo (#22929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** add new networks logo ## **Changelog** CHANGELOG entry: add new networks logo ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** ### **Before** ### **After** https://github.com/user-attachments/assets/b2344853-ddfe-4c71-9130-590173e25955 ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > No changes detected; the diff is empty. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e69081310ed9c7ae7efb56374ffd9854ec70a481. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- app/images/bitcoin-logo.png | Bin 1221 -> 7378 bytes app/images/bitcoin-testnet-logo.png | Bin 861 -> 7530 bytes app/images/megaeth-mainnet-logo.png | Bin 120718 -> 6107 bytes app/images/monad-mainnet-logo.png | Bin 32117 -> 12406 bytes app/images/sei.png | Bin 5721 -> 11121 bytes app/images/tron.png | Bin 103975 -> 9158 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/images/bitcoin-logo.png b/app/images/bitcoin-logo.png index af7e5ad593a855da2e0c145f072365d5093a65b7..76449f2261a7474358d6397d9e034ac92042f669 100644 GIT binary patch literal 7378 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μFm zN`8-l_J8WpR@3B|1X?v7dqdmr|8=YCKi0mmGJWIrogijbDPi%^?Z5AB{qKkUAGZBJ_R0Pq z_F_PkF%>a7A*?-9b>eLKtBY;`-{(tkGfvDu$|yQ6!=?&rO5Vjl{}E(rWMNpNkBIso DC=w@t literal 1221 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 Nr)31M(Xf5_e*hWvai#zO literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EaHVU|bmB6XFWwI_!5yJChcAH8l5j zE`*VEBPsc6XzazB`jJq6{a6UTjQe492nE3NCaTlT!F2;h$OR@16 zK-{>C(eW2!;w}N%F$o}UOahR5F$O4@a480;2E@G-3nW46fqEetfx3XQU<6SNR3Cpa z8fXZZ0W|@_29vQ!Y^WM!5umFQFU2KYiqE)`nt3HH>q>gg)y&+h+4N-?XBv%Th&ds8`|!)blh$0z1KbY!Ni%5rq6vmd*0(Y3!lti`gHNqr%RSS zU9#fYvQ^Jlu7199&GS`jpRZo`V(oemTDS4#hD|RwY#Hrh-|X7|cHg152T!~| ze(J-?b05!M{&eZe=gZeVU%meM+VwBjZ-2dg@7uix-|j#9{_yelN6&sdefjg{D-e41 z@%M*MzdwEX^X2E?pTGb8{`2q8-+zDq{r~s>|9?5-#an=p($mE;L_*T{AiHu?pa|Oo<<>X4)v1$1 zH*IhbN|J+E)~X3mX&yZgI$m0ZxvZlAE|_-f~EZU2r+{uWF-yV!nZnoH)TNmDMd zo_ySLMa;YF2j7Z!+ry?QhD=(-bm-s8@9F>Y_?wjHdf0Ou{C(`tzrC-U5|p%BvS!cs zYx?t`?a)LY-GJB+jK|`Ba5OdQOlY&e@mi`j)xM=js=?&A;yB?^IWp52wW|3zccr-$i%jqePIY%F7js>*mCte0RMns@ kOa5H?^=cB2?8-XE*r~<$Kik*s0EQTYr>mdKI;Vst0PZ!)00000 diff --git a/app/images/megaeth-mainnet-logo.png b/app/images/megaeth-mainnet-logo.png index 2abc2a3f9f4daac353c543871ff99a332041f529..d89c1d851469117b87eec6751f67589463297704 100644 GIT binary patch literal 6107 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

&0Txk>*in(I=_C+qVt&1v;kq_ErV#FkS4 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 UX6@N6b^-+LJl+P!#JW@e3FaK80{{R3 diff --git a/app/images/monad-mainnet-logo.png b/app/images/monad-mainnet-logo.png index 793ea61de97445038822b857691d086db5dc9ec9..acf969c4cc9c48c6451643a7349e46837954c026 100644 GIT binary patch literal 12406 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 C^}JjF literal 32117 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�hNMw1eVj%r&Vt_B0B`TZ=F8EYbxn?ADB?4Hs~v zbj3u2J#E3-AHDDp$6&&~i!=goT8BymFs&q4R`s?q^8WM3CidMhMGcKSn$_D<2-u9;tAP9 zCA0WUfc@+^hPolip>RxpHj3eqz!`~xLB~j(d*rex?kvV1L&Ha|&jk9&VUECpRF+w% z)%$PctPT`5WtAVCNuO`}IeHnkflz2@xunsLwoqMuY7u z%U0xI*<@Tv7nMLa=9ndV$z2|J} z{a&?+bB)>DZK2sB{Yry_K1w&Si(KZJY}yTkG3@@=GFfyL+(JS;F2*o^=9)0l;s5*p s|0fp(*5Kx*Vc@(eBls5e{4Q8nF8Yq5R`(w`9*d?Vr~bNH#_aw71LDZUOaK4? literal 5721 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 O08mrbQhKFe5%wR%`!T}+ diff --git a/app/images/tron.png b/app/images/tron.png index 8bd7214e36652b01acfc61cdf66b5439c77b4fa0..d06bbbfc6b14841408e9444ebc45d9c74d2452c9 100644 GIT binary patch literal 9158 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 literal 103975 zcmZU52UJsA6K=3z1@xjKNKrsQdPllSSBgl7P&5M4g-}CPDM}SkDWNFRL+>4I6zN1d zp<7%XQcFoHKj&?3r)AnLW909%`ykon<%+gTbiOR23h=V5fSZ zKc^|d-z47t?gjpJ=DDg75(Ya*3;m&hB_>@3e@XAEWaz5nWaaAd*u@g&;o-q=<7kIO zJbrG;@8n{QUX@{h!LGy96z}SKjx6KO^)LPg&zShlOoAw?POIi%m3BB9C+qK;jg?RI`x4dO)qE@k4Ym!XI*y6t7 zJZ8-fS>{SenT(j!E}?xJY((Z5!E^I)djLMr7>(GknLG3qrCa1dAMRPtn63Sg4CFJr z3$_XUW2H~M?~T-EX%$Mgtr4y>YWPqfp4_b@mE7(s(?WV4*?%y1I3D{g(y~zW=mVGz zXUM~O;e8Avc1;uqZ_(J4&flN#^ycq7#1UR;n4`Uk)^oY2PaemQ-VZ2lciX=cxu}X| zLsZ%LWy#`P`CCXc7AAj4O&0yA?0Upsx#7A6xioD;`!mncL>V^RLPcQIVjNQYa1@^Y z$}4C4H{%BnPZf%zmkr-D-s`Y*<7&bCinvbiY1Rz6R_u5uFQk;4W%^bRj`r{QN_Y+a zec3Y@p6M?I|B_6Xy)Ev)Heo9@zW@AVp82BW(%+@eafcNBl6~M)?3g5P9+z7DL{@(n zxxD6RhUt_O`uh%&E2~T-ZZZ7YoQH8``Tm+%y?6`B1UaL|?~;-A@M-yCjl-7E6ub45RjOD~`wH`u{G6d50iTOQg*gaH6~1 zO@7A_D@A?X!6|ImoH}~L^NOT?Y8;|wDtPm&tJiZxy;L;9_ja6(x#r^Ci4#ZfSbUmI zJE&sBPCIgA7N78A6Edf(^QdRd>Lo%B>Kkqzz0@?;{@6<;a!(HC$o^jVuTw73TUEu>M}j(%-~$uOlttnn zc{H5biv3KnmB1Ne$Cm1cB>uhHN`uuGkbEvwxvzu7=YnQ-S;jroO zcP$Q%kcV^e2j8hoH9E!D$ySVam^|{Cfa0G*zES9k#NP#C$t*JFvP^BoBdG{~59-IU zPJ&082>w%@E#Eb;k~qabTXN6|d@L@E(C?K)Dr2m0B6dO;1OCy^Fs&cO`MA>RSG@RZ z)GJ0{v9=JB9h2^Nk91}>+LL}{9`d!|!(5jAb*Ue>_5O{%IaTV>irIMn z8a3`=O6DV#t{6uy*5XdTS02fLXNqXF)H+PY<%YNn6)!*g`;`uFNd72NJr1}2uDOJ2 zZzt3I>fW=Ak<{tmDkJ|%$yAIaR#q3^(wGomkJLPpET}9Q2(%h>w76edLglj{?Q*1R z6J={LY2NYCeUbi%%u2C+A8eyd!#DG{?Z3YvPn$6I9(`@WTN3 zSl>PO{6)yXbKPv!>bow5mF?OW$!`P%y;B%ULXdbQ{<)d2n;C-C-nZq)uQ`!~G5tp> z8=kHWecBZPhBy7!^ImNL_97(wLmC993WatMt@K^o#MGLcB=ASp% zRa}pr4*UR5k$vTvn;Ka){rLa6I-Bg#bC2)P^YPC(TcR*ix24;&D&zXK1sd|hrim%A z^2wF27Ud|nGD&LYs|ETK%Xvp17B!9CiA#T9Ae!7>EY+K@zXn`*VPZ-B$i_w2p{LS@ zU@O?pjo*fq#`UV+E~hg@j*hV@$@#cx%)l=l4gVg(2wZ>SS-I5Fl8n#61LcwbcQ=G2 zhoeQU0*U7)w}7SCjq;Dc;tnJ!PyZ+~KSEDBmu-nZ zjn0$bwFrb1lr+vCUs`doI&wfmHi@2_ZMJSlYrO|Ml4=%bCW_2PVO!u15Mj_W>0Dgm>QfJ;~g9vSK!H{D{{HLe);eAgBFZhZl4!`RY_ z@ROq>Ir%n>6o9@N!!GMYSKE(Q^5vyloP1u6>Q+4x3sCG+myqmS^J{iB%wHep!SpYY z{63!}ONf6A!f)(EG`kI(K4uU~7&8~rE*_m~M*w`F(6v+{Cfzwt-^ssBpJi1a15%Un z4f3agmM*8!0BfHk!5hUMH|Q1#KW&La6S$PPh$C3Dc`pfiNDr^~ge z$dB`M_%TkdZ1-Z)y^QlyB4-R&SU~VREjv0O53cRq?b-N(n#JpCeekVkm8tXeNGqlJXTe5G)8?AiTXyU>j8%{+j&wdYMEI=I~4B3ALCj4PhX3)8sycxjqM> zYn@I`flc>pI9mY9kKKODuEz3kH$Dz2IlyTE3`pEp)*{R3D2HdVc*NcT$L3d#@+HIU z4F+v;_zKefezZ30NU0i=PAt?f)SNN=&#*>E-zJfBxmWCA47<&Dh^N$-7|U*XNK8j| zDw~sEQ7>o2dZ1_G*wqjVKY`Utq~3WG#~DAY2{DjOU|~B`vRA~2)rchl8BZ|%2&wl7 zw_ksql!L#8U=_O!o`lwnxw>1HlO7QtQhyS+J^J<=1gvjRYB8eHn0{fu=ZqR0FSCYC7&mR~0hiuzPdY98eaf`AX130zs z+t^F?JCNcnNsnVe$f~h`BawScCKq8B*&y*vFI$y}Z5-`4)nZbd0Iagc^?w?}Y|r&H z4s!hiyiU=yU(C{ z0+MgN4I>C>JOz?9%9b?dfwKT`T_w8DUJ$3xCr3lLHuY%bTzrbCGas<5n`}%N-T#J?>nqSg7K$!L{vX<&sl}ux ztUlSc2hRInmbXqP$9&O!$-qv@%u2N92X?hYOaZk%#(>i$kH+H&7sw74FdvN|F~@cQ zBcJOHf~RA_5`XPXru9t^`P*sQg>a&uc-3OcCP4rlv8;s&yLaRaz?%opoDlW`Pt&dQ z^rOgxbW|VXB<@1S;yE+^K7)96pg`Xy!4NwP4){U8f@EMrFF7j<8jQT@o(jx<^H>d> zgmXDcDh5$Lapb)gb8b9u)DP~10}wUsvXsKQ?p5^T%eBe*T9DSI@bD~cJG$P0!E$;VU@u778dF(sS6=VhG^{=gFR6#PqWsbotVibd+nTJK`z}~d;$7ASOIX3S;upKgqha#F#>ut zvln7`$ao#EU9Fm>;RDW0jcv&oyYt1C==zsj7?8QO;Bl9{#v%4BAOi4@Wqk}Cu^0$q zU1_`Vu0R!1!yWM=o3SZCnQzVygYS))Y@64CwzdW$&`U)WE_nwX z>FGcjQ5{n!DS1PXVq8s{K!$+hpck5?W)1z(XH=ne_-o#^yK(?^L9q>BQr3XX{GNxn z+?NjFF;u?|?Rj&sKNE?&vR*7V2AJIT8uBI?>be2r=i#^l=@Nv$$KSUI%tE>od8BS6 zw2+~vq`vvnW7j1ddCqaST$^SY?pXq-l^75DCkXxFr&W zfeG|RM>-?cM4bdStH$6==LFIy&H2iJiGR;RfgX_ap`C=*SS3GIFo1|U?SDn=tT+5U z1X+S&E~XQyh#FgAEg+*W5a2Gz^a~(oNK_j`!DPYeqTcwlPZN52$*p?ySc7^CP=bsI zGkC~@0;u8;#2tO(&Ro(O&VE7IyrAVrgZ^QVyude^7eoOg?YMc zrv7ZD)d8uYk@549t4r_qDdDc-{dwC zXsP>yXwXN%>tia9d`Jum9NxE}q;40IwJA}D){=V`=aSGh^FO9BZwsX>C|fmlrN=|t z#yK0HyWC8gKyL{|_(WrO|4r~l6Ju*Vs_={;w2rX{olCSPungdF%WGXX?A`m%fL8<+ z08evKcM=%}o(2MN?T9dljvZ@QyMGB?eNZy|8d>O*@G)ib?jPhp-4!WiVZf~8aN zFVK$dix@Ei!jfbqM0$UifOK;lfMI1-3FN6)qoKwWD(Vdvd5O0F4~#~jw+uf!5?`uu zl3&T<7fr@j1Vr^80B_bP2!OOmQHdnB#KR#i(yP~8Do^?(M1s6V=8kQ8Q0i(r)he{# z&<5>Q&A6&SY=02y{aNnwX%u#VhEhQc5EBseA&el#5lMdO8^1fIe^kZqGV#UKm30%i zEaWEVZiK9uAl0?v*`cM_Wgi$McFh_lFH{6Tg_>bQ%Vja}mS9{B->&*;XsHpeiPFM0wkr|sIuG~F3g3Val!v@)ovq0EU(^>)eWT_# zlsT=GYwrO|i_^;X-6PH=^}WIgUC&6yi6^bNC#_T@;kJ?%YX()pf^7H^i*Td=ox!eY z1hk+IPYaOWM~Nk` zxGURws2W4$=~uxBWYgkyq5aS{2AjKf2K#x=vHMp_2#9sI?qSgugr?#!@oEZYB8&UKC z7bP*#c+w|&OLV%YuO9+o!GCZfQSF2xwW~JKm_wPC*{HFq>5hRFknY{3LD#O!(YuRK zHfTyV7JgDlVa2diZfyUf2w~0b2ZR=RYM^-_IK|56v({OUS{sU#zHv!%%fkZ`{KT!y zB!9I<27Eg5mTwZhVI{F@-<)da69{!litd13QrVl!Y8r#1m!)ZCnKQ~t>!bZgZHY(? zi8=|giQ;PcCfi->t|2R=Zw9^XAakbfw+NCc?X4I}J^5sX1&z*)Tg!&4DGtN3($8;wsBlp#(t4il!Bu_p363Jlu&z{t_rOFko32lB5@GvYvt|F-DSN@gI z{sWN99PPS1yqutqzw+nVQ%poi15ihIKn$;mcjBorzJ4q{B%P+O6EF&pp^f4ycT1>KIc$i%vYZ*C^O_W6=nuP^&~r zVmTG&SpIM~y#0&f{31Ma+jH$mZ>oxbLM;%(fWCqH%!(a+Z(;1j{DZ*6A<8bR;-BPQ zAICdZECj-6#ww2nB+pd4nyJm}079Z2C?*a(OLs3?`&v|;+_Nf$Y%REmR@5WDocp?8 z({@g+yO*unz<=&5i@>+YS$MiEAj+dFk_gn;yaM^GioYO&b7^si5Gb`;@k5J`Nd!GX z)xSBb*4;>a>N|9C^A)24s0XsxG_pWqOJQ3>vVpZP=IgVBi-6#R3e&G35G>f74!+|z zHB?n=KL2!;3Aw-|nL1y^P~otof4-b2WMt63$aw!&>J2C!vLE2CZtjB^2Hy3M;SC7= zCRIm5V8-0PyQUo1*>O`E1d-~3H4g&3y||)Ly2bVo)M>2y`Q7ixUh;p@6`FnTi0{zq zd=l=V_+52zRb!>KX9m@`QIV5>Mja_8Fx$YkAQIjCL`=8oV?hdkRvAzj34tbyTX4~^ zDkIo)$`Yj}{6IDKY>fW!w4{Ea%L!Zn!sT=^dT6;~+P-pDJqta!dofj#tb04I>k)1` zI9CBT9db`q`Cst;^Ia-*{J8x;cl)?&hx4BnzqFKTSp*(ld)d17=6pVY9$#wcv|mD9 z=RAEal^SR3`!ozeVB}yv_Z;Wh^NV#P$9&`17EeUtI+w=tuX6W&0qn0fhAWfP zhlA`a{O*VjN9%L|Kb2P@s};c{9^Y%M7WC_w2}l>)`T)A+-+NuTBj-&Lx1S6GzAq&V zS8^S<)+L|yPYa23ydp?Ch2!XNzh%jqcT8x+#hcl&-szJ-V!E}Gnj@ENM9H_0E@ zbfK;YkRK(Kb?1}K9t74!l>1j1`^HA!2D>ixMq1`k%ocGOqxrPJ zAzr(38}k_#XdOMif`p2!i^PR|h}f;3O1?n|hYl=08GWmmBtrKmX23KdvQomDNza-9 zf7{pP$kPR|vs(e7=+VD}rx$ivl6vQ4{g7CM+!7hhoSaA*nQL9eq?hmy0_7*6MnG)i-A9Al5_A{? z)2asy+Ve;NiJzAkQzby2SjqjgY7~d#PICvqloMeL^J5McD<8lGnBIMBc8dtLKu|9R;? zg*CX#QyRgB-+jR53|3cmjzw&)4cDWXc_FfQ4;bOHy)*@TyAD5C(zuRv!Emy9rI=*f-&A2aEH**_Qa_vkGM*Y>d z09NIGawqm!l#{A6uQljEr*QXgP8ns&!QE_Ig?dRc)5=QfPA(LDHpgpY!U&fmEAp1$ zm)&_ix+|AckVY&^9I^nZwm~mJjcwt-tgAssh(Y`xZbm#7BW<|1 zJF1u}qo_@cKs|JxQ)cu{H@X2yUYf3!#j!$uvabB(-j&bKf&IN2cP`xPP(oFnL#SQz zr>#GTU?goz{Vpk35=yhqJ~O&c4>RJsH?e}uG5{+{a5X(_*qb^ z$5*1Mz+D{w%bO87mE}AVj9&ChUi^U>jz1peZB0}d@0&J6ksXjuA26@xB;dmuKpBP3+LrM&?v>KS^kto#2WfQsiJ z3tYFP?Q3U|MTm|Ia^VHsZt&Rb^~;Zr7r9=t!gt5sTIsMH89Z2@23b|YCj2P*IB<=^l5~+SJBFk3-!#%wl_ypQaE7k{y;c|? za7@$`OWtMzEx5kZHFAt5Dfs5ZmH5&E7D347L)mJF?w6CpwAEsl7U93l=bm-IQxM-O z9LOH`Fd-5oNcmZB0SI(li?5l>Awf5R9Iv0_C!-c=Og-->K3nPhap41Fbiyvu@wAde z^{|GEzDn(TMc@z90T9&nyw6uBH2*gXkcnggZH);ia4pJXcPvQ;{K7Xi?mBfmUUFBl zyz(2K)Yk>NcPejv$dl_fTa#W?5wG_@rWqj#2$dEwwMS74PqyC)xBns`?^N`(FU4HRj?LJrC z`a;voQ?2K_UAi10ej74!S+Q775}xmeErxRX(lTBIupkfBv+dI1O%$+zA4%cn`2FK_ zp)r}+OOgX2OvzK!-P0?M!Yd;DVXj3cO1}y?N@~NQeb=A#$=mX%We+N9gLWH#*tQ*i z@Js1a`eLr1DfK6pz+kbYK?OtGR3|UHa+JiP*B56cuq4|;@2U#gQVN0||Bl5GP!h-2 zzS$}{xIz~YlUXF+szxT@)lNF%j`$N`0K{>ata`*5LcCvBP;&aM706BgRi#2O(xsP)fDS)s56KU@e%pZRkR=Ri!h$p1 zD%{KN+@Gf>0IH}@D0&$kve7vkD;U&KGE6JBYhx~3yhH>QAtVL#QWHVxg%c4#kdiZ7 zn9x9b(U*Lahw0UGy9ta-PMwzf_f48WX4VnB#VjsC$KyYnrh&;-mzVMhE*QKwjW=)^ zs_4|dmig>_Z-KrOIZwE(kF`UYriBM&n*7qR&fA+Er|ba%J`IlG>ck08^@+uQ)iKLV zlJ*lLdpluf=OPM8jk8sI(UBv9KM|a0@b%c2F#%|Yhysngal+w zajTNrT(co~AlySJQ*Wz!MWCs6rM&(M!_xgg()-9UL51n?3mhTc~5`);l11ItZ+b7JB%b<^%*x#dfwEWbyr+jYk1}BMn8-O#pvtp|M1_= zROUkF`Tex}EVQKy<^`lD4e zzn7GX0kAG{Q*`c3Smm6{4jW_t3%#hIM!*>Z0CUe^aK_h9yaPgZl9Y!4fy>%oxB}O+873ssDvrR0L=Z zfKr)UC%e{2Hp~2b8w3zATCsOsj|k`hK7l+9E3U@46y-+oS&fw%~ap| z!3T(CW2CzDax1lcYkZDr{&)d1=++c!QTubbV~Y(Sr(O7I0pAIS`r#8$S#@SA-f!Y$ znEtTI>O$$|uOHy)ECiHIM-=^^V)v6dpQVeY5ZTYSO>ykj(bVodZ$>UF3CT_wLhRSg zeF~sCD3lVH#>h@4SkN}X>ihm2ZGKG#UPpg}Ui!8n)3O_O$T2Oo4RBmG8Nn@Qz0(hH zC+0!nmg3SxGD|hIr1b$l*f5!z4j+>PgpkEKc$SI0!%#I`{K2a* z>im){aG76Q(`~db)ak#rVkR9?oR!#(qm%x5Tu1WY?5Eb^Mrk_Y3s4t>6JV_$Ee6+3 zYM+OXHP9p65uH{YHs?Hnr_P>OeMHRR=Px5Ulq?;3^{1AD6nP;OuUPB`IMMP^ zph*s0fr8UqKX@}-LgJvKHvYycl(EAOWoS?*XCDfwm9ZuG% zebbG6l`O%yNmdP_L^ZopbD*AC!Bc|PhGtXntar`4ajj|(p42!%tmeTB*d5Rt)I~BN zqGrqvMHq=Mc9^gZ6C)07M(M9W_VMrAFb5X1D zsM^9@)R!7Lj|cr(vw(${|1y-Xv?NkRlA6ATZ`?D)>r?-*J$!yDUI+J+b^bWC&w6lg z7lLR9sq~iYGXfQ?$w#B$1CfX7pggz%xu079du`TmKVk6EwC{<#QYi{tjQcNwn0ABm zM{D~PRzR^Mrd^ra8mR~rGd7^BHGP{>4Y6e>kcwUZDfi|lj-Dr!CA)fWtt?l}h7+ei+Y~gUk`#dBmlY_{uT30l z@E&_u398RtaG8b`lQbTr5q&j)p`$HUW$-sq9MTnf31>Q`bjq^HQhX zYyZ6!|n`Ue%F|IdN`<2fnC4akF3TkB9Xh3n)fV-H(WETu(55_@?bm}WrPeoW1 zK#)_+DTSp?1#iX2QTQQ0`lO!bx!On<6NS2Q5JByw+} zmUZ|TGbj?#ljqUsFZ1T~fp+g@OD>w&&gP=-Zgw9WFDz^xGl9kvtxp6{F(LWgVv}&2 z{6Gu<>8`ub397`^ve>!HkK|EP0g>Urw+s&ht<)!Mn)3Aweie>?JhSDu*?p)~Sln!! zFdpl@@4pZZ6P$B?HdNyau~7|B?ONBYjsa_>i@7@pX69+R%a7RuSxdVSbwC>KyQN-z zk7C9^kCW5bQ`AtOL))y_K$SpAJANtYGK@n;oazSDWXYEVLyX|^$Z`AHJVf(DNje)|FJI3Gaue_GX0IR zt4m!WNw|QExMi5&EMf?PX+;R8F>gk!Et&~|$OOnO3~L|E?_}x#evw7^7%c&7x~C}@ zoMH9wj|63#F;Tz`OyoNJnJ>lZ^JF#>P<9>l`TNU~3b2l`D)$HAuAB;Ll6`CI-t4j? z9|5R3?Hc@{YeE|q*{5Kuf@`r6LcWz>iUx`zb_c_)g?)BX9QBF@;nNdcE2)sAFNP9- zEBJYPmO&xI{DXH$s53e+)c*w$6bzCG7*H8=tAv!3(csqa523ESB@7#|MYaFoXiyl2 zzuS8^2uG}1RlXDo)abedLy8|zeOhp@u`#&#gG`!L*W6d3E|^qJ5$Hz%wm+?b1b4L} zGHZxOIXS!Gex|v8 zt9}Rp*>WGby8~KN7f{ealnNSM#Td}{*b?>R#a?vd>BJ95wNNW!a|c}8C;^uWm|>H% z%W0_Wk=~FTI(8s5uM8chH*k$&RWRTN<{?_I!7NA|lyQkKMy07N%73PGf$I;%VcnH} z&QU8pM4>v(JZLv03&9qe*+8Shy`*$BtrRMQ9J3f9S)lC0FHCAHfO}0e+rdBnk68*tl%0!6RfgRwrJFc@RnP#mGM#Xmp@J1@)A}e8F_fR6Ow^q?nNEO+#c#Q1 z$Leo^Va;SonBnMEE0DrZYS+eOdmmVW+R63bJ?KWg+!5R!VsVCv;`OpT#$;fwTvp2md8ZYRJf8rw(fSs0KK zqhXrX7huieb7!PKAfvaSwv&Stm`jnQlU+@MXp@+G@iiSNfZX%w?}-AtKjWPK`TJXl z#H;g+rrI4pV>5C<+HnAkq1ZSiqH4P22O4G&y(I}Qtz+|VC5ETl*qD0)wv*Xp#s9cbnug56Eq*bb@AmHU-&B4Cl8 z4&-gwwUT54FLncDB+leghy~0AiGqA2N1i4JH<^%A%z4M~4IF-c@loG2T2pKAsq@g- z`G3u)>w8b2tod`bT*N6XY+H73T&m7Ktj#o#n9p0YYjLhtUvs90Ivot&>5D{3{lhxb zp(o#|U>(ze#tGnZ=tZjjKI1~k-g?fi4BcWo+P{)#oF$?<3k=@mh@6F$x-k{G?E;GE zj_Cqs;J5_SjXxKLv8;zcasNt&{^J3B)-p0Y?P04YJ6;8xi4!?2fKn#WDVp4KNS#z z#v(+MZKa&xpczxPAkl|*ejF{=`Mhp)ZZcsE#10#@JiA2?a#L;m(`R^(!zv>>?{R_aZpW_JU2us)x9Ajc4S>p(r*_*V zd)~@FU`^-8Eb`==VVZUe#as08A{+Dqxmvadz7w;u*b}7g>H?PMnG^x@^o4r;Av0hg zer{}s>6NwBfWO?>7S{6~h`NTFm@v{Qm!TRQ*Hu{j>KRPDU(2M1-B9zso%ORvTPHgk zH(5LV68G^3#&YJyk7~55B2KeQK%>)?h0S+X>!6ajX zjR!3#n=R6}I$hbP@6N&0rz3vU(C5L$EwH)hVhYDy%mAnw#-%l^27^h4oAhJLdBW3~P7nfY%RSx$Z7@+mx0 zY&YWffthB(WWL(~MF17^T2RqDP)S#URIH;hAE5+nomt^AYv}tTninQ0ORKJgO1PUi z(1VpEtR=T~`+!c5w7|0`QSw~vaZ;PGrW4HpZod8^)O&fLo8#brek3XG&<-m$O$#iP zvp7E@gpTHc2{Og12_=i&!QwHEZtn7%`?$`Dsl!cX+hg?-AVGJ@zywbszFr7*gd6@k z6&$rI`5pl3^kpF8j9z948nk;=FT>*ZzH3J}{Df)PE$s2i4_5m&JmO!PAjsJsBeznP zkHd7NG}UdacVAV)^+RgrT`Fo@zq@|BstgQl9~C7Nt*~${;TS9yef_NT2lR_J1f`Yn zx59ge8}|NN3IZ)8d6aj0eAcxyfdW}g4+a*J*;q^>dXA^FbtHV*}iXBzv?eGUw$7R$+i8PwH8*Kbuo1mDwFEmM0U zpA}&i)0~!ou!+I2i4`d+SnCT^6L=u!vtI#O>mIX1M+8nCT|t|2|p z*5e!Misu{=ijKYkD=Ll^6xyddE&#Fb{e9$aG8fcCh>WZ624Fa%X9bDKZ7u{n1{)0~ zMCNN*>KOoUNZ(lo(-t&BXHUSy9ZNFu8oqpdV7Ksy`bOuW77%nC0DnJUMdh~s!y+%P(9yFrLQM>S7cavZ71=qsBj_4N_ zw_08(yMi@1)jyyPn=BsKnFPrlN^FAxrC=V{x`{-^C<(fkg)W)LV9hd=k)ZjJCfDPd zN57rw*nBhUDjEp6wTu$c-(g_84YMH7vcJ-!q=Xxq+cn?0B= zdECHRe_-v}ZScFnPIw=_Ye-?u3$w^=Zhbsj;b>4=LLz~=Zl`8mYjldRJD~ZrhRd64 z$kPv$pTU}5bI5|Zh_+AVRO*;QlkBzoMh&7Z`22BijqFPB>%p5{#sFi@&4c+m<1L}P zU>5tabVA7@RegAj zd1cW=f+JDAW=iDa8QIY#PwBQMWbjiTXnb07+7U2-pW^_Ah1qyu7QV5U zEQt}6`k=!PM*kX%CeViUxn5K$>ykZB9n%II6L$A^lfJ+Ls#!cdYVS}PK;xd^2R5Ca z3qpu{fYdO`erP{Tt(T4(oZ((NVTSX?;AOMMM@wu~68j!i~C!abI(x|&^(k&Kli6WP|6 zE?!I+UB2(OiLPOXeZ)ls2lY;i>Gu8h?vP(mHWlhRyu$KawzVVp3%7mu;1okGJ*jJ@Ud%(zH8vpm9ol9=AuqLxH-k~ZXiGL)XWu_|~)So52FwRA1&HKk@;xkx)Z0#Ar9m*ui`y;+83n#f3RGf189M#-5=?8;5)*T43vSY_! zMWG^1D^8dehaB7S+Fb{tDM|+ziMru}u6R^WJusyBy1~Yw&Byc~5`l7`P^;-Fp=p|W zo>_K^R@-c-%|+etwG0Ldn3Wi<{n%|^Ltt-BmgjJk$-Z)ZF0fJuQqTCRtXbtT*x2TC zd3wBmZ#hr>~19N{Wj5 z(h{@#f4pjFVUx_1I}z8A)6ZYcscjwb5#|~(A8T{+x$C$NrB|Nkw}#7=K6g0iw$4$6 z1@L!IUlYe2RG==8H|(DNlZ-L~d%E1&rQ2+<2p-q6j9~tVN5qy%ZDn(%ovlHS7@uyL z3EmSP4DH~m&2+kb`3FP)X;@DzeHvHp;wat{3GY(#O8H}$JAD~t0z}O=TBmKoV5_J* z=BK0jMb+9Xd(1z*T>aFb{8{05W50o^fN-to+E&py*q!eA(5p16ZZhKA?k4_|4#ZJH z4RGdNSEtQ%-Ai_E46vqTnrXc~|3nU(=x$7kYby*?ftn)VA!MtCsREv++j#*}$K5;+JwI}(dF`El={ z67|YX*(yFvhdxpt2ziwvJ)oiWC9xr&xpFos5m{hnsHiyOh|ITqtIP!ZZclLZ>0$>5IW2sWXSEo2`R1U(?2q+%mAR6_hoi}Bq-gp% zHfBEx*d%r7{qR%i+MB;Ju%%x|v*bB+owE*%6cy*#=QB_nU!;z~CRr$Fxl=Mg>9k|Z z9V*71{UaiW+wTjJO{7CYN6atV_5^Iw(K;?I+tJ^o-d^**<(}c{&B9+=VXs^7Y}V@r ze+ED7YwCLl4>8AHSHtjzr+j>AjC*bSyK!RIR6)2l&`yUbN)K3dnJ6RT#dUi-rn+$K zL+)IC?S#Jf9{<{Zvj7trEmtl^Q_R%pN@!J%9)~G$i#xP-ejzfj5ATYu>ECr&DljZ{ z{nqBjF4Eow|7N1c27~R&P1u{IUimuxh+ZqcA>XV8i){3Im13f(h>Az+TsC{=aSF!K zQg!Im8C}-OcdL0{uSf2e8GTghfppD>r|vXglVUxRI&^(81_3PKJ>$IMuD`TKXsbGJ(``0D4u%y(`C&_0=T1c3s zZ!S81kxOd8_a4zRL-1fo^vdS?sT)C~Wr-Y{X$b{E7W zd{G|Wn06~hKWAD*ug7If)OaigKPOUfE8($wdal6gU2qw3vYn)|9IB8K#DhaZ*50^@Lk8&B7TmY z6Z}4^r!&E({R#K9Hny^#)7Oqkt6O&2jpTXpqS3JT&8g`eu4eZqu=tj{Wug9gKuop6 zZ>xZ_#?8h_el&uIwKWw_-FKdIi#tNuhVUdfbR$5w1%YI#<jlyFg8_ z2Rc>+nntcZ%cb)8ZlX*w=Fzre~<+oqN1t ztnqev-(;aPOSk8Kza_}#%`DH8+rn95ysR6pyb1;Wqd8aPLaIOwGsYnwaZk5AVk#7* z19@R3YYWhXAt4G2v*7Pi2ho(OBbGi@XN`-|5=)ORSJXB?ZQg;~Chq2fU(3w7i-(b| z%b6v*;%BnIoHW{T77&7jB^}(}JKROs+~cdf(`;h$ecYDFn6t(kB$*qBCKGs6Ed5+< ztnWQw*rruU2bV;1`Y32mQYmu#+CP@BvkKExOX^LXbXS1IhfEcQT0iqkS1Qm{>dpRm zxuCnoi$s_hA##+qN9u|TKvsQDha8=`RNTApHlwnCx*|yj*(LVi_3QJ((mM3!4%^2A zKGC2o_ijc+m3g0&ZFqDt|6YXtG~4gSZLb1J;K3U5JP$9~>4AaW}W^!kIMH z{{m_U9V@Fsl~&&#Qkn^N9`%u@Ip^%4txvjA*Q2`_y{s^kM@;fdiLvzaWxDnwA6Y42 zABnQ@&>5#PQuyqGBvtn-?*?mMi@LeEA;JSFL;c*%r!-i_xFKkDw-w{@Iio9LN7~dw zczS9*NmoG5PzjhtxXW9J`K@v%$hR1Ssg>$&Id7DD5xt^f`e@EHI%((>Oo8dw&p)&b z%r*(~`gbvg7^PyXZIiRLaBtynJ^~SmS=r!#410G9L0T~rZ<$Sc_w!HjSeUsD^Tmsc z@Ns#sjUQbnVG4{Lxqp;8BgS5`*DWPgd0VLJW@F;HY z&6&=tm%-0NM3QL2I+r%X|5VAar3eE42Z)j1KBWkN_1rlpo#Lug(=#wiG5gEYb#3OK zd!w&RC?1T=Jag6)eO1F0LEYy6s<4LAvROVYH6?LQjvM@HManJJ8s}=2)Q~T?e`zR3 zaz61f02@*NxO=yI_)owT7z*&7B^)ZomZE+!XA}E1qN&iCEsE9DmKD{4?>D$0rDWr8 zK=gX*J5HrZOK#C4HbGhO=`fk54LiduxD<4UW#F&aR{H8xPImsLR4sms|08c2B0Rm^ zYWL-VF7OzFVDmcgvjyNV%^2!%kG9kCkp_$vT-Ee}~DSGkRyuxxwy{RZ?Mk?}7zn5u{*<=D2?0 zbg>up&DtGo$$=SkK^>jPSy~4%K#!b@`l+ngax$&58LdgIOJaR0!Rf8-K-`%;x?(1vl=IsnD9V(6cuiPh#-kr;=auIkzcWD@Bh{b{ zM5U(r6raW0nhu7{Hg-!EXeT%qv=2@pA($%SEp-G%#`}$IvRaRFrx(3etHzgavf?z6 zq1`x&I}^cCxss1)*;Z0M+RNp?tnooS-k;l(AicBGvr00pjpE%b13w%p65d=Rml#;K zNsQ-eAMX4wniFlmkNSCFVn6JB?$Tc&GiX!aG|JATJJIJCqoh(p;pBi#Sv zOVq>Z*lUyxmpMzjSWgrM>rChF zF2hxu4JLw}tmJU4RN>dnP4NGj8O-b0vRU#}Vu(o12G|?0Iz~5IvX>h71~ z_m6{*CpUUJbGrlJ=Hl@$bCMU0QhcQQiJ$aMU<)LRhY>7^604?(bT-kYx(}mlWdn}` zb<_v*T_-^Sr=$HY7x>OXr#jO#h1Um3alOs~7Eco#Csr|CgI}}%&uJbWn5*yUY;^ZC zcskBxVM?1jTczCW()42GIJ{PPlcg7}mG#6&Ko96c@Ms>d^8>W}Ki27cPeXBQ{b_gm z@0yL%Jhx!3)l-FuaX^sec-l*n_$1wuPt9Ga7$=QLWpWsNv|9ZyH{xiDQ|%6Dqov#Q zY;MR5{5%80Ijq`EAY(p&@?c24o;LABb@e-TzQR5wWcRO|n}r>u2+4(;~`@4R9F((}Z+ z%wTbcT&MSM!3{Wz836kT*I> z^m=U$xal9G!4lW&))~DE6wolo5x01V9JxWW$uP^DV!xoH1%!BBj=>oH5 zy+p}(gy@Q`x$!+X<)Q|v&g}bONch60`|0g&WLI1#inSzUhmVI7=9=?KAXM0?htB3v zx{{-Y5c9`SR3qiyzO#$m{PofVe9j+^Smh6HwcvX&SCu=xn<$!Kl}J=A{1 z%C}jl+w*YX#d_M__SjV7hlH$1PA%ruM?luCQc_k2>^n<49Du(L zw@CC(L=XNSp1wPf>hF#JEulj4Erg6xDJe3uN%kJsUdi6sn^MS@?ONHcy^^hD-)ql| zo8;Q_;@W=a_WAvO|GSTKp7YGt^E&4pPlUI%FGJ;jLU>t+cYC@sVG@LTr1*{)y}q9htC&#U@Zg7QeP>)^_uKTRLCqnQ0@| z+BJuMkAL{6*>$mUoTyy#95$2B23%Gdg&I2y6)sM*w73~dr9dm15@u@GK@^z6cm5U* ze%kV&!H|gD)v&PrQ_K8A27#7!mEFPHns}2q(XIFL&d@01EBMsS<|~S=E}Cqb>m`M% zZO$dX8PCN#jwQ>6OK)D2xki4}DSo;#D`VX_Zayx+y#>Q*`VdBJv|*3GDW%M@yUAGluStBC=>L{0|ZR9dQFpi8}$w zJ+I891%x_01IKPd7SG8>cQUP{b2r|;WV8CcCh0I-pwiSZXMRxsI04m%H{%L6tP=>{ z19zEt!asFK7@Hh>Uz=wx=7LI&#Z^mC@ExyIO6#egB8pVx{*hL@=;Hyywc$_kD7m;g zam|O|_ogn}R<7N9C>8GHP*)bToSR?r7%imb!&&&p(e_pDY_#qUIh)n>@z89YxQn@I z1MG0D?|mwIeuN^h=&2?2$L(az&OW5!z2QoOKT;1NosIb{>rFWSygtvpD%{lxn0!~(>zuFwTEi9Sl81=tc#wCpA$0hwC z0+YOu5Yx8`bDkbnqQLRfnqo`BFs>WGCXeX8DKW^BIIFQOu;35aDT&*TDnm%*($wjF zP$kqDPBqQ+UWcBDy=qcexLc|of(A-zb{7sfX8x!bGi52m$QZ4GHz@`SZHmC~?(M24 z<@V*3KM338um6uUCv((Qw$JwoRfisor)y1ymNC88vq&#SIoD3P>LIv)HR4tK2qDbc z)KPN(Ui%qk^HG7852VxcB|9vjU?oP2mRAKP;nL#&!Ku~vX<8m*F3XWBfI3vcPC2_= zY%2X-*xFf9GWWPnKWu3EK{`d>O;=t#ArGnP$wV-#t3_aIoeK0S5ur1M>e zu9I~|STzioPn!WUyS$&f?J0&C08${Vfe`UM3ZS+ER_q_%@X!u((JW$0G^J)*GDcA< zi)(*uYVR`8G0U)lS0jmE1Sl&@7XNT}i4N`Ft9IXdn@J5N`YadzNl7KMPO&Uz_V*N_ zWr{5i-zp?ukv$jWMft&iqmfx{vWLCh+!r&Mqoh3gl9o8pWs(H8NhjQU_=FDpGP;m? zvm&1d<%g}^saurW-Ld`F^GBN4>jwH?bpruos9 zmv;DGqq?D(EY;gCx4henZi|LCuLM6c6xkRdfQqxaTr6m#ltJU@%W}`T?#P#I-0`a| z)aFcf7j%x8mwNt|hd9j}9t~x;I#PWj?ckzTU$k;bDNYqzVs$_#%L-}+yOxq4q%JA} zIrX5WiFTG|qpq72flQ1^VynD9biUNX^!7}5B0?MMhj#wt@du8DyDq{_;CzK3NGyLB z7VzV2oLc>EM;Y7PudQ)~qe|xLm7ym19Q&D3&lKC!)$KChD2|pZ50if1pSU-C|Pagf!n+) zYQPo;zaLfV{7c*}pd%DrI@O$@sH%p<*XDCWy(F9EHGt!E29$(-TXM5#&({o&E~Z_P zbx6NMQiT7%k}hw?gxPVc=;!63q3qLs(+aG%#SFyIuj`M^eS`8}f>!%nn(8NGDYsN5 zXT8yAq^s4Lpn!2w!s=!47SBMq8#ZDl$M}sh0EP~H#S-S#-02`I?m~8v#o{k9eD%+$ z;1k974o*8|UpzPFuPb6$=`DDqJ~AU?4lGmA@@G2cCP1kNhs3GG&N zRzUn9U6+O`_$3vmPWhES)F^m1UdtY9(72`45`1nzE*Ii#!^T&xoeust5{rK6X@^)? zw75HU*agMQH61+b*dj)+vrh?wlu0#Gr@9 z*siec-)HD41)btQ+cIs@KQ@~mjY)L;BBn%DIk2W` zDE0`3niz|BT?Q3A_FM;{3~s5l*FWndbmlmd!hQ%1WdeENwxlxEd3C;o9%exEMqkx+ zs_>J%hNJk@&(}qm_fmKm(fV${DnyVj=Gf2~Nn?|!7=p!K;hUl&0De5v?+!F(Jj?`h zIxyY)T}GS^>hdP*Ij{_^E`|^%G1$+l5-BOQ0=6bYL!f*77_bnm;#;^t*|mW_KP_D=!0US#vtyHG|j z9w2uaIf4M5m%-Etrdheiy;}rel~F*~$*s5W0D9W(x0_qYiKF+1Gyq#FS0J6o*Bqlsu69`wzzzeCnge)Rv_ao$K}f6W{#SSF zfsgB166#5QCikA>!**n5es1RVvO+gt>5A!+h{uxhA9Z1_UkLF6V>Vp(c2iCy1Xjfg5uZ8g+N@cC|4Q7|5k zUUZM|$uK?L$Lv`m?`H2MKtkeMcFOkfgxl_RhEpZ{8}d5HX&%P0EwT7xEYV zjz=B|?=YkQ#hY@t0x7f){b~~M*AHUeh&r@3$`8}oaYH!x_o`VBSF%=%rHAb_YXXmK zuNV8Pp~v-YT^5G@Y+jyl8#i##*t(9^CQjuBkX%RE6{utHHV!>}2ZSVLqDsLvO>Bj4 zv!4t~E@Zb9K%Dr%u;)KV7kRz^Y-7sXmsa(eyt(h+urWmtrp{Y;CeG8%vyN8(N>Dbk zK*V{bzU58N=W+#N+#SDkfoQIiP;0aDcx#|oXhr!)?U7h!9x&47jkMYuQ9UkadEP#> zqx3a*@6_z#G{PTVppPp89BG%&qFkIA7_5>mx3z(WZTz-u-xfiu98sl>Ele%K`R2v5 zTGrX)e50AfauhGyEhx}`mh>7&Z}WPjw>PbFs>jk4d&wV>uwD@uty8~3&d^%5N`dUb)l76T6!6p|4bQwTmZm7&VuKJmGQ z(h4A@wR$E8kN}}a5LW2b*t{FvCF_)G*bQ#oI_e*9G#EIvgNDBtr1d)00He%u!D>XD zEcx$az1@M570rbaLO893a?FKt-BDvVWSr5!4nxJdt3w!<7%==m(*Gd`D@ypdtpodM zM?88wsQIzHNODEhLEapD4Vb04B_?+{iFEZXhqeUWLSVV+k8jr+?~a7I@^( z)}FIo2q9O*snFT9G45BlR3(sh8({j-t8~gb`o$F_a{;Q3_t%IZlYFc?Lx3QzU}Aa5 z{Drl0Pqo&v6Y4A?Dc&rrUJ$^N;IUC8S``*7V|zJwpFU|}rx`}ct=}4EdY7WeQ8RqF z(${P^Fa$5@p$h=sU2|*59tp9c>9&SM#-E&_%mV90BRf^TwqN25Xopb^3|^6Kta}Pa zYf5~RxbGa|%MDuy!N+PX`)9j>m1GCvMShzMkh>XNCbnv?dO+ZdljGrx2Fc zEMbR+mtdG{33J!4l+E-&(#A7tVL10qX8kw5u^k<}!-fq=b{wNb-#!RxL<1Y&G8c)G zCMiH11-E`7#x(cx;xX(M>v&Za$kq=zRFnRElK^F|#dXl` zs#CS(;}Yj*EW`W%VY4nAV>7M^p!i!p|s+QM6FkgaMGu6DA9Nr(zVd-*QV-L&UuJ_2`$7-FYg zln@KtA%@jE(P!!Afl~>q+j>IWP&?C)UW_@PzjaDDR$LWvuc5BY>xrab5`5SHgcKjY znll{3OxJ6k((2#=2g#)@_laDtQyRQaM=!U&4k0#KMj529de%o8|9T*-LN(M=Ydq}slG;dHFa++0Iu@i2@@sUuj)1=aVwQqfiTuC2A1{$-wCS%iom=PD#vBZ^V7L5ahza=a5*b&KG(VP zIsZ458#AGAy-gznec(LbTQ|Suy=5wROO0Sv!MO|~w7<-;xy&x3%N?L=f4w%-)2GsICc)*d$rWfcCuCg5zoQ z{qu6RP~~#RI2D-Y{KhIwFmbD(!7CLU({B=sB;LkopM!h^*#opf&Q2T*w@Ei}K@H|k z4bRL1SrwZeZ@spK2|(?(zY{YYzD_B?4HD>c3&WgPALMZIDwpL{1 zTd{f`tH-gxqQOw^RfDPe!t(UoRuJ#SHexiu?nxkFF;Bh6pi18KJ> z3__dh>0V6Nfx=CUwtCqA(Np{?$sRGub#z7|PRcfwBA8MyBA+>>cSB5RM{zw{WQaR~ z?|2<|&{Kc&%+IBXhTyejWHJR@MhJ(zH~$R{Rl$o5jWpb%_i*o*Rzl3h9lvC(lhlY5 zo&lh4q;AiUo2!Xw2o0YIR8Jt}OzV95At*5_u69TPUN^W9U3|}*r;stNe7bt9%#|IT zerKuRB>{vndsYO`>=pSvc5Ff`>!1w6TS7C9ZJVd>*6Egeu&oSnGDUv&?ILF=c;p*w zhmgPk&KC{ zwhmYRtG>$zY7w^pL;T+Gj_(6JqiOb}=Go{GddIKq0qq>AHmZP?qoNS3aIm5j1)r|7 z-^O#ojA2rH&KuZ+5LfO3FV3rwi7d__?fnDEG+j`U&-OX1xEmrCm>Tjyw8nRcT8q$L z>+9k_j#HC)=KcNT7j&>!91|^hTNFk)QF;1TmvR9C0~}}861LOIRd#c$1<{%?e`jDO z?eA!bxe;rasZs{PMfI8jaWc0$n8&e^WT8=dBQvayHvH3*c`$0}XlMPkfpW5 zOSS9_ry0NFV2>bim8FP}Ln_KXf_|lBEJEsIO|Q($f2XSP>L-bAEPBUDEGiV;Mk{=68)V?ia1k1DT@Ju@P=r?b5uiy~x-faOP_C_sewspVMK zHfNqnKvc|%Way%kLS^ym2Oo>G_84OA#k=8Kok2DB11=GV)pOJOv_BT2&>; zY(zlgrvVbu*ADu-5Hz!MF6UX6bi+)%{!zkCEL-E7HAPTgw4$^PGPx?4hBy>JHUWw@ zj?|@%`Wmayx32gvtpw@a4Bv-i8xF7TKV?9YXjFPNvk^hb-_uk>Zn}uM!!tCAKXU`X zplJO%I;rr_l0gAi#lMaktjC|%0w&!4@Yz$WBkV>yy;e9tg87RaS4{8?O%Uuc098@M z32`T8I@WXPt$_GqVDhx8goDzTR!!eOq zj9VnR0Z2B+RL>{(hdi$5!RvX)=4`^8F92?Ae0LWuFJ?#~K zbLM};=Y(0T8)(iN63tEO!Nk@Q#t->f{fw%4t8fw#ph)$6nU|}RaJSY!STE`NdFc5R zzO78S1hGq^jXSlM7}u!%^2zRJDga($f=J9h=yP{c1ZZ^}+y#lDGpnD7!wEhIYaF#V z_Jl3;dwHxvX5%3#F9!pXs3=0LOr8MJ!yV(v9BWVhm1`4jsG{>uClP z2>L(={@1|kl=Ss52;pQY*av#sd)#MbVEzb>$q08CM`A9Pl^OreOuL^iLF6}Yant}Z zV1eFnjjNDps1HM<$qyMa(yh&WFmxD61TA)}0o8NpMf|u|W zf@d3+md9ef3Fy)&tUv4)(>}=&zea&=p9BKNtRg*vS zE3que#NQ{wAaj6NvW;u@seA}SX>nZd4)i`3Lr%EmH7t1=+NPdhZ08kLC5RKzYO|1Q z`3}Hj?1qQA_;c}Nou7B+LW{A#j;`AVx^jZq_-QKex4rd|jI;D(Nm^NVWkzDPDfUuF zFoYG%D0^n6b9EXRlOa7DjjyE4FR`=r5IT(e#vWg|>k%qG4$G^D(1c8$`RwQM^IT{d zKO*emt#1v;@5RV$%Kh}U_m%bQZu5V2Ap(?Cms-YlE<|5bgVbgfyN|es@iFhR(s7X zH1G>Bl-v0mqq-rLG5z8n1k2LxunrCT!Qp49$84eX#*#8QK`tU`_98LYF%4;!#p;mB z;F%|b@}6nn;r*LfA7hW>PXe_pl7jtbhH)Cyz&06f^DPWaCg+(uC<7mY{hTS!=}7D_ zpkS(bC`(fP#1j5y5DJ{%|K0JDZGnEzhbv|#b#9*KT*NjMAJwBd`msHU4sp+|hT znFq`&&8t<`OsV{z87tHkveK%G#)M^S%|gg;Jz=f(8i|Pl0lV#A*xt{sS>wmPA}01R zn~NpDFvWpkHgDFg{p;vfHq4kQ8vI4Z!YQ<-*!zxO*kn|lXc*Zj1b-d@;62!BwQWTz zre$Q|n|<%_CcWXsE2{4lbECEyv9=3zYeB9~%`L)D0f$naAkgSwigdnm#9!K&wY^(L zz4C2NuZ8YJ50@~TvA#BfgLYg`_wpEd+d5rI4|uEE%-SnA>e_oI20ggU-(TMbkC_>e zN=L`O^}sxj$BetQ1v7Mr<3M>|a8&so=gE{--i_7CoTPlAGh0lbJ>`sGfHTO5ZFBH&xm+{JMfRW3CrS*zrt2^`e&; zL^xq6{?RnDWya1GF!eKXBjki*5Mcq9l8K2&IJPUBd%@^O6r}|^K-y8Crrl(&IzeF6 z!LZV%_FTDT+`GTMJ$+Bu;4pnjI7alSK}chxCvdkzlYO(Gfk5Z16LGz~mQtb5;B#2E zx|CA^|9KNHi(x-tsGdJhxCXf*LZWs8S0bI8Q^{D2-#Rl@*E3aGOCsO{g%Y%?{fZrb zsKFLj`C+i8IcfHd{}~mA{dO3i#McDfqH7;r9nV_$E|#h_A47w&Ek~5~{Pp6|4+(p$ zqZll{;(WpdjYBQ~$v1F!tS87F1miJ##Ok38-)rjxF5j0#-$hC)!AW_gH_xQrWk8no z$X&&|j&-ZS$EC%Lzr@WcWDBBlfYk@MMevmJQmM*k#&H29&&UY#8&a2y~7fBJBLpm?uxMUR0NTguVqYE&i(ietehVOt?!9 zz_>-gwWp5JcuwMF?&icjvBq8DIuTr-EsU>OKU`*kb9 zC2!4liwf@-=)P+<^ytG-*84xJ36_?=>H5mq*Eh8{s+_V=U4A+~d*eEi*EQJfRYMAfzKBjt6KK8E zdp28#Ut~(!_(6NOR8d5<<`kK!U%!h{OFoC{1XqkfIzXB<`JgA0!b;J%zOKl_XOhFn z;hK~+4V5qYdG~0>DOarijc|c5pNRzrU8LX7BJanvvi*v8@8nj|jtVmTIMbl&S3?6~ z_`<5#4$K(Zo>K2xU=8WZ@O;ZAEh>q%eUI5aA@A}3tys9@d4*t)BCGcJsD0t|l~JD9 znQf#I+e8iHYj2_f6UmnT3+ePeacAI91$cq^ZxMf5E2rf9e0eDnY&9v@+vyBCwNFHI zUHRt?z0xUwt$yqCcfWfl&gWO(o)TB!dhZlQlqATwE=jrLM1hxsum>eDpgsk$2aMcW zAn{{r<dj9deI|k1QqD(eag^jz1vsMBFX-CVa1SsHhERAIdJd6_{TsJ zT@}?WzNy<}1cW)F)M!;IzR34|+1nM4A4go#T9vk_jG0*G*Ky2kKUy2*!GR+jT*#;{ zqfmgokTGUamcOJ9j#KZrYX23n^VYEvh)M`M=ohcF)boRM`l*nDBct3flRQTo!6XnxE&!@zc`1NbIlk$Td7D4DK zJ&WTD`L&0+NAcI*!*mMPFtqiUvdT?anQ9goN&&_O?X8No74I_ohl@%R$2jKOoT|de z`@YHCl8UokYagefl}^=oSRf46b}+_wZ$)pqIXud3)G84GfX$p>J!(ESBBMYCMwHOKh?Q&u%!X ziPZc>UV@TiyP{=XYIMvvwNxrHJfD^rrbMp^xK9;H2FD+!jhD5}n7ei}*1K-#?D)M= zVuN2;pkm+s9rab30I8?hHWaaK3NNfdj>YAqYf_f{f`ov>vyL;aIQ`e40!f7-WbPiC7xMVjti9}hJ%Le{tfn?U zoS5TVi*|jXov((yHFgbRSZ3(kUT)$y&K3ire5`r=s}RAo>kr%xYYl?xbVG74aFy+> ztOdJ;Hqb#6CE^cw>07=pE$_VvHNWJ-PW`#VS7JF!^mRmPDF}ZS0!tw@e?^X@{XUWX zKB+ZU+5Zy+<3&2FSQ~v_+o4{I-MipsMp>#?nyUdLvs6+Av^M%~Ww2Xc(z95^6^jb+ z>Rea8ppgT^=cs_pD)mxu|4ii1-p}ln*v2{P_`82uiYC9QnM;x!Bnh4?mi5q=C~yV( zisC7QV0|T55r0VRGlsbWO5U4j5!(6bAbtpp-(A^`UM?ueuaCAN3WP0_hiCUU&kOA_ zb7h4*r_tndwaU~z=IKrte?%+ZFAG3b;N3nBfr%OSYP>)qS}qbvUW^>xhZmsVR#D4& zxV#28LVz!6Rk0e(aET;pqVJv!pyE`tifopb{WT&f2HcJfZ4=1mM{@CK6O7P_qTRic z&yf!O^{sp(YdZ);S1cNWwd<+TrXruOFC7D3Pmva+^UkP(jwu%R3%f_p75I}#KewZ+Okj5@cer3NykBt zqz_nLV)2EoKigKN_8PYtbkzG-MgT@GG8KTY!TCK)4Tn#7j8*Q=sDR~7M5;V*(VpXR zsIrzXj_6cTml}Lm+XTkEyk0?Wa)N0ZcyI-1&Tsvs*Yo9^w&R$7H{_gpe&g7a!)u{a zvui-F9sCPrFnm)RgJ#?oGa-W)Vt0dNr_%m@xVOBYajSshyUsxF#lHd!9DtCcH^BMobmjYI{=lCPe%TlPK1^+n$t&^rg??u40>7F{|AbAEDZ%e& z-VGnOC-dkVj)_GeQ1qE&PLz6$qP0H@MOy2=TlFhQ&}eMkC}Zwi`UQIlQD0>eK~Yt?Z3CgPMyne z(po_u3 znmdkmF~iU1#fq4hcgd$Z&hop=^~-Zl93PjeRYFL^a%#X$<~V)t4;B{gD@l#zBIO>3)y1@WtDv70uBRn_ZS@VYN z?B{-rf;E6p0KBENpA5)=3e|TkK7+mQcyVjQF zU6Eb5%ZSrDX(D5uC}0zoff3>=wj!|xxaYR{dlxc$o=suI$+*t^umEd~c&*0^OohzL zL*8O^44-Xrc56wlr~fg+*{B2Oa7Os)5m{zUYaitNI^zPc7TPj40;JL>BE@Rm<+oG} zi`s29dD?{ed11a^$<_4yNzQ(0+UaUa4HihagUSLuQer&3Kky+Jki)4+#T|Xh8vJ7% zzXR;09@GYEV{LP@K99!p1kbS_d$_941SszE^ywUQV?jgfK zojO3tIxY=18WlTaB;qQI*B6H`cnbbb-7U1qT5JyCExL9wrN>6t-KsSNVSf#3?s(XJ z80NABJ6uD}ZqwHXJ61=@h2STG1E3)E9x+bX(cV3GD;6>EzSx*(II?7;)5$pLN3|xm z^w`=b_%C_DxZ8yJxSnrj^1ssuvNoUYZ9jrt7BRd4RmBL?<5KhCMV1l7H~Za#_hCd? z)gohiW_1;_El>Y%IoMXU83&L_5~LZF$$ch*dkA4FV~hS|{<@rpr@vH1rIGo zg*zTTdg}59KTwexTo5r?x&N61M92k!Cm)>xfW|Go3vX;D;R?7nhPVQmE-S0x!v$|e z6)v+&#r0YS*>9yikNj*MRiLinHo(toI?Q}S81LThe&_~Nk0wbq7}%=Im+Nu?(~Tiu z5-B)kFEM$*^_ycSJlr{@z_P0r*_gN;40vi9c|5B-?}e0mp1^q8ns_+fJkwDsdKh>M z0U_ZeNj`-}hy6Iuis!$PJ{4&j(mS86$;tbFNg}$(>FL0~5LPDpxS@`a!}v5ZW+p|c z=OD&l2b*ru^J6|<5W_QTdaX{)V3!G}D0)48%huqf_QN}MdCKl~bWpJnw+bVl-B*mC zRZ_E#xBuySZGDn=K7!cdYeA={xKVVAsYs$x0a<4E*}RSvAyN{n-f>}%jZ5^(y!M`8 zgXF)Vwa#?z!jUZC45(K^C7zC&xAynoNe4!>Kdw6CDaCZjXLAkyE=F;pmWGM`Vl!yp zhj^x)Rp1x?XMkE93HJJrMtX&~hIMrRbCiCN_b#Ai75x(wM}*F2-PkRM-5|41Hf$A0n2#IhU-|w#w+o>I zB?gE(FeZXe*-qM;GiSCwhVc$IpInzpz)j6!nx z3tMF?qTBB6|J!|k;YXiQ^wFBs5aK_AsVtaI0!cE_{8M zxvdQs3IM-};|JqHE1u6%4T^zmBv}(duL!$3M9DpVE{qy(1;^692r@*CuGy1>*`hGks?^CdM zQEkJjqO7huCVqj#93q>_X07a#7?(~M*GX=h#;Jd#nf#l(*ybJZ^WtL3!+wQ-KKTrKds0>t}VA@&hg|fSAZecYB;sAn5vWj$vFqmHhk6fg1F^Zkd4~afL z>rVi6d3G2valJOUkusB$n6Y%sW0QeMB_JNl`Wavu6bD8d0a`@g4Q72szvFsxNhm!0 zSYY84Aiw4U`aLe#{y>^m{J-{rmvh-qsNBV?`6Qp$*!%2Lz2JF?4e@Pxm;e2c@Oq23 z2ExQNg%zp3-`SuASb$8i97l_U7PvQD3AxNvgH8$;Bv!}T3pwlI8JS~k2J2`g7j)C6 zU(YX&=JOeOs*GZ=!{Ic|9S%E(;Z1loxCU?qV?U70Sn8g^t16iBFC^#$3arCkzTn&< zG_IkMzgXG;_wxW{n3q%g#1n9~0448$U}gU-wCadxjEwU`XRbrW>o;-kS0?~hE}QMW z7rhlt-QVT~?s4&z@1pztnztmzE+OTj)%l{k*DgLDh^?GaRyZ^fy7&!z3H5q<8gnM@ zoi?pbYh08{aEy*G(LJ^(L@DVtfAoLP_P%~bXmuqzZd_u;UzA_qn(EjkvL=2&qrj#H z1o^3WrwbZo;D^pbfj+<`5g3(q^5F&WVu@$E4e|0BDj1VFJ^JtVfQbXiFJ3S5Nj`>a zB_D@3eEGpd6G3f~B_hY5oYu1PrZp~OVEkW=L45em=ejxeXJ;?;z)5V~g?Yw`yz-7=D6%ukHzgo;d(+&%b~3&GmMgG{!+0PP zLHw=S=Q>L31swgmt9(-BcwzA z?*A?xf3+f^tk989j-bve5Rn0wPsqyl!Ollv5fZ1;hV*$;sf514PM?xUFBb+yZlBEskdHC=t_NmGs!ASFcic2FoML^z} zucI@e^w_063nP)c<+F9aT632KxWSVJVZ>I`6dz<3Yxm?&KJD?NeAK}eIod20a#?W4 z;GTb^lA@mZs4$F*pl<82+lwLo-dvJ;UW#&k7`u4E(x_Vzxb0xs134tO3KDm+4;op3ID4Mr3g#J%VU=6n))-$%VQbQ zA%}K&XGKAN)}jyjW9&_apS9+^4-{H|0+;|3Asjj^c_jY^!Z1?Kg}K)N!JJs=TUW>~ z2XA2b1e<~`k3X|=Nj4e_1``e-^7~l{BQOv6o&k;(UVm43M&$#%RXjMvGa%z&)LvW3rlkV#NnVZ z1aYsij_0y9&H3LK>G#5OCs2@~!wYZ%e~Ekwloa%4dB8QGqI5VsLa)zrderO*tv`b5YfPlbl zj|uE)hIjFtH@A~V3EWt%7OF78!Np>|*OYcY>gtD(nzjbyh7kuoPvb>wBmZ9a>QHPJ zO+@8razPObF>1G-sOPj8=u}R_oi_#$_n?quez%fTmpx^RD%Eq#mDH!OXV9Jg_wFaf zMFpF&PmsP3CoLXAfzLAqRuAM(qNZZ>kwf$(GRz1w=yu=7$Zh)fVTS0R+7b}PSr5tUHJ#BL7aN?Vh2flY=`lfa;)z_~xm;!L~dQ|OLq=K#aBbIYm893Ov| zps=A7p}2!B`Pt22oKsbVSA$E1QT}HF6YweY1ErT?hGH(o?;)g+M=wULD8wKynv2j; zj=yq1s}^#Ku`6F&&}eOX<-qCE%H;{=WD_utc;!wAbqfC|X${o)%Awu^acZ?oU0l5s zmd?a}%T^oc3EQ8MU+=gIzFwMxY-_Hx`P!MSQ|3%y5`c@_xT#UzWMssNEiX=|35S8U z4Kfo=B5MiN_!!;8XVG}B%Fh8Tl2f@|it0Qw(6sAga1w$Unsu-X_g`h%8dOLL*{EMh zwFjD?dC=FlOB3d`J?! zhxhtAm917@r*E-|DXV2_S0ONi1WEJB7Y08^!S?_fN6Q%Q1mxHdDDJ%9`%TK_m~<66 zvz04+L4jY3w}o!(Ci?s(=J~>Yh?qy(9Vnt*RV}2N=%!E$rAO4YOHPLZqoM-)@$~ze z7FBOHl3-5*i~3ga%6pgjnGkuZlgQEKeee#*$~SR;9A@5<+K!xpTVrXWeKJzI8D@&JxU3@Pp@KrL-wnsamXh&UjydKX~_=1U~q^#+}g=;c!6{R`2*54fPX zfXvCX4DY#(V^P-M9sEMyz?b@#QmRDShu$K`s|3WT*DPRM5c@3ijtf}P8G>6EV%K4$ zl42;vxOqRR?rB4`8ZBN*ZWA`5E_QcWb@AErwpj1i3FZdC3-kEAnD^rt+LIlf5`$u} z9&2jZ)X~sZmWau>G;?v9lz|@&Ybf-6Eh1Aq6?RkDXxc6>ZvQs_+B$(wsh{XDy0{87 zv^`5}nU6b+r{M3AwOEyEc~1f<@V<)QV7hwGeUAxtBamnST$U^vHFjUF1ZLTuBpPO# z(n}QMc5ppf!&0f-vUwc#DQuQH_TtCT&c{_*SrxZ)l`4>UbIi~)V0APTCEiyN=C%3T)2|4`b8XxJW2Q9xR@*32T5r_b52Hp4-IzDwDgDW62r`aJuje zn470wNh*Bb(Bh8|NhXPAJ=Dn}xyGdIw?gX8&5dI+RjUCSuVBWisg;Df9l9L#D$Z`a zpoeac4XS<&xFx*)m9+VYkm|AtkM5W#&pu$wH6wqP|3n02_Yzg)P6>>p-C1*r%s`eH z|0+u@t$dVN4Bm~rSHf+VSc~*{qmOllkwM`i?4uiTAFc~|8?uLGuwCN(+;nYTv}ns$ zeaoEjdTZ)7Spunv99OlSalH4Sa&t0mBa7AssU|mM@^+#FZtQM%hug?w5)npV@|@&j zwoamhV(WdUNqZXalWGvluW%PDH7}JOb6}?gXublQ%4x16)!#F=*rWpYa{xLL7>iVa zop49JFmJKN&W{E8KnY+?ypKjV0;pcBFUtTUkF`h)Aw>2cM6NX0YjOli^>>Z$7^FcQ zVM&{|Fja$BSap720eEq@OsC#P*XZw%i zS{}etmLAq&PIXG)upaP{W>Sv!y7kNCjh+hZ<7JvsKwj(W@u3cH(sBp#r;zE?c^X(1 zXLu9J#aAvO#mBZGDl;#Y0D8l1yzkwW?|U2;VUh2DkGgsdSSI`7CB<*5-4zR#GXZKu z1UglxY+7ZJZYL6F$wz-Je6-lZs1P*bOY6mOrJ~IBA&rzuv^*}B9)ED_n3As|Y>T4> z=Dghde-UP1QLS2r}J;Ve( zUwp|XfEI*YN{txSwkcCkip_T09n#?3Nb7FjRCj4MYO9FjM)iQ>|7@AU;Dzix=&M}K z%yK5U^Xu%_I%UhZA6L6u_A-LRRk=g^&T<{SRnSrs{sc(rp)V?=`* z^)oFVZi3<>xR)rOy%-b4bX3FGUE;wH+priT15e$ilun2~*FvG3GgBCu>R?oa;<%4+ zrnJT#sz>V;Cc|qCIbl$QdCS;FoJMAYTDb*Z;)ZUN3_ei-0aQ7M82yu&(SnvTZElu23elAk?{}a2 z^J#MRS|wZGw0t!V+g~Sy0n=`<_;wzoaoy z!d;eZnB=_4a?D%p&8dbGmEFG-mnhRwrMaLVyhOR`hIA*EkGEVm^v3G zIWN0;({o>(F7a`w5JLI>Wwz5k1qMysc5RAhYv040K`Dp1c@8_Vz4T$W-;R6<6e({q zUEI%~i)|@lr!2-u%`(L9-br6QTJWahb_dmdQjrA&wKTR2GL?j+QYJ6y`2$C|4TPMY zoyYe7c_V}CZ14|cyA&fem#{%wikiHo=3 z1lwjYP1#oJ$}O`cZHm!R*eX#7`Q*?~D`pmLa3V={nHk;$w`Qd8bE-W@MVuy0ew6`o za!QJ(3-W(8%Uzguk`^0B{ik^d$GJt-5jIac0KVDw?QWS(MnM?C??I+VY3#z2L-fPo zr4GtKJFfBxp=bML9Ls2Aw_^vFu)+Q%S~F0)r3wX0Y?*#-VWlqCE(V*t&V?h74!1Qj zcQ*;1`(N?F7rfu_?iFu8p8p=zIA~n>9{TH+(`ci_4#%y{BfA+^h;c*+n%mPvqbWKe zVq?Y0M?-g~i6^Rnt(%D2u5MuJ4Vx{lS}ZOG<@mukp*!-EN%Ifh2Qi#!gIzYxJP8|S zok&I(jQ?;fu=S|FM%?*W1w>PGmlnp3h*{b`r+i?dS=ff-aKDeCNA_U~IL>hz=ywd` z{XLC^CN<9r{olbMpjy?%pl6ocam$OyZjTOA6x$eSgke6&RR2_SvHmz=tdkwPK=+cWp99W3-LuTpk z%uiT~lKdpaER7n8r&)nvKIURMJ>9OJIKF}1pWOtX&eDk&*qJw~GP5wUcy>8Z^4bxG z@MX}f`xpM!lJ|HCN-nLV1J8y>QeqoTY0u+UiKOFiN>$#Q# z-MJYGJGq3n#48qEpa>hN=VrnEAFkdyE~>T*8{LS4k}66lVIT-1DP0ySQYsD%4-Ep3 zNJ$SvDFO6nzdJ6EAD;QM-GjlWvHY6 zzZ}9XmM5s~ty9G1&XPp9^Js-R_0hY;MoQnUyil-Ej^WQaUi|aMhLW9qf=;cU(4RiB z4txx#O0T+`wh6n|z0@Bfg1z4pSJt#!y=zt(k~I~VPUcQ}%t zr`n1JlM4@{WO_Y~*X{GsJ?sI$y}gnFdT%o(df$-G{!S6rJ} zeZt!JA-Ov#HK~nB)gnFP{0K|#u!t_X(pdf5l zT2bS-=Z!sc3-Sa12d12>=~yqe_eMK4<7_Dh&N`X3!jlxrb$zbc4l%q4LaxO_VR?#i zezQ2d6++=%BLnSWw@t2V(sAOkx@y9jhL3sFt8b>tbr^X>igdNJ?!B>wD{Zp9u2p3FL1 zn~#x6ZrcNd6}0?L&KKc19J6yH-Ibta;aV&FGG)UM2;Owd-lkPvTM?G_fO3kl#s$SN zK8u75Y=LahZZB52lC62UV!X@vi1jVjL|Kh+5_dfFZ4~^isJ*JD8DfG82!hYM)*tCO zi&?wExs8?|gSi$uDNe8UR#!`0tkVO}ubnV{2|A?%)O#AUf->(yN)~qx!F8x(V-FBc_T~)cZlJj!&^}GElEy8E!n6ZD( zG^0FTGR{woc&R2XE<*c@?aMWiDrw%U-#AZD+OKj`t|A;VoY9l6X~Qo65KN5Y4R)+h zj8Yx3Qr8R6IQutUL~dbyIxY;Xd0g^CFGktF_~4@|N!2T_NbcQ?96izK4ghM6l{31f zf@@_P(_1Yq3gjj-8G4E)!>p{BH60gsrk%Cw$n10`B%om)69Oexl=H33DD{Qt+N_|d zXJiduf3N*5VMGQx0#pl3j#Jw2wlwbmO)ia-Il+PAPQHV_5hbpJb1dOmd%j(=LhGM$ z%|ASWTI+9_=+IKuO8NqBeQb`0C^mqc->z6=jV)$-cml|5McyE?e0nXQL0M6k=Te&3 zDJCRiaajrle)srATdBI;0cmPaurK{7wS9nyjnuj?Tj(FAout=@qP9iB!s9e@S1lU; zd_um9WZMl+kok{GRu8(@qPs+d*4wM6UZPNBbSkMA60MBD?^ZW?9I>#`H%QWmuW`?D zO7FeG6v|@e>h6;pNbMo-6H*H8Ww$cB{Fb(Pi?!B^G(7fWwJ+-cuk-O`)fUN+V&aaF+h z&2L*kX{cSRtKQI3bPyN2ZHZPC#L^90HStC{V!W*eBDQSMdF{=yQr;twdOBhgT8XN% z0~hHc)LjeNeB=&vxEXs_`y_Vn&K8Ph=o;_fS^zf(ks#zT4vRSTEgg-A)`0`Uj`H`( z$>5!SZtq=I%`dy7m*Y`b4;c^xDzvdp*(mCy%?>`%(t=i}uPN$#HhR(rW3sxXO~WFc z?qv3JW;{cxHd;jM=1=XkaUT%4uI+PdalOcA53iq0wKD=O)I23h=vP~m_C)Eb-9l1i z?$2#|tA@Eg=H<^nKT+*JWb#?hZ>q-n@q*?fwT#uo)5wKx99Trq*rM*tZ^Y{3D~l9y z4Q$RQUB;MWnLY@XS>qc=SnJNj5h0r;D*=@-!_4iOrf+HSt~XuUA2T8D&XeK78D1u# z;rfO={rT&$7}sbmcJWD_bPv+1YO?ZT!m$(7ZNreNo}NVJ`}H4r%LY@o5Y`V;=0ram z@Zi|K%#9g#X(e(*F4YoquCH}G5hktrK1BSIlMyq1xA%tZ=Tg$DS7cR!Wq0**#u9hV zV@^W*Pj${XSO_1P5N|)`cV!{Ae7$ot@|S5Ku0(R;pc#rj#h+#dp#0}KW^QT?kalQ1 z|l!Y-u-C8xLZ)w@ZVDLoC@-$0;A0C>%k=Hfy>vfaK!s1L3nr5eGuo`u!&#cD?-c zjE4fV1{u=y{4A5n8lY!{IHq zak+LXLAx@Rg;}(Sx1e5FEBPBTN#3sqZzztq@9_?OO;f2*QsXCh-^ut5!gka(i`q$< zo4X`@kB3UG06NZdX6mc!GY>u}xZ zsg^X%cJSjq;!Y|pM!_e)XI@AQ@x-)+f}y3|;=T*yv~Ft^vJIVS&vG;{wLN!2aug6=p8=L=jy z5&gc_m{N^npZYItj$C72FqZrtksI#|xfWt5y}mNo6MJ}HWzapu>a)j-v-T%w?3dHA zXF`EFk7wrE!?J1%;p1e)e3v^-+xO0n1?*@)?#wma*ID2<9F`W-RR^;iZ9DoxT>|Jd z{1lAgOh!f?dG~Rb$vOUvHC?DkC|6a29aX`<@m0P5h_Ok)=?Rd@b?E&vDDx$Wc z8No*`R|}{}nINT2@`9-h6P4`6K!bd+n9xi?Yma?qD)aF*{DF;^+QB&PvTQ_xdQyv9 z5_i4ydSSZDgA(P66t##nhwphV2~hug3=%T6nVNGhuC)lEvNszP5VKcEC#g!fKF#Ng zv3a+wC%Q9-Ifb-v+IX9gE(Nl!x}Tu?)jhk;HM3px_&vYEoRxXZjI=WJ00vhEAp*o` z`6lws09t3Lhzh5qwcqU=Wdk#aFj-VWfC`HcZ}52(4~o3srzjXZC;kOhxOFX@$vi z8#r#Js_}vQXPP&Rh&HMpb`F9p6?9UDgV|~S%{~}=at4`{bXFfVy#0n{SPNeS%(eOI zUVFmk@=Z$LYltbsKA$`8wT$q8+KVsZBAw)#dhbJJyfws^8T}0mshFSkXFumdI2y2Y zQ-<-o=W)r{*wgz@z_3Rrt$HGyW-W?qcFlAcd=nqn(e+2SDY{L?X4ycCJNLQkO*rks z;ZTWJ!Nn0OAIY{e>Nt9|5KVr)?k}-*S{pPUH zNqmjyUCb+Tc`%z1-b`;iUFgiA$bhK+Zx;afgnrFeWKVi{Hp)0UFM4cUc&M<7 z)^2X;(0oGc6!wrThn-2H2P4xVB@#B8oJ*6<;+l|ZYVjMc9x^oSm3m@8db9ggCB+gw zhpiU{!n1Zn>z6Nv=(JVi=itVx-Wa(SnjI@PfttoFi5Ge4T~aC$G*=XM+=B z-;=f6o)w9pdj`8s#G^t$4a}dgBz|7{4VS%RDpmP%9kn6@axi zdTi3rks>_bTN_4Hb8mYNI;VmM$!TARd1tpNgsW9#OVmBtzdpo`d$)am5cZ2$EUc~z z_V2@+qy@d=A_$s*RrQY2EiSM{T|)E{EFPvq-=l_Rk;$1u30%lP_V^1C4W4Hyu0mn@ z9^9-i30G_DS4)Q{whdEg354}ylzL6p%@7~h8CIxPb#G`RRW;Z1%I_BCd^%8o|398r zVj36gv}kVa%~S%-e8T5Hfl}_+K&LvjZf2piwrXD0P%1@7HER3NjXu>Wos)ZuSu2uj zaBU;QkC1#08U$NZSKw-zB}&0)@AzrKR1)qjyNiPelsbe@-qrV7RH_hcrD}ePOUzQ!m`2J02B&hvj-_>C7N7B~xX6w6u`fEcMPE)GyZJW#&Bca_@Ej> z?7b5AnM}jU!#)}<_ZB}Opxvk2+Cz&@26426+JX?Hu;xfrn!B|(l`75;{{TzyW-Y{_Jj?e ziA5o5QuDjB7dn(gkQ_%*WudfQSA`KMY*OY@F<|aTx1@Vmo_d~tc52~vtPif7A!Bka zi^X`>;fb;I<13^JAr}v&leW=y@GA+fNp-n{@l>Z^u^;fQX^cexOY2qZVV&H|GMm|5657c-eSX)PRXKC1@$30(yBf4z|T} zZz8u3=L$iuD6MPG47nw4wtTGU%a?-`}-==BKksfe10~PV^X#Pl>=XG*EW@WP)8a4@IIUBX~b`(-fWQv zL-L(>|4`_z0K5eges#8BBz?+sUG?AGWj z&0J%bUl|t7(_Xlyg54#hs@zfv-E zbIYk&q=#tR?KL|YP2U_Ekb|@x;tyh;Qy^h~?qyl%@V@O?5PILr0dg`7nld6zW4$b! zIgQ~y_Uw&29UC`|Ciq`2~SE##hNEYh?bJ^(jdr3zy2tybAKJ&*A8)(p;e zrJWk)@Dp>3=A)@F_~?V^DGHXO5pBwMf-ZlLXHe0msk8Hiw(JFffqM&)X_g=AN;DdM zXLJ;}oVZFwsQmfg8tpXXnzgBX`^&QTid~*Jz=6h?T9pCenK_~(rg06ioGy*iOb0(4pvU>54UWLaEgKOLIp$V6^UvA_N2fX}$9UaLjHg*+qqksldu2Dho2K#hljd&#xy2fN8lA8fhdlLvQjItIhtxe+;~86-{`Hui z#^Fb|5dM@cokA6Pmu(J>I>o(NJq94%EO(*CZS;DEd zaE&bf79oAHX) zIXuxim=!jDl>S9$^+%F({*<{C0_|K~v&Fh}7mpT$iUP}r-7kM64#8Bac93-6qJ_Yc z_FLzIuz(D)+0`L*=}`u|ymifPM0VMcDlFf+rvv3R`@ZBS-3_QQ?08Q%KOqcVDuh~u zb&41nO<8++|&Mr$l} zHaE{daSEy5zgK{bi&{6j?aM-+pUuL<3<~(cPBe)M_NKjL#AxGkr;^IVpFkyj7=yM- zfBrpQwUNm;Z>hc&YU&SO&C8dU64^L@91$NF2O%G2Knq?pa4{LVY9Cn54(f*Jwrn1& zFjpw=IhnEV(Qy!#y@ls*HjGF&o*S7adH1%~4eJ`NJ>fB=<&E|=<%6U?N*Z>_d}lv_ z6c21dJ>C{udhxs1u-yE5Ed*L?&1Icp5vXOy8HLu%J;+5Bh^HSy7@Ha%x2&Qn7lyh$ z>B6L}=ot+7OOQ#@)+nt3Q=5X$my`!V>{APtQM@D<3Zws|<6;p*(H&aof&>g2Y$|5f z#y9gD&#SjnS^s%3mqK;EL)M{iSXyXRb7p(+!k*RgR@I^83?M8+>Zn4KeJGljTd;$psbdJo9c2MZt46`Um*SP&!~lqdA$bQ92s<( zSb*)O<@Y>tGfVUrW;2A}Ftu*ZU@#L*ON&^ETVFO-P7zSqpkdwT8M>2Vmp@Z^5bH{4 z=~$=Ey?Rbwbb+?{Fc@n6q5hXoIP}QPHqqZkj_+<7He4L3Lq!xv(ii+h_P|Tgu%4D; zxacP>1r*v^+e;NaOJO=Zw^(VLHcFvoh=P&gqzcj2=go>4NWccQgRJoCdCzl_n@pg< zNCL^lfrjpXBZ?X7Qnsp(rFlnA=0er56DxSflBw<&8Fm)GvA4)wIk=`0#4djC_h=tu z&94-7B;w8azk+4=igNpTS0^8%{OAU-RVWr}X9*Z)KM-oXOl!$%p&PM}x8K$lyaTB3 zW|%QuXtPmfpEtW3hg$0rwF5t9l)GC(KIj>Z2tn}Ik*Xw^EAP>*yR4{Gy{y=O4{~~k z&D0IFSSe@{HlAn6HFL|V{Z?r~MeYOtZL~dNztB<*f}SiL%0@KxnWi zymjlg|9_JY)UP493jiP%O2^L=_av0@zehX+?l?OR`C@j+Dn*S;#2oBPyskBdw)&b1 z0m$Xu8&vjfL#;ICu57$5^R4*S2&eY++MTn#eP2Ub|UHoIt;HIzAzS%yTmj< zD>Y)rTI14wFwD7|6_J3B%z3`lZ|N69dsIG1b<+RFC)rMRDufOftlN@w@8G(A1C6WE z@|G&*C=$GSvb@5rWNRnS&#;0fYk2>}PI*Q1`u+9;Lie73#3;_^aFOrf`(M&u56SV= zDkwG}{Ed_d#xc3dkP|HiP9lmuT0a5eJMC8f5Qkfhb1mXm%83@l%vHC_t|c#xiZf3L zGLIy#ch#=++IisPs=Eu@hsP{~;vX*BLMW71F1Hl9PFj`3N73Ta)LxuA|3~&S$nHBi z8M?-`G{MX{YSUdy;8NHBFnoe2DVVlr1xY06;pIkYv}R!!|G<}@rD5bl=KdVZ|G7r< zD4S%_i{&F;s3M&sa?FPByeVJtXWGG4k{WM||Bz*p>I}W-8)%t-f8IoWizQ1Ecwl{9 z*pMgP_>>yy$b0+qh00mi`Dsg70gM=7N-$Ms8@kXW8N}>a3U}N3tZD=>R4+bPFJ`C( zr|(^p>lRY#L-@6QDVq(tv@RX(t+woAAw}q9I73=LbtwHQG-8$KO&?~O_Y0HIUNlk9 z_7`g9;>r-Ihdry`qpw$Y%36ixAZ&W(<6;}nBPlO`B>?z1+WQNRZXprN;t42L*zrZF zcrAn*3h!KaZj(bkQAct3^2JA8d0P{!@6sTu#f;FSD_rgU<@N;9C3SvH6b4P+!GMVV>nLBXIj8>X)SXFPN43^a511n+91?XQM-`kWP6n;RkwCiu!5aL$KE*h zGrfPQB4D8x;a3v6(-X0MV6k;SD0U!ndpfdXBgeUw8!esW1uwe|Qk;Y@_&)wb!A9pd zpM#(5!=90b$e?;dsB=M8m27~WT;5tohXKFGskrW8efYAG<(5h|3xXN4h@xc(wR+m;v8y9pw z!ll&XN1a>%YkygXF~8f(BvV(FM|oqstKKLRHNE=FM|8R>9@7MkyE4zW@cK+_t=j&_ zMnf0n^Osbx6C}vITlF(5oxuw{M>(b{Dfd)R2U@tZYV^|a_ZKPlMwg*e&Fh|qgQeuU zr(iIJ+IJ80Iz@&g;!et!^mKIaNH9yAcX96)Kf*sDbho$Ss!@${VV5INl}>|LMrSis;g?|@& ze`om_^_*;8r#gJoMr9qgxoyV`F~t3jZa`X}`te8h{hmWo{~RMh405f_o8AzOE;n+) zhF#Pb4~9U7rye}A$A1K5BO-{Z`d|13Jnin{J zGPjiw~QytC+z15NizbeBijv&qsDW9X2Y70w^pck=% zPC0F7eRqa2S&&ZTgM63Jk!=1yq{wtZk90>2k793Q$zC?3lVxcexh^SAqwnU>ynEyL z*er@o?BAt+!1bED`{3`5$vInp^zIctBt^tp>K2!|5}IgS?Q+}Pk0Q^c)L}7}>v9Db zr~IV(PRflrucf({!-JS13xAA_|6u?f$Kq5ow>hye@8zkw?cn%M&j^BO8v4U7`Enft z-IPx3LUyQZa5xjLD}@%Wm7Xm5X#aY+Ft6ESbM7tz3>E(%lyGbr(A=gU{xJd4(yF} zL~~d=)OZK{%pY;+lC9>2*=He;9&xw1$D|XpVi4YfJ}4hV`NF1gX(o|fhuM@n+1Gi`M{OfHMe@3SCD8FQk zD3Kdjh-d(B%QY3H)vXEo^dBaE{!ZX~R~Lm*Q$vtX+CQ^uG~e(`I-=W_AhH(A#ed_% z1;_2hA0AStU4fUwuBm*DI)X6n-L}t`#+=NLhJ{Pe$54KQA~6E%l`(PkP-tc38{Z|Q z2DvF9#glqN z1Sgb>4_{K@&sr`G1A8I$62WO94X}yDurHz6Tk`duf6*o_!O|ada5sY;h-eh?_6Hxm zA?aGbmki8WZPNaN)g!H9`2v*H@kE>vPc1IjjPOuav>r-P4|D%_7$V-)lKBzHulUl`tc#N6kJP%o7b=~Lw_NyKSj}g#LtFIS@b>gRx+*PC^dH>c|Ns; z^Ap!lfqKmaGtm4VZg**)#Cms-O$GB!k~YA;L%S@Iq7u(ru@G*MYaAMS5~*_J!>YGt zyb+Nsx{Pjvf^CqnCGt7^W<^=zvbKup!W;JPzXU`Dd(1Bta)-he>-ttJ$2#^|nO}+4 znXcbbyNMuUl~|bW2fvG79K!z5utY$;i`?~GO=&^2bB=r$fB57d>PeL9RP~G z0Y>Pa8{}HpE9yLho%eO6ePs|eT)NSaPL5oN_nhS}Q*h7s(6v*eM)V#V2S-khW4&J( zT}Qc691wPXq~rPj753y@P34$n!>QsrQy`EnH!HE5gqSpFPpd#_;$9c2V$2qiH+gL( z3{|(I%WDZ|sV&i5Q#U(D8Jsp7o3DYK{e~8X*kM!pdQZD}x}x?T4|3C$vePDhb}R3K z3HbqR#v=5V_cZ=fcO5cv3h%N~gB70oo<1n${Ag&7MHG8K_AUO4pcK#E&fw%yOI=|x zJN*kajZp*{7r#M06me#H-r65N+pU5UTe|4m6GD;=0Lw-esKOcB2VXAe@Bk4+d4b53hBXqjzL`TKu^!Tk?6_qROl4kFX@b`FXy{hjRI;ajy*AuC;==|%~)iErH zo}ky~JY15VNkhI_9F*V4r%3g_U}uW}kZ{a8;Wlj>rzL^KnF-c9XL4t=Kgi|QuynlA zc|cP+(Kq_mnKaSzGKhh~{w%4|x24sHC2w2GGE-QTw#F;=zx654@qa>`f5uJrOwGDmy`t ze8!Iog`|O$rj0YZ_J6X4wTne3db4te<+ItE+9u4e;FQD?7G>sp-Lx^IZA~0;$a84- z6^O;p(LzH&s{auUfHPPCKuy?r`D5At2^6r8ZD*4Ic0&=49&MMq)vh(1D!PX5=Gh_c zjVzf>le9-=Bwf^+r*H_O0GCNK&|3aB5&))(I~Nsoq#R^$`NClfOwVfyS3xE1LH>2|X1$a7Mz?k;bKpVH_N_0#OozZTYA^j! zf<^osE&{ciUMkfV)>CuqwStkT;=|Qx2%KzESF@v)a=YWs!Ej=cKM%f}uc*r~@wV)e zmlYc-=ft`x0~|$FGZhIW1jjEZoxjYgJ6ackl`WS=Wu2%28IVm68YS9y2OJm#xM&H` zTdrJE%ChsXVoCFsy4^*Bq*#rZy0u=Yq8U2v`|TQ}V!d||yrLz21?EFrQEmhsIQZfu z4^?&;m7@aBJ5U5W)7~hx7^XaJ>VA2X;`z=cl%vUn7v8VjS!BlcH=iq#W13s{Fn#?gcgqDOvo2>6FKfiW zrv|p18);%3)$mv}xUh)nBlkkI0nI%I|>6)di(T0LBGhjED5Im*|0;{Ml{vo2{H zEuUdvbj-wqq*SaU2KFXlWxs=pp3yr#H{=(*5wj*NV~Fv=_H!+<5fE9f`I325!z;Ep zSS4Sux~n6yY5FCd6w%{;zE)(iLMyWC}zU!C7s=C?KOSz34La)G}T& zUdqf5>b%^m+Z^_`j*k1Cw$}&Kvc!&9zJs$;;9Kr)=f5{CQ<5FEw>sQ>hgka8>8(yn zQtzb7_zl!>T(qBU9!pvuShZy3 z2=5L9==kvX7;(JtTa`(<+JqIE%8>W}Q8;S@->V)wV&mdW(JW0y*4AI*;)DA7f}iR) zS|!|?U8EAE85bSc)6Iyp_0LTS|#N~d`$SQFbqQ=)4+vsc96&LMl0ix0IqJF+U7wH~2 zD6KFkBd*<0+9iBHFHX}tH4OwzW3G>rqab86UFfM+hrYl~vi!EZVoyvjyijDMC_A4Y z#-X@O($$LoKgsI+*imrAVlNqh=g z=b4NZj48G(45EU*4>Mo(2fLyR#n%DwflENJ;J_-b?#V;ll-b9Z;pSgI$qe35RYqR0 zU;ZRuNIyW&dvp$kDFLl5LSm%(G~G>>AmS@drz#Ht!3#&3t&v+esEN4Fb`;WUwtUaq zGLe3Dc|~<5>cvx51koldOvjb$zb1-M?*Kvw=xR~zZb&VjIxP-GS@G4yhY&I1jI+J~ zgzJI8@#6Hc{e?L8-87x*Q#cIl^q|5ip|OBcl8nOMYH6elotOMDg+VB9u9?h*29UF) zoNG=g$={1)Vz8cz=*+#zP+ZzpDMC4-Af4vW6}3Kufi>-oQ3fFX~T zRo3v?=cyGnzcPEh7&3rEdV{y;V`PnrMs~|D4vN9o|BxTn`)SciT+Qo0Y#`FF(KgLl z-Lmetk~tTn0(isZpQH5C6(~IK>i*_L4R?U-3ZoX~d2Zb2(mX!DC!l(3@wOXUP(70* z#kATyi5ukT02a?UqIh>kW;nN9OSxfP+?X&egSY)Wb-hxD(7v}*VGUMvt4Vr@rl5XjN4s!+? zN)$4qIt;sXWgYcQ@<{8)SwEQ_V6*?cEgRhCK@eYw9^nJC5j}4LsX2-n=BGX;PN!<& zz0JTh4eexbXL-TQl{5QVXZCl#R&R|zx6rU~BCW^0|K<|7Uk4w@HTq5j0E7674`5pJ zsafVnu0t975alP{(<@%Xte^=hIq?W=(hlS~=iN-rI-f(i7mnr*1LH(NvjGRM&wjuU<-{U*$bUmN&T#qT7p&-u?IRrH zGKt-AIK=zKs-*vq4Y3lq1?w@j6J}GXmRxev^G42fXid4li+ne`-pDm<5%L!TO5EZ( znXB0~>!ac3P3wNuyB&bSur=0@=}&<%)!>VW~39G%kUcog7_l znxg4YT93 znGftMLL;5yB0^rK&dA*H(ari%Tasff z)N-znIWS(H>36ymO6oX|k1NIGd1_7+&_sd5DXzxc=#b(F8#OIf2^tT=cMNQeFBIG8 z`aD_s6z9%H(H1u?;{K9}ta&$ZsCYS_h=d%q5Sy&2%x3hRe9g zqZz>ej(%^9C03u@O%ueNVxY$D6N&Yb4cvpio1y67$YB!sKcyTQUrHno;=AcZ!jRn*veMEZ%_+q&JV$;50>+)FE`t zL`U~|r!eo9Xt=YBzk-gSRW-;4_K98N=wSuR;4zO72@=t>RdF?{^FZbzsn{i0F2p4@ zks=qoZwb8lr0TdNSY@@pu7ajWu9#Rd$)_^UX)eecml7fDLrU8kc^jmIH#O_WD>x#m zqTLL2dDw53A(YI6UP)FdD4o<-FBetKycpYTre7RjAT`WBIO;(q>GCK0>T6Uw6T45( zG#hs9R^Z&(i{A`|m0g9_Ks#ahLGfw~w1gfoVIG>ohCGih93pYC$z~pXYabUMo`<^! zLJF7|VU#iXsPA3Kshb4xURC-|=%`}DXaGAyFTmjXba4~3O!!}if?WVQuE1 zy$;aGw{Bh{6qw4YHDqyZyje@*s)gE*tN%G?`a+uSD9Q&x-g}|h|9>bfUfxcR(Cb-P z_J4Yky_Zrp`WBA5?2%`Hb6K-qKy9_tQm`kd*5s`SijX=9PwZTrGout*$k-e2EH{l# zX*I8BqF7|Tv!`GqECtq0U&PDttqr?{-hvR+u?IIzKqRBfT|U3xX;q8U^v=i7B8Z1v zap()fUgs+3n?Z_)bq8yP@!T@#&G(AjukZ+je^$I48|L(P&WP^*wB=`Dhr=iWTBB{{ zEG9oj%gV0P!{YD-1o85*3&*^x~eWa==6X$hs zFQQHjfJmp^lQqM91)CZXkJh1?6wRwXAbP9HYP(!u+xOeJxy8Ob8QHa)rXm2$uXD8q&^R43mX(cS_uC|8^``3$+fNQW-0$4+Q09CqpXtT zQ)J&*wc0PRd@2nX+dM03MtaEaW{^Trg!INoXFS?4raC{SXyc=jair=EVMOk6UCCYm z^Y{;l#HfCPWu8Ijqr#J{mUe2at-8M)Fr#~E3&v^;6Bsua9-oQRkkCZkXjg6-Ti=C2S2Y7I3VJ#O&DOUMs!x8Wah0Zie+}|FvSXYM z_fmqP5ZAXyU)!=2Ku`M&T7z{&h*F>3aT zL}ygPoiy=t#vS}t`3Y}{wkohK@&KYSzq7k*aIgD#h~xihJc79qq_1Wt!+o-UfAjeY zqALdcVE3pSrnnrpv*0Y%9a`~O-k3*h6Dyqr( zzSXar4H%}QG>2h7T*H0*ZTaQ@`F$=7V_BOqXRg^AAyv;ZRkO6B1sAUg#$V325JAaU zsZdr`n(O`9bx0_5%LKdVkdzh97NQN%`bv1KHd@nZ()JEh3ZH;S;VZcQTm^u^*lhA> z=cdWMNyLBoZIcZum7*zHt&1T!JJPzCJhbw5|Y{$^cQf) z7g^DYlW5Qz7wT$p*eJk?W&|HWax4q7qQfJZ#BOK%DcR_Pi6JyHpK0tR8RNv<_?|#! zO^c59F_3Gj(w;E`pQqq5ncQPu6B{$E(7Gx8tQ{#a#+>7@5LSE{H^hp5k_Y%PHBL##RqS$dPT#_@ z@IJ6OU-3vvtdIN6Cp!r!;cTd_9ogGUTP`w>wh=eB3?Oh!%T)ay<)gyH9KbS&I)r*X z)5+xYJu9~GXY^KV;M$iZz7dub)leDSXB| zpkmr43@S5M_VAwAT8Lylag!ZiW`-vHo@SqKkLjD%0`S$!jWEs9X#kLrRnb@o9ZW$Q-E#tuGMRJDniP^^!Z_D-7PnW*F=e8cj zh*v*zqrT_$^?Duor%%m3=Wh6%r4~7pbMcZ=novv2{sNv;DJjNfYN(u`F-641E!DDB zIT3cW@r&ZoOfwJJ@^<9NTGX!O;E=iZiJO5>C%5eCqO`K6WwbULm z5$C#f97)N!6F$MZz$>d%8OR!skr_m3sQ-KCM>J1d`ZM_kGgE_s)}tf=&gxBLOzRat z@+L#-Hi8-ct|>j1uHc&M7q)Xb7B7MXH09S*6BjBDUbS78o-E&=K8;}a4Wb(uxc|v} zBh|c$1gzIqo?O5OUYSUQ|L5DigHx-_+grLET|7HUN!#g?hum!6!`bzd`2X@uYH)TK z9WvgA>)rVZF?L-AW@c(dNrtYYgTV;(gl%=--AObkc~m@$*(o|Wv|xa2F2@84-; z*iVpR9UAYdR+8!KW>YZ5-@9AbH|2-eTZO1+Fgz_vgvm> z`%Sc@yw%llmc{AFmhUZTN97H4NM0dvZ=P?p>1yp`eVM>}McQ>|H;{uC!EPmj2Ngx8RpQ*BydrG@2x z9JWJOH$O~e3*wNQZk~mo$ z$~gxMatx{tc7t5C_?pHD^Nx`pV+JQR&6k`S{_HdoXGb{L7W&`h)PFsK>^V%#)@?_w zM%eVxIBSDosZ?F_on$=~!Taxhix&?qnhxhC@g?(wJmGbkv%`}b- z-C~e$UIjRny|4?^HXGx`vmE9hiXVjsv)V*7k|JJwHTynK!-9A!n&2&z+0rfkt!x$? zPZW{0v}q~W2yVD90xFF@c`pTyC71X!k6D;!Z@u^Dl%6CtchE5hnT|GF9hVEP8|M1A zeXBg?VkgIOclPZ^I)nWd;WWKHlbamb!yWq@%V7H^f87htho+oB9*pDkyVheYXIy}nMdWQ05}kqudBX$p`lo0^q3}afkrwGV_{i^CtE?j4<;yTMHUr!5TK72H{!sTV+Ey%HmEIrQIuQZpU6<@`68`qBSMbTijDM|cG zIfj~gZK{8g#tKVZ%b-aQ3QL=pm3wJdD)skiS7yCa6Ju@rqJy;RseOE2#TV^3TM^-lnJ?Q(5Z=GyBl_Eks}Wz6boSnZZKY(3 znY?r}QZ7k#{V+qKCsC@hcM>l(6EhtGVt_$k2EIW1xo-uC!Dm7?QVP!0Q`$JX;nZ@t~#QiznFIu(PXD7rvR}p@@ z^3=DMUu%Q+!y;Q50Nx4CT!bCvDnxU16kD{P|rgA(XlI0Vup{OjWwWzES#RB)50 zsOnsclX9)0QIX)YY9c}Qry_NG*FR;?ylpq!|2h82MUf2&xR=nD5q{ONeb3~{m^Nrt z^*7G-nKx$)k4zI6IfC77AY#lnq@UamVa-qG`lA~ygItJxq8*0k4P%y5DVZ=#A$L!k zl^WWM*p~dcG!Adivp!@pVsc)^kW@m1Q`A z{9I2g-AVLY-5nxc22%+zF6RBCdkvrW=JoC+R13DTJUWCSWhwpIGEjJn?Nsai9Wy-b zH;b#~6a7lZf31=r&*|q+sug-p-Az`Js370lSm@X0rX7 zyLHL&bDrRm{a^;*k^%O=+U8QZT=U*oCLFv6#{S@yA4~skQ++&f!Zd z3hp+4W>Km_`$WiMTJ{SkBx2rQwX(lLd7ES?1Jtg^fwy=pi(w0KEp>2t1F|yCur=v= zf9BTTpXc1iC6rk!O-(rWe8p4_8G^Z*OKJh7`ET;%1{3#q)7ue35cK9lm!w=(FNQ$G zKQN>dX#s4&Q8c{USD{?uJJ0|MG|m|I&l+6+n7?)t;=72xs|R?BalX6B-vo*To>9I> zZ2G|14-2~6lhNX+YrR7yty~#9oVIY2bNW^LT)4@~FFUXl{@N>2Pt64+?g)hVZ^gl@ zUn*77&}ofRmcrOw;bcJ~0;lXXf-&)3B*~BqeH_)nBCn2V>=Bw0AnZBWT?UPQUyCYU z30t>q@9l)lArI^&_S65h+m2t2F^QIfr368p`SQ(fPl`m_=6*0ny6zV%+xzymeM<(m zAl_a_9d&7)jbK;R%G4A3q3|Y~OHbk&K3sd(E-)pkzu*Kv@y0I7r1#f})X%a@V2q6p zeTfx!`dxV24*-7@o=6aJK@hhmEo0heG zeJ~T@8UO@9WZzmjd{!MByGhdn210%^vI>MIjX}Nhdv|Zo;tda3+?f75M z^_T5iA3?P2EA!?`{pK=>!}0_Oh9roYN+4l2{90)HRyNl6&n)~v^|pe}UbIV$Ro*6d zDl=r@;{I!^k~8A>MK5Lwg1-Az$9)Z!3b5vnd6PBM8Nf%p=J?ha7XG|Z?L2g@w53dq zy_18=PHh`eCrwe7csylXpHzof&=!m>_21Ts0%6VY;-ng7l(%Wu7RSJ{R0q|k(xVH@ zjX&uCU|3Dz*|-5e)r^@XIyziYElI7YoFVzRF_gC;9TYu3`bJ27@H^OhN?12lH_eeur6U~WVJ^<&iH_1@8q%#D3srhML2`)b2BLCzZO&VFnq6g*0?Fvk#HIb z-m?;{=-XG4uyg8n$ecAu0mAv}0B_SxQA`bPI5Az*rRJ z_^9>2E+-#h0bSZa(7JgrAzL6fuW0micYqtA>&2`%mXt?Z`E2{6ydNVF)P!*^A^RNC zQ`4ULCPzpRucD*R)~=m-G7~`=&EE%AMNSPZ_ovusr+eM@?IiB+mXdMK2}AHae!=B4 z8cgnJAMpX>3Ne4Im^>z0A7|!-V0+0!KfUNLe#iMH5TdD~J?9sip>On=C(vhwd1r?=52vtE85Rev-s#2s#@1cp(s}!jLrAkRK z1QH-5x%1|H-@W($JM8Z4GtWFTyBiiB_T4>yZuXZEvKN0#{l~K=@!6?l{qGfW%BZ{_ z>>a^l75_$-Op(ReX8dT~suM_PZGI6u7({GVZ%^af^7Q2Nk2hKlJ%pJR`9`(OkCbW5 zKS$R8uBR=hJoiv;0gF_mksNb#`rcPQ7k+Y9 ziraHL?vK+#@!=4FNi;cipvhJ>9N#S=t08pbG5zE z$`Iv^tGnz1)i{3Y1M+#Pl^EpgS);heg2R(ABfRplh?db@4QkLeL_-}`F3Cqfq_s-B z$u3ke8KJ;H*MDCAt8uaXNAky+8(DivWiTZIQPfmv&{DffdH{_iY_=5l*@wKF&s4;e zRZr9U8b{<{_1WeUt6PF0`EIbaCiUN8tQp2%m%kCC$Arfo{qHWoClAMVL5nfiC9jnP zC`N@L%on;VmYolk#TMJ(C zYmDR3H4HA;-pH99AH0GaPYbywwZYf;4~Ov0QrcT5B>WJWP)q4JB0NBe?5d7uNqnI@ z5IuUewzh+>V=WhwsunY0aT)FrTc17d_idH~)2w}$B!5$R$h>IA2>>!jM%cDH>Z?zR zeUu%3Rvsl$gjO07)>aTfxXjYaE*|uhuxda2RDVr9NEe8i>-5GqO~LT{UuOi)BV{*R zn(NBRse^=Xfzg8ni1YTX#DE4h^3h>NrI2eW%Y$OjX*(|^WN3!cHGY;crl_-&1zB8y z8V(v?cn~^;<+=L&r1fg-S`s2$5ZH9~H66{h%-pHjvYoffrVIwrpKr|-8F{BsKR1hn zn#ng6Qv=<;s{ao-ofaw~wWG3?>Y{Psld`zy{~Arpd)#YR{b`AB1-KazHw}GS%3U9P z$E8n(9~6OF8D+ozcT@}WW=O_e6>AsNewR|*1QBD_juWw;OYnmPW&?KBdezP zWfLk`Y_rgD-2@-^g>RqjLOfDV-*tbjG|@GorJ(AH`0c4>Ea)mh3r(-?Htqd{2SDpP zwJlY(FU5t++x?UUDONe2a?2p1>_W6JbJGDye4C24-kCmh`?3 z5uy*!4%|ya<@l+m^c(-G89wOaW>^^&Z+#9aaqCPVs2>F}BUNM;7+Hq9Q{t20GFLDQ zrTf^3;81Dp)CaHF|AOZ~f1n`-UYNErZ+AhfmYve9d}`jahWhPLd!&Gws+{0fM}WB0B!)mYbX2A2R#sFBbLW~B zVuP2KnNU2Amli1i&9Lp6^)dCnu2?cJ!ctLQcT9=j_L9!}-0<@CUC$5;9EWxE(*Fj@ zs+W^-xBGtM7Q$1Z?je3mq@y0T?UO&?cYk4mLaFkf9$~(osg7A=G(`Z_AnvAE+zZ*tZZC7| zB#CkQt1j?)Zr9P{U2>iS($e%*I~R|-om`MN8=LTY2{dX=lRj$`EHw7aGbKtgS=Ja2 z>F~Fz&yfg+u?TVImX`Zb@Z5gfLHqURZYKo~2Pc4^<5uoOw^W=O=_4iHW7@l*OqTz$ zq2I=wA$@(S4$^;r?!j)u3r@5zK?*TzNmS{Y^9|sJLT_xM1hL?rX3K*IS3e-NK9X52 zwY=vs`*)$j`nft>sA8e@{i*5mhlVJFqln2iHc83%%Fnn**{Lwhy^sxKk2`(xp8=gx z6?`vbZf^%`;Wf6p7PN0I+d-I_B!q@j^);y5;}`l+_lh^}DV|xNrusD_-Y(3tvdQjWBwED%Ht8ALa(CkV|3;_2k%nw zR721;u`?n-u5yzi;ibIM-DGHn{LsT$8>y;UMKS7o|6&e8==SzxWJ#c%HGkQwn=9Co z8>^ssC^s$=vc*NQ>6={ktb{l*zr&l9`>2l+#N{rwuqo10KL7<1+}hv5ZO@SQ+nFoO zZHjSPXX3tSc-Zt6I8`CBwQb57_N1cx^!8P&s1#QhxdVhdu;gFVKMcM;k9o2XKZz)2 zPHPU#m7Pwb%7txGTAL!h^94v_Okm01aEz}m`!pzrdgy5bllzNGUCMo1!+519h1bJF zFTK;+`D4!MkpNJQzYr75Be$58W6BOr(Z<2?Ftryr?tSag`&<_&z5|Q>Fgp&#FXdFr z(dP?wR;yU7z4OulFXbqsaF@k?CeJ^WTQ<^nbpdT+xeYzvQwmZ_8TErgR zU4eLx=~j<%rim4%9IKsU2YNv^gzvFqWqiF4~5(&lO4b`MhWZ6RvP57t6J#sAC~Kzi_#*?byItKOFph``cXRL{Q0wY0Jq zz3{Y6z5$$j-PmNqR2?V%GuaZ~E6(YkK=cY;_(xW40?G98zdQ8SbwhA&w5p*Ej%aon zb|KNgVPB$i8SQVKFk`nqHf#G-PQ2MrG@GU9S`a1WO#*C)7_HI3(D)(Ovi)&Og_#<$ zJTnI`)ZZ&RH@C}{YtmhRHujV&ETCkbD@*56op23RTajx?(TU&g2_Q>yGf!IGumM9~ zF8UcU&ch_%n*-=Va#Z&�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 From ff0fd5a74f2e38e75ecaa93ce2c1c196039bb0d3 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Wed, 19 Nov 2025 15:17:12 +0100 Subject: [PATCH 04/13] test: Fix Snaps E2E after settings changes (#22933) ## **Description** A recent change to the settings pages broke a Snaps E2E test on main. This PR fixes that by adding additional steps to exit the settings menu. --- > [!NOTE] > Fix Snaps E2E by adding back-navigation support and updating tests to exit Settings before proceeding. > > - **E2E Page Objects**: > - `e2e/pages/Settings/SnapSettingsView.ts`: > - Add `backButton` getter using `CommonSelectorsIDs.BACK_ARROW_BUTTON`. > - Add `tapBackButton()` to tap the back arrow. > - **E2E Tests**: > - `e2e/specs/snaps/test-snap-management.spec.ts`: > - After toggling Snap enablement, navigate out of Settings via two `tapBackButton()` calls and `SettingsView.tapCloseButton()` before continuing. > - Ensure `SettingsView.tapSnaps()` is invoked where needed before selecting a Snap. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 00b8efcc9b8079cf8b705a647cfbc61bb8f362b0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- e2e/pages/Settings/SnapSettingsView.ts | 11 +++++++++++ e2e/specs/snaps/test-snap-management.spec.ts | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/e2e/pages/Settings/SnapSettingsView.ts b/e2e/pages/Settings/SnapSettingsView.ts index 9c4a3f1400bc..5a139fa6c472 100644 --- a/e2e/pages/Settings/SnapSettingsView.ts +++ b/e2e/pages/Settings/SnapSettingsView.ts @@ -1,5 +1,6 @@ import Matchers from '../../framework/Matchers'; import Gestures from '../../framework/Gestures'; +import { CommonSelectorsIDs } from '../../selectors/Common.selectors'; class SnapSettingsView { get enabledToggle(): DetoxElement { @@ -14,6 +15,10 @@ class SnapSettingsView { return Matchers.getIdentifier('snap-settings-scrollview'); } + get backButton(): DetoxElement { + return Matchers.getElementByID(CommonSelectorsIDs.BACK_ARROW_BUTTON); + } + async toggleEnable(): Promise { await Gestures.tap(this.enabledToggle, { elemDescription: 'Snap Settings - Toggle Button', @@ -36,6 +41,12 @@ class SnapSettingsView { elemDescription: `Snap Settings - Remove Snap`, }); } + + async tapBackButton(): Promise { + await Gestures.tapAtIndex(this.backButton, 0, { + elemDescription: 'Snap Settings - Back Button', + }); + } } export default new SnapSettingsView(); diff --git a/e2e/specs/snaps/test-snap-management.spec.ts b/e2e/specs/snaps/test-snap-management.spec.ts index ad04139a1a50..6040a646e885 100644 --- a/e2e/specs/snaps/test-snap-management.spec.ts +++ b/e2e/specs/snaps/test-snap-management.spec.ts @@ -41,6 +41,10 @@ describe(FlaskBuildTests('Snap Management Tests'), () => { await SnapSettingsView.selectSnap('Dialog Example Snap'); await SnapSettingsView.toggleEnable(); + await SnapSettingsView.tapBackButton(); + await SnapSettingsView.tapBackButton(); + await SettingsView.tapCloseButton(); + await TabBarComponent.tapBrowser(); await TestSnaps.tapButton('sendAlertButton'); @@ -61,10 +65,15 @@ describe(FlaskBuildTests('Snap Management Tests'), () => { }, async () => { await TabBarComponent.tapSettings(); + await SettingsView.tapSnaps(); await SnapSettingsView.selectSnap('Dialog Example Snap'); await SnapSettingsView.toggleEnable(); + await SnapSettingsView.tapBackButton(); + await SnapSettingsView.tapBackButton(); + await SettingsView.tapCloseButton(); + await TabBarComponent.tapBrowser(); await TestSnaps.tapButton('sendAlertButton'); @@ -86,6 +95,7 @@ describe(FlaskBuildTests('Snap Management Tests'), () => { }, async () => { await TabBarComponent.tapSettings(); + await SettingsView.tapSnaps(); await SnapSettingsView.selectSnap('Dialog Example Snap'); await SnapSettingsView.removeSnap(); From 89e2ce84ea8902929a778d914e39eaa0a42885fb Mon Sep 17 00:00:00 2001 From: Salim TOUBAL Date: Wed, 19 Nov 2025 15:44:28 +0100 Subject: [PATCH 05/13] feat: brwoser button (#22871) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** add browser button ## **Changelog** CHANGELOG entry: add browser button ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** ### **Before** ### **After** https://github.com/user-attachments/assets/392276db-5423-45fd-b4ab-cae558e16c4b ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Adds a browser button that displays the open tab count and refactors search bar layout/padding across Trending and Explore screens, with tests for states and navigation. > > - **TrendingView UI** > - Replaces header controls with a row containing `ExploreSearchBar` and a bordered browser button. > - Browser button now shows `browser.tabs.length` as a `ButtonLink` label; falls back to `Add` icon when zero. > - Integrates theme colors for border and updates padding (`px-4`/`pb-3`). > - **ExploreSearchBar** > - Removes outer padding wrapper; exposes just the row layout and content. > - Keeps interactive mode clear/cancel; cancel rendered alongside input when focused. > - **ExploreSearchScreen** > - Wraps `ExploreSearchBar` in a padded container (`px-4 pb-3`). > - **Tests** (`TrendingView.test.tsx`) > - Adds cases for browser button states (0/1/many tabs) and navigation to `TrendingBrowser`. > - Verifies presence of search bar button and header title. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 72174b6af847d31ec2d4ff8bebba816932c72d9d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- .../ExploreSearchBar/ExploreSearchBar.tsx | 64 ++-- .../ExploreSearchScreen.tsx | 16 +- .../Views/TrendingView/TrendingView.test.tsx | 339 ++++++++++++++++++ .../Views/TrendingView/TrendingView.tsx | 47 ++- 4 files changed, 415 insertions(+), 51 deletions(-) diff --git a/app/components/Views/TrendingView/ExploreSearchBar/ExploreSearchBar.tsx b/app/components/Views/TrendingView/ExploreSearchBar/ExploreSearchBar.tsx index bc67ffb81dd2..47d6414a686b 100644 --- a/app/components/Views/TrendingView/ExploreSearchBar/ExploreSearchBar.tsx +++ b/app/components/Views/TrendingView/ExploreSearchBar/ExploreSearchBar.tsx @@ -101,40 +101,38 @@ const ExploreSearchBar: React.FC = (props) => { ); return ( - - - {isButtonMode ? ( - - {searchBarContent} - - ) : ( - <> - {searchBarContent} - {props.isSearchFocused && ( - + {isButtonMode ? ( + + {searchBarContent} + + ) : ( + <> + {searchBarContent} + {props.isSearchFocused && ( + + - - {strings('transaction.cancel')} - - - )} - - )} - + {strings('transaction.cancel')} + + + )} + + )} ); }; diff --git a/app/components/Views/TrendingView/ExploreSearchScreen/ExploreSearchScreen.tsx b/app/components/Views/TrendingView/ExploreSearchScreen/ExploreSearchScreen.tsx index dc9f103b3f57..ef4bc0c0cca7 100644 --- a/app/components/Views/TrendingView/ExploreSearchScreen/ExploreSearchScreen.tsx +++ b/app/components/Views/TrendingView/ExploreSearchScreen/ExploreSearchScreen.tsx @@ -21,13 +21,15 @@ const ExploreSearchScreen: React.FC = () => { return ( - + + + diff --git a/app/components/Views/TrendingView/TrendingView.test.tsx b/app/components/Views/TrendingView/TrendingView.test.tsx index d727b9b1fd31..6ee212af7d47 100644 --- a/app/components/Views/TrendingView/TrendingView.test.tsx +++ b/app/components/Views/TrendingView/TrendingView.test.tsx @@ -172,6 +172,345 @@ describe('TrendingView', () => { expect(browserButton).toBeDefined(); }); + describe('browser button states', () => { + it('displays add icon when no browser tabs are open', () => { + mockUseSelector.mockImplementation((selector) => { + // Handle browser tabs count selector + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if (selectorStr.includes('browser') && selectorStr.includes('tabs')) { + return 0; + } + } + // Return default mock values for other selectors + if (selector === selectChainId) { + return '0x1'; + } + if (selector === selectIsEvmNetworkSelected) { + return true; + } + if (selector === selectEnabledNetworksByNamespace) { + return { eip155: { '0x1': true } }; + } + if (selector === selectPopularNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectCustomNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectMultichainAccountsState2Enabled) { + return false; + } + if (selector === selectSelectedInternalAccountByScope) { + return (_scope: string) => null; + } + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if ( + selectorStr.includes('selectSelectedInternalAccountByScope') || + selectorStr.includes('SelectedInternalAccountByScope') + ) { + return (_scope: string) => null; + } + } + return undefined; + }); + + const { getByTestId, queryByText } = render( + + + , + ); + + const browserButton = getByTestId('trending-view-browser-button'); + + expect(browserButton).toBeDefined(); + expect(queryByText(/^\d+$/)).toBeNull(); + }); + + it('displays tab count when one browser tab is open', () => { + mockUseSelector.mockImplementation((selector) => { + // Handle browser tabs count selector + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if (selectorStr.includes('browser') && selectorStr.includes('tabs')) { + return 1; + } + } + // Return default mock values for other selectors + if (selector === selectChainId) { + return '0x1'; + } + if (selector === selectIsEvmNetworkSelected) { + return true; + } + if (selector === selectEnabledNetworksByNamespace) { + return { eip155: { '0x1': true } }; + } + if (selector === selectPopularNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectCustomNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectMultichainAccountsState2Enabled) { + return false; + } + if (selector === selectSelectedInternalAccountByScope) { + return (_scope: string) => null; + } + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if ( + selectorStr.includes('selectSelectedInternalAccountByScope') || + selectorStr.includes('SelectedInternalAccountByScope') + ) { + return (_scope: string) => null; + } + } + return undefined; + }); + + const { getByText } = render( + + + , + ); + + expect(getByText('1')).toBeDefined(); + }); + + it('displays tab count when multiple browser tabs are open', () => { + mockUseSelector.mockImplementation((selector) => { + // Handle browser tabs count selector + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if (selectorStr.includes('browser') && selectorStr.includes('tabs')) { + return 5; + } + } + // Return default mock values for other selectors + if (selector === selectChainId) { + return '0x1'; + } + if (selector === selectIsEvmNetworkSelected) { + return true; + } + if (selector === selectEnabledNetworksByNamespace) { + return { eip155: { '0x1': true } }; + } + if (selector === selectPopularNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectCustomNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectMultichainAccountsState2Enabled) { + return false; + } + if (selector === selectSelectedInternalAccountByScope) { + return (_scope: string) => null; + } + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if ( + selectorStr.includes('selectSelectedInternalAccountByScope') || + selectorStr.includes('SelectedInternalAccountByScope') + ) { + return (_scope: string) => null; + } + } + return undefined; + }); + + const { getByText } = render( + + + , + ); + + expect(getByText('5')).toBeDefined(); + }); + + it('displays tab count when many browser tabs are open', () => { + mockUseSelector.mockImplementation((selector) => { + // Handle browser tabs count selector + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if (selectorStr.includes('browser') && selectorStr.includes('tabs')) { + return 99; + } + } + // Return default mock values for other selectors + if (selector === selectChainId) { + return '0x1'; + } + if (selector === selectIsEvmNetworkSelected) { + return true; + } + if (selector === selectEnabledNetworksByNamespace) { + return { eip155: { '0x1': true } }; + } + if (selector === selectPopularNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectCustomNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectMultichainAccountsState2Enabled) { + return false; + } + if (selector === selectSelectedInternalAccountByScope) { + return (_scope: string) => null; + } + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if ( + selectorStr.includes('selectSelectedInternalAccountByScope') || + selectorStr.includes('SelectedInternalAccountByScope') + ) { + return (_scope: string) => null; + } + } + return undefined; + }); + + const { getByText } = render( + + + , + ); + + expect(getByText('99')).toBeDefined(); + }); + + it('navigates to TrendingBrowser when button is pressed with no tabs', () => { + mockUseSelector.mockImplementation((selector) => { + // Handle browser tabs count selector + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if (selectorStr.includes('browser') && selectorStr.includes('tabs')) { + return 0; + } + if (selectorStr.includes('dataCollectionForMarketing')) { + return false; + } + } + // Return default mock values for other selectors + if (selector === selectChainId) { + return '0x1'; + } + if (selector === selectIsEvmNetworkSelected) { + return true; + } + if (selector === selectEnabledNetworksByNamespace) { + return { eip155: { '0x1': true } }; + } + if (selector === selectPopularNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectCustomNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectMultichainAccountsState2Enabled) { + return false; + } + if (selector === selectSelectedInternalAccountByScope) { + return (_scope: string) => null; + } + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if ( + selectorStr.includes('selectSelectedInternalAccountByScope') || + selectorStr.includes('SelectedInternalAccountByScope') + ) { + return (_scope: string) => null; + } + } + return undefined; + }); + + const { getByTestId } = render( + + + , + ); + + const browserButton = getByTestId('trending-view-browser-button'); + fireEvent.press(browserButton); + + expect(mockNavigate).toHaveBeenCalledWith('TrendingBrowser', { + newTabUrl: expect.stringContaining('?metamaskEntry=mobile'), + timestamp: expect.any(Number), + fromTrending: true, + }); + expect(updateLastTrendingScreen).toHaveBeenCalledWith('TrendingBrowser'); + }); + + it('navigates to TrendingBrowser when button is pressed with existing tabs', () => { + mockUseSelector.mockImplementation((selector) => { + // Handle browser tabs count selector + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if (selectorStr.includes('browser') && selectorStr.includes('tabs')) { + return 3; + } + if (selectorStr.includes('dataCollectionForMarketing')) { + return false; + } + } + // Return default mock values for other selectors + if (selector === selectChainId) { + return '0x1'; + } + if (selector === selectIsEvmNetworkSelected) { + return true; + } + if (selector === selectEnabledNetworksByNamespace) { + return { eip155: { '0x1': true } }; + } + if (selector === selectPopularNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectCustomNetworkConfigurationsByCaipChainId) { + return []; + } + if (selector === selectMultichainAccountsState2Enabled) { + return false; + } + if (selector === selectSelectedInternalAccountByScope) { + return (_scope: string) => null; + } + if (typeof selector === 'function') { + const selectorStr = selector.toString(); + if ( + selectorStr.includes('selectSelectedInternalAccountByScope') || + selectorStr.includes('SelectedInternalAccountByScope') + ) { + return (_scope: string) => null; + } + } + return undefined; + }); + + const { getByTestId } = render( + + + , + ); + + const browserButton = getByTestId('trending-view-browser-button'); + fireEvent.press(browserButton); + + expect(mockNavigate).toHaveBeenCalledWith('TrendingBrowser', { + newTabUrl: expect.stringContaining('?metamaskEntry=mobile'), + timestamp: expect.any(Number), + fromTrending: true, + }); + expect(updateLastTrendingScreen).toHaveBeenCalledWith('TrendingBrowser'); + }); + }); + it('renders title in header', () => { const { getByText } = render( diff --git a/app/components/Views/TrendingView/TrendingView.tsx b/app/components/Views/TrendingView/TrendingView.tsx index 93d69fecae7b..a7685473bc2c 100644 --- a/app/components/Views/TrendingView/TrendingView.tsx +++ b/app/components/Views/TrendingView/TrendingView.tsx @@ -6,7 +6,6 @@ import { useSelector } from 'react-redux'; import { createStackNavigator } from '@react-navigation/stack'; import { Box, - BoxFlexDirection, Text, TextVariant, ButtonIcon, @@ -17,6 +16,7 @@ import { strings } from '../../../../locales/i18n'; import AppConstants from '../../../core/AppConstants'; import { appendURLParams } from '../../../util/browser'; import { useMetrics } from '../../hooks/useMetrics'; +import { useTheme } from '../../../util/theme'; import Browser from '../Browser'; import Routes from '../../../constants/navigation/Routes'; import { @@ -35,6 +35,7 @@ import PredictBuyPreview from '../../UI/Predict/views/PredictBuyPreview/PredictB import QuickActions from './components/QuickActions/QuickActions'; import SectionHeader from './components/SectionHeader/SectionHeader'; import { HOME_SECTIONS_ARRAY } from './config/sections.config'; +import ButtonLink from '../../../component-library/components/Buttons/Button/variants/ButtonLink'; const Stack = createStackNavigator(); @@ -74,6 +75,7 @@ const TrendingFeed: React.FC = () => { const insets = useSafeAreaInsets(); const navigation = useNavigation(); const { isEnabled } = useMetrics(); + const { colors } = useTheme(); // Update state when returning to TrendingFeed useEffect(() => { @@ -89,6 +91,10 @@ const TrendingFeed: React.FC = () => { state.security.dataCollectionForMarketing, ); + const browserTabsCount = useSelector( + (state: { browser: { tabs: unknown[] } }) => state.browser.tabs.length, + ); + const portfolioUrl = appendURLParams(AppConstants.PORTFOLIO.URL, { metamaskEntry: 'mobile', metricsEnabled: isEnabled(), @@ -110,23 +116,42 @@ const TrendingFeed: React.FC = () => { return ( - + {strings('trending.title')} + - - + + + + + + + + {browserTabsCount > 0 ? ( + + ) : ( + + )} + - - Date: Wed, 19 Nov 2025 09:57:33 -0500 Subject: [PATCH 06/13] feat: migrate features to new arch (#22675) ## **Description** This PR migrates whitelisted feature flags from the old selector-based pattern to the new `useFeatureFlag` hook architecture. This aligns with the project's feature flag guidelines that require using the hook instead of creating feature flag selectors. **Reason for change:** - The codebase has standardized on using the `useFeatureFlag` hook for feature flag access - The old pattern of using selectors (`selectPooledStakingEnabledFlag`, `selectPerpsEnabledFlag`, `selectPredictEnabledFlag`) violates the current feature flag guidelines - Migrating to the hook pattern provides better consistency, maintainability, and supports the feature flag override functionality **Improvement/Solution:** - Replaced all instances of feature flag selectors with the `useFeatureFlag` hook - Updated components to use `FeatureFlagNames` enum values instead of selector functions - Migrated the following feature flags: - `earnPooledStakingEnabled` (previously `selectPooledStakingEnabledFlag`) - `perpsPerpTradingEnabled` (previously `selectPerpsEnabledFlag`) - `predictTradingEnabled` (previously `selectPredictEnabledFlag`) - Updated all related test files to mock the new hook pattern - Fixed TypeScript compilation errors and test failures **Components affected:** - `WalletActions` and `TradeWalletActions` components - Stake-related components (`StakeButton`, `StakingBalance`, `StakingButtons`) - Earn components (`EarnTokenList`, `WaysToEarn`) - `DeveloperOptions` settings view - `SampleFeature` component - Various other views and components ## **Changelog** CHANGELOG entry: null *(This is an internal refactoring that does not affect end-user functionality)* ## **Related issues** Fixes: ## **Manual testing steps** rkin Feature: Feature flag migration to new architecture Scenario: User views wallet actions with feature flags enabled Given the app is running with feature flags enabled for pooled staking, perps trading, and predict trading When user navigates to the wallet screen Then the wallet actions should display correctly with all feature-gated options visible Scenario: User views developer options with perps feature flag Given the app is running with perps trading feature flag enabled When user navigates to Settings > Developer Options Then the Perps developer options section should be visible Scenario: User views stake components with pooled staking feature flag Given the app is running with pooled staking feature flag enabled When user navigates to stake-related screens Then all stake components should render correctly and show pooled staking options Scenario: User overrides feature flags in developer options Given the app is running When user navigates to Settings > Developer Options > Feature Flag Override Then user can override feature flags and see the changes reflected in the app ## **Screenshots/Recordings** ### **Before** ### **After** https://github.com/user-attachments/assets/ad1def2a-cfd7-4251-a62c-ae509f8523fa https://github.com/user-attachments/assets/47bda0ab-7c46-4e77-b468-8ca7fa41f05d ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Replace selector-based feature flags with the useFeatureFlag hook and FeatureFlagNames enum across key views/components; update tests and add new flags to the enum. > > - **Feature Flags Migration** > - Replace `useSelector(select*EnabledFlag)` with `useFeatureFlag(FeatureFlagNames.*)` for `perpsPerpTradingEnabled`, `predictTradingEnabled`, `earnPooledStakingEnabled`, and `carouselBanners`. > - Expand `FeatureFlagNames` enum and centralize flag access in `app/components/hooks/useFeatureFlag.ts`. > - **Components Updated** > - Navigation and views: `MainNavigator`, `ActivityView`, `Wallet`, `DeveloperOptions`. > - Wallet actions: `WalletActions`, `TradeWalletActions` (earn/perps/predict gating via hook). > - Earn/Stake flows: `EarnTokenList`, `StakeButton`, `StakingBalance`, `StakingButtons`. > - Rewards: `WaysToEarn` (Predict gating via hook). > - Sample feature: `SampleFeature` (counter gating via hook). > - **Tests** > - Update unit tests to mock `useFeatureFlag` instead of selectors across affected files. > - Adjust assertions and setups to reflect new flag sources. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 02c0ef81e08864cbc152c38c5c42cb3b2e4ed6b0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- app/components/Nav/Main/MainNavigator.js | 16 +-- .../EarnTokenList/EarnTokenList.test.tsx | 44 +++--- .../Earn/components/EarnTokenList/index.tsx | 11 +- .../WaysToEarn/WaysToEarn.test.tsx | 25 +++- .../OverviewTab/WaysToEarn/WaysToEarn.tsx | 9 +- .../StakeButton/StakeButton.test.tsx | 33 +++-- .../UI/Stake/components/StakeButton/index.tsx | 11 +- .../StakingBalance/StakingBalance.test.tsx | 48 +++++-- .../StakingBalance/StakingBalance.tsx | 9 +- .../StakingButtons/StakingButtons.test.tsx | 37 +++-- .../StakingButtons/StakingButtons.tsx | 9 +- app/components/Views/ActivityView/index.js | 11 +- .../FeatureFlagOverride.test.tsx | 23 +-- .../Settings/DeveloperOptions/index.test.tsx | 37 +++-- .../Views/Settings/DeveloperOptions/index.tsx | 10 +- .../TradeWalletActions.test.tsx | 134 +++++++++--------- .../TradeWalletActions/TradeWalletActions.tsx | 20 +-- app/components/Views/Wallet/index.test.tsx | 34 ++++- app/components/Views/Wallet/index.tsx | 32 +++-- .../WalletActions/WalletActions.test.tsx | 123 ++++++++-------- .../Views/WalletActions/WalletActions.tsx | 20 +-- app/components/hooks/useFeatureFlag.ts | 12 +- .../components/views/SampleFeature.test.tsx | 22 +-- .../components/views/SampleFeature.tsx | 10 +- 24 files changed, 454 insertions(+), 286 deletions(-) diff --git a/app/components/Nav/Main/MainNavigator.js b/app/components/Nav/Main/MainNavigator.js index e147398cfe3a..360a619d1b55 100644 --- a/app/components/Nav/Main/MainNavigator.js +++ b/app/components/Nav/Main/MainNavigator.js @@ -100,13 +100,9 @@ import { PerpsScreenStack, PerpsModalStack, PerpsTutorialCarousel, - selectPerpsEnabledFlag, } from '../../UI/Perps'; -import { - PredictScreenStack, - PredictModalStack, - selectPredictEnabledFlag, -} from '../../UI/Predict'; +import { PredictScreenStack, PredictModalStack } from '../../UI/Predict'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import { selectAssetsTrendingTokensEnabled } from '../../../selectors/featureFlagController/assetsTrendingTokens'; import PerpsPositionTransactionView from '../../UI/Perps/Views/PerpsTransactionsView/PerpsPositionTransactionView'; import PerpsOrderTransactionView from '../../UI/Perps/Views/PerpsTransactionsView/PerpsOrderTransactionView'; @@ -921,11 +917,15 @@ const SampleFeatureFlow = () => ( const MainNavigator = () => { // Get feature flag state for conditional Perps screen registration - const perpsEnabledFlag = useSelector(selectPerpsEnabledFlag); + const perpsEnabledFlag = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ); const isEvmSelected = useSelector(selectIsEvmNetworkSelected); const isPerpsEnabled = useMemo(() => perpsEnabledFlag, [perpsEnabledFlag]); // Get feature flag state for conditional Predict screen registration - const predictEnabledFlag = useSelector(selectPredictEnabledFlag); + const predictEnabledFlag = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ); const isPredictEnabled = useMemo( () => predictEnabledFlag, [predictEnabledFlag], diff --git a/app/components/UI/Earn/components/EarnTokenList/EarnTokenList.test.tsx b/app/components/UI/Earn/components/EarnTokenList/EarnTokenList.test.tsx index e248dff8e02d..da1a614e0d64 100644 --- a/app/components/UI/Earn/components/EarnTokenList/EarnTokenList.test.tsx +++ b/app/components/UI/Earn/components/EarnTokenList/EarnTokenList.test.tsx @@ -19,17 +19,28 @@ import { getMockUseEarnTokens } from '../../__mocks__/earnMockData'; import { EARN_EXPERIENCES } from '../../constants/experiences'; import * as useEarnTokensHook from '../../hooks/useEarnTokens'; import * as useEarnNetworkPollingHook from '../../hooks/useEarnNetworkPolling'; +import { selectStablecoinLendingEnabledFlag } from '../../selectors/featureFlags'; import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../selectors/featureFlags'; + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../components/hooks/useFeatureFlag'; import { EarnTokenDetails } from '../../types/lending.types'; jest.mock('../../selectors/featureFlags', () => ({ - selectPooledStakingEnabledFlag: jest.fn().mockImplementation(() => true), selectStablecoinLendingEnabledFlag: jest.fn().mockImplementation(() => true), + selectPooledStakingEnabledFlag: jest.fn().mockImplementation(() => true), })); +jest.mock('../../../../../components/hooks/useFeatureFlag', () => { + const actual = jest.requireActual( + '../../../../../components/hooks/useFeatureFlag', + ); + return { + ...actual, + useFeatureFlag: jest.fn().mockReturnValue(true), + }; +}); + jest.mock('../../../../../core/Engine', () => ({ context: { NetworkController: { @@ -140,8 +151,13 @@ describe('EarnTokenList', () => { ( selectStablecoinLendingEnabledFlag as unknown as jest.Mock ).mockReturnValue(true); - (selectPooledStakingEnabledFlag as unknown as jest.Mock).mockReturnValue( - true, + (useFeatureFlag as unknown as jest.Mock).mockImplementation( + (flagName: string) => { + if (flagName === FeatureFlagNames.earnPooledStakingEnabled) { + return true; + } + return true; + }, ); jest @@ -491,9 +507,7 @@ describe('EarnTokenList', () => { describe('ETH token filtering based on pooled staking status', () => { it('filters out ETH tokens that are not staked when pooled staking is disabled', () => { // Mock pooled staking as disabled - (selectPooledStakingEnabledFlag as unknown as jest.Mock).mockReturnValue( - false, - ); + (useFeatureFlag as unknown as jest.Mock).mockReturnValue(false); const mockTokens = [ { @@ -550,9 +564,7 @@ describe('EarnTokenList', () => { it('shows ETH tokens that are staked when pooled staking is disabled', () => { // Mock pooled staking as disabled - (selectPooledStakingEnabledFlag as unknown as jest.Mock).mockReturnValue( - false, - ); + (useFeatureFlag as unknown as jest.Mock).mockReturnValue(false); const mockTokens = [ { @@ -609,9 +621,7 @@ describe('EarnTokenList', () => { it('shows ETH tokens that are not staked when pooled staking is enabled', () => { // Mock pooled staking as enabled - (selectPooledStakingEnabledFlag as unknown as jest.Mock).mockReturnValue( - true, - ); + (useFeatureFlag as unknown as jest.Mock).mockReturnValue(true); const mockTokens = [ { @@ -668,9 +678,7 @@ describe('EarnTokenList', () => { it('shows non-ETH tokens regardless of pooled staking status', () => { // Mock pooled staking as disabled - (selectPooledStakingEnabledFlag as unknown as jest.Mock).mockReturnValue( - false, - ); + (useFeatureFlag as unknown as jest.Mock).mockReturnValue(false); const mockTokens = [ { diff --git a/app/components/UI/Earn/components/EarnTokenList/index.tsx b/app/components/UI/Earn/components/EarnTokenList/index.tsx index 4c2550eab75e..1e54245725fa 100644 --- a/app/components/UI/Earn/components/EarnTokenList/index.tsx +++ b/app/components/UI/Earn/components/EarnTokenList/index.tsx @@ -34,10 +34,11 @@ import Engine from '../../../../../core/Engine'; import SkeletonPlaceholder from 'react-native-skeleton-placeholder'; import useEarnTokens from '../../hooks/useEarnTokens'; import { useSelector } from 'react-redux'; +import { selectStablecoinLendingEnabledFlag } from '../../selectors/featureFlags'; import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../selectors/featureFlags'; + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../components/hooks/useFeatureFlag'; import useEarnNetworkPolling from '../../hooks/useEarnNetworkPolling'; import { EARN_INPUT_VIEW_ACTIONS } from '../../Views/EarnInputView/EarnInputView.types'; import EarnDepositTokenListItem from '../EarnDepositTokenListItem'; @@ -99,7 +100,9 @@ const EarnTokenList = () => { const bottomSheetRef = useRef(null); const traceEndedRef = useRef(false); - const isPooledStakingEnabled = useSelector(selectPooledStakingEnabledFlag); + const isPooledStakingEnabled = useFeatureFlag( + FeatureFlagNames.earnPooledStakingEnabled, + ); const { includeReceiptTokens } = params?.tokenFilter ?? {}; const { earnTokens, earnOutputTokens, earnableTotalFiatFormatted } = diff --git a/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.test.tsx b/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.test.tsx index 6316288d77d3..060bc6fd92f5 100644 --- a/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.test.tsx +++ b/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.test.tsx @@ -11,7 +11,7 @@ import { selectRewardsCardSpendFeatureFlags, selectRewardsMusdDepositEnabledFlag, } from '../../../../../../../selectors/featureFlagController/rewards'; -import { selectPredictEnabledFlag } from '../../../../../Predict/selectors/featureFlags'; +import { useFeatureFlag } from '../../../../../../../components/hooks/useFeatureFlag'; import { MetaMetricsEvents } from '../../../../../../hooks/useMetrics'; import { RewardsMetricsButtons } from '../../../../utils'; @@ -58,6 +58,17 @@ jest.mock('../../../../../../hooks/useMetrics', () => ({ }, })); +// Mock useFeatureFlag hook +jest.mock('../../../../../../../components/hooks/useFeatureFlag', () => { + const actual = jest.requireActual( + '../../../../../../../components/hooks/useFeatureFlag', + ); + return { + useFeatureFlag: jest.fn(), + FeatureFlagNames: actual.FeatureFlagNames, + }; +}); + // Mock getNativeAssetForChainId jest.mock('@metamask/bridge-controller', () => ({ getNativeAssetForChainId: jest.fn(() => ({ @@ -71,6 +82,10 @@ const mockUseNavigation = useNavigation as jest.MockedFunction< typeof useNavigation >; +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag +>; + // Mock i18n strings jest.mock('../../../../../../../../locales/i18n', () => ({ strings: jest.fn((key: string) => { @@ -207,14 +222,13 @@ describe('WaysToEarn', () => { if (selector === selectRewardsCardSpendFeatureFlags) { return mockIsCardSpendEnabled; } - if (selector === selectPredictEnabledFlag) { - return mockIsPredictEnabled; - } if (selector === selectRewardsMusdDepositEnabledFlag) { return mockIsMusdDepositEnabled; } return undefined; }); + // Mock useFeatureFlag for predict flag + mockUseFeatureFlag.mockReturnValue(mockIsPredictEnabled); }); it('renders the component title', () => { @@ -503,6 +517,7 @@ describe('WaysToEarn', () => { // Enable flag mockIsPredictEnabled = true; + mockUseFeatureFlag.mockReturnValue(mockIsPredictEnabled); rerender(); // Assert visible now @@ -513,6 +528,7 @@ describe('WaysToEarn', () => { it('opens modal for predict earning way when pressed', () => { // Arrange mockIsPredictEnabled = true; + mockUseFeatureFlag.mockReturnValue(mockIsPredictEnabled); const { getByText } = render(); const predictButton = getByText('Prediction markets'); @@ -541,6 +557,7 @@ describe('WaysToEarn', () => { it('navigates to predict market list when predict CTA is pressed', () => { // Arrange mockIsPredictEnabled = true; + mockUseFeatureFlag.mockReturnValue(mockIsPredictEnabled); const { getByText } = render(); const predictButton = getByText('Prediction markets'); diff --git a/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.tsx b/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.tsx index 804cfae36dbc..8dfcab62b0fe 100644 --- a/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.tsx +++ b/app/components/UI/Rewards/components/Tabs/OverviewTab/WaysToEarn/WaysToEarn.tsx @@ -31,7 +31,10 @@ import { selectRewardsCardSpendFeatureFlags, selectRewardsMusdDepositEnabledFlag, } from '../../../../../../../selectors/featureFlagController/rewards'; -import { selectPredictEnabledFlag } from '../../../../../Predict/selectors/featureFlags'; +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../../hooks/useFeatureFlag'; import { PredictEventValues } from '../../../../../Predict/constants/eventNames'; import { MetaMetricsEvents, @@ -231,7 +234,9 @@ export const WaysToEarn = () => { const navigation = useNavigation(); const isFirstTimePerpsUser = useSelector(selectIsFirstTimePerpsUser); const isCardSpendEnabled = useSelector(selectRewardsCardSpendFeatureFlags); - const isPredictEnabled = useSelector(selectPredictEnabledFlag); + const isPredictEnabled = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ); const isMusdDepositEnabled = useSelector(selectRewardsMusdDepositEnabledFlag); const { trackEvent, createEventBuilder } = useMetrics(); diff --git a/app/components/UI/Stake/components/StakeButton/StakeButton.test.tsx b/app/components/UI/Stake/components/StakeButton/StakeButton.test.tsx index db0c3c2fdd11..22040519791f 100644 --- a/app/components/UI/Stake/components/StakeButton/StakeButton.test.tsx +++ b/app/components/UI/Stake/components/StakeButton/StakeButton.test.tsx @@ -16,15 +16,17 @@ import useStakingEligibility from '../../hooks/useStakingEligibility'; import { RootState } from '../../../../../reducers'; import { SolScope } from '@metamask/keyring-api'; import Engine from '../../../../../core/Engine'; -import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../../Earn/selectors/featureFlags'; +import { selectStablecoinLendingEnabledFlag } from '../../../Earn/selectors/featureFlags'; +import { useFeatureFlag } from '../../../../../components/hooks/useFeatureFlag'; import { TokenI } from '../../../Tokens/types'; import { EARN_EXPERIENCES } from '../../../Earn/constants/experiences'; const mockNavigate = jest.fn(); +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag +>; + const MOCK_APR_VALUES: { [symbol: string]: string } = { Ethereum: '2.3', USDC: '4.5', @@ -81,10 +83,19 @@ jest.mock('../../../../../util/environment', () => ({ // Mock the feature flags selector jest.mock('../../../Earn/selectors/featureFlags', () => ({ - selectPooledStakingEnabledFlag: jest.fn().mockReturnValue(true), selectStablecoinLendingEnabledFlag: jest.fn().mockReturnValue(true), })); +jest.mock('../../../../../components/hooks/useFeatureFlag', () => { + const actual = jest.requireActual( + '../../../../../components/hooks/useFeatureFlag', + ); + return { + useFeatureFlag: jest.fn().mockReturnValue(true), + FeatureFlagNames: actual.FeatureFlagNames, + }; +}); + jest.mock('../../../../../selectors/earnController/earn', () => { const { EARN_EXPERIENCES } = jest.requireActual( '../../../Earn/constants/experiences', @@ -331,11 +342,7 @@ describe('StakeButton', () => { }); it('does not render button when all earn experiences are disabled', () => { - ( - selectPooledStakingEnabledFlag as jest.MockedFunction< - typeof selectPooledStakingEnabledFlag - > - ).mockReturnValue(false); + mockUseFeatureFlag.mockReturnValue(false); ( selectStablecoinLendingEnabledFlag as jest.MockedFunction< typeof selectStablecoinLendingEnabledFlag @@ -348,11 +355,7 @@ describe('StakeButton', () => { }); it('does not render button when all pooled staking experience is disabled and token is ETH', () => { - ( - selectPooledStakingEnabledFlag as jest.MockedFunction< - typeof selectPooledStakingEnabledFlag - > - ).mockReturnValue(false); + mockUseFeatureFlag.mockReturnValue(false); ( selectStablecoinLendingEnabledFlag as jest.MockedFunction< typeof selectStablecoinLendingEnabledFlag diff --git a/app/components/UI/Stake/components/StakeButton/index.tsx b/app/components/UI/Stake/components/StakeButton/index.tsx index 4b6865c2c26b..543493ccd77e 100644 --- a/app/components/UI/Stake/components/StakeButton/index.tsx +++ b/app/components/UI/Stake/components/StakeButton/index.tsx @@ -22,10 +22,11 @@ import { useTheme } from '../../../../../util/theme'; import { MetaMetricsEvents, useMetrics } from '../../../../hooks/useMetrics'; import { EARN_EXPERIENCES } from '../../../Earn/constants/experiences'; import useEarnTokens from '../../../Earn/hooks/useEarnTokens'; +import { selectStablecoinLendingEnabledFlag } from '../../../Earn/selectors/featureFlags'; import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../../Earn/selectors/featureFlags'; + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../components/hooks/useFeatureFlag'; import createStyles from '../../../Tokens/styles'; import { BrowserTab, TokenI } from '../../../Tokens/types'; import { EVENT_LOCATIONS } from '../../constants/events'; @@ -53,7 +54,9 @@ const StakeButtonContent = ({ asset }: StakeButtonProps) => { const { isEligible } = useStakingEligibility(); const { isStakingSupportedChain } = useStakingChain(); - const isPooledStakingEnabled = useSelector(selectPooledStakingEnabledFlag); + const isPooledStakingEnabled = useFeatureFlag( + FeatureFlagNames.earnPooledStakingEnabled, + ); const isStablecoinLendingEnabled = useSelector( selectStablecoinLendingEnabledFlag, ); diff --git a/app/components/UI/Stake/components/StakingBalance/StakingBalance.test.tsx b/app/components/UI/Stake/components/StakingBalance/StakingBalance.test.tsx index 5d0530865d09..b726e39c9003 100644 --- a/app/components/UI/Stake/components/StakingBalance/StakingBalance.test.tsx +++ b/app/components/UI/Stake/components/StakingBalance/StakingBalance.test.tsx @@ -21,7 +21,10 @@ import { getMockUseEarnTokens, } from '../../../Earn/__mocks__/earnMockData'; import { EARN_EXPERIENCES } from '../../../Earn/constants/experiences'; -import { selectPooledStakingEnabledFlag } from '../../../Earn/selectors/featureFlags'; +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../components/hooks/useFeatureFlag'; import { TokenI } from '../../../Tokens/types'; const mockEarnTokenPair = getMockUseEarnTokens(EARN_EXPERIENCES.POOLED_STAKING); @@ -49,8 +52,8 @@ jest.mock('../../../../../selectors/earnController', () => ({ }, })); -type MockSelectPooledStakingEnabledFlagSelector = jest.MockedFunction< - typeof selectPooledStakingEnabledFlag +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag >; const MOCK_ADDRESS_1 = '0x0'; @@ -177,13 +180,23 @@ jest.mock('../../../../../core/Engine', () => ({ })); jest.mock('../../../Earn/selectors/featureFlags', () => ({ - selectPooledStakingEnabledFlag: jest.fn(), + selectPooledStakingEnabledFlag: jest.fn().mockReturnValue(true), selectStablecoinLendingEnabledFlag: jest.fn(), selectPooledStakingServiceInterruptionBannerEnabledFlag: jest .fn() .mockReturnValue(false), })); +jest.mock('../../../../../components/hooks/useFeatureFlag', () => { + const actual = jest.requireActual( + '../../../../../components/hooks/useFeatureFlag', + ); + return { + ...actual, + useFeatureFlag: jest.fn(), + }; +}); + afterEach(() => { jest.clearAllMocks(); }); @@ -191,9 +204,12 @@ afterEach(() => { describe('StakingBalance', () => { beforeEach(() => { jest.resetAllMocks(); - ( - selectPooledStakingEnabledFlag as MockSelectPooledStakingEnabledFlagSelector - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.earnPooledStakingEnabled) { + return true; + } + return false; + }); (earnSelectors.selectEarnToken as unknown as jest.Mock).mockImplementation( (_token: TokenI) => { const experienceType = @@ -296,9 +312,12 @@ describe('StakingBalance', () => { }); it('should not render stake cta if pooled staking is disabled', () => { - ( - selectPooledStakingEnabledFlag as MockSelectPooledStakingEnabledFlagSelector - ).mockReturnValue(false); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.earnPooledStakingEnabled) { + return false; + } + return false; + }); const { getByText, getByTestId, queryByText } = renderWithProvider( , @@ -345,9 +364,12 @@ describe('StakingBalance', () => { // We don't want to prevent users from withdrawing their ETH regardless of feature flags. it('should render unstake and claim buttons even if pooled-staking feature flag is disabled', () => { - ( - selectPooledStakingEnabledFlag as MockSelectPooledStakingEnabledFlagSelector - ).mockReturnValue(false); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.earnPooledStakingEnabled) { + return false; + } + return false; + }); const { getByText, getByTestId, queryByText } = renderWithProvider( , diff --git a/app/components/UI/Stake/components/StakingBalance/StakingBalance.tsx b/app/components/UI/Stake/components/StakingBalance/StakingBalance.tsx index e7ea338cb23a..b6e6165ce939 100644 --- a/app/components/UI/Stake/components/StakingBalance/StakingBalance.tsx +++ b/app/components/UI/Stake/components/StakingBalance/StakingBalance.tsx @@ -49,7 +49,10 @@ import UnstakingBanner from './StakingBanners/UnstakeBanner/UnstakeBanner'; import StakingButtons from './StakingButtons/StakingButtons'; import StakingCta from './StakingCta/StakingCta'; import { filterExitRequests } from './utils'; -import { selectPooledStakingEnabledFlag } from '../../../Earn/selectors/featureFlags'; +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../components/hooks/useFeatureFlag'; import PercentageChange from '../../../../../component-library/components-temp/Price/PercentageChange'; import { useTokenPricePercentageChange } from '../../../Tokens/hooks/useTokenPricePercentageChange'; import StakingEarnings from '../StakingEarnings'; @@ -70,7 +73,9 @@ const StakingBalanceContent = ({ asset }: StakingBalanceProps) => { selectNetworkConfigurationByChainId(state, asset.chainId as Hex), ); - const isPooledStakingEnabled = useSelector(selectPooledStakingEnabledFlag); + const isPooledStakingEnabled = useFeatureFlag( + FeatureFlagNames.earnPooledStakingEnabled, + ); const { isEligible: isEligibleForPooledStaking } = useStakingEligibility(); diff --git a/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.test.tsx b/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.test.tsx index baedbfff2a8f..c510617e64ce 100644 --- a/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.test.tsx +++ b/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.test.tsx @@ -16,18 +16,16 @@ import { ParamListBase, } from '@react-navigation/native'; import { MOCK_ETH_MAINNET_ASSET } from '../../../__mocks__/stakeMockData'; -import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../../../Earn/selectors/featureFlags'; +import { selectStablecoinLendingEnabledFlag } from '../../../../Earn/selectors/featureFlags'; +import { useFeatureFlag } from '../../../../../../components/hooks/useFeatureFlag'; import { TokenI } from '../../../../Tokens/types'; import { EARN_EXPERIENCES } from '../../../../Earn/constants/experiences'; import { getMockUseEarnTokens } from '../../../../Earn/__mocks__/earnMockData'; const mockEarnTokenPair = getMockUseEarnTokens(EARN_EXPERIENCES.POOLED_STAKING); -type MockSelectPooledStakingEnabledFlagSelector = jest.MockedFunction< - typeof selectPooledStakingEnabledFlag +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag >; const MOCK_APR_VALUES: { [symbol: string]: string } = { @@ -79,10 +77,27 @@ jest.mock('@react-navigation/native', () => ({ })); jest.mock('../../../../Earn/selectors/featureFlags', () => ({ - selectPooledStakingEnabledFlag: jest.fn(), + selectPooledStakingEnabledFlag: jest.fn().mockReturnValue(true), selectStablecoinLendingEnabledFlag: jest.fn(), })); +jest.mock('../../../../../../components/hooks/useFeatureFlag', () => { + const actual = jest.requireActual( + '../../../../../../components/hooks/useFeatureFlag', + ); + return { + useFeatureFlag: jest.fn().mockReturnValue(true), + FeatureFlagNames: actual.FeatureFlagNames, + }; +}); + +jest.mock('../../../../../../components/hooks/useFeatureFlag', () => ({ + useFeatureFlag: jest.fn(), + FeatureFlagNames: { + earnPooledStakingEnabled: 'earnPooledStakingEnabled', + }, +})); + jest.mock('../../../../../../core/Engine', () => ({ context: { NetworkController: { @@ -141,9 +156,7 @@ describe('StakingButtons', () => { dispatch: jest.fn(), } as unknown as NavigationProp); - ( - selectPooledStakingEnabledFlag as MockSelectPooledStakingEnabledFlagSelector - ).mockReturnValue(true); + mockUseFeatureFlag.mockReturnValue(true); ( selectStablecoinLendingEnabledFlag as jest.MockedFunction< typeof selectStablecoinLendingEnabledFlag @@ -166,9 +179,7 @@ describe('StakingButtons', () => { }); it('should not render stake/stake more button if pooled staking is disabled', () => { - ( - selectPooledStakingEnabledFlag as MockSelectPooledStakingEnabledFlagSelector - ).mockReturnValue(false); + mockUseFeatureFlag.mockReturnValue(false); const props = { style: {}, diff --git a/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.tsx b/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.tsx index 8a02e3604e9a..e9dc7e8a54a4 100644 --- a/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.tsx +++ b/app/components/UI/Stake/components/StakingBalance/StakingButtons/StakingButtons.tsx @@ -13,7 +13,10 @@ import { RootState } from '../../../../../../reducers'; import { earnSelectors } from '../../../../../../selectors/earnController'; import { selectEvmChainId } from '../../../../../../selectors/networkController'; import { MetaMetricsEvents, useMetrics } from '../../../../../hooks/useMetrics'; -import { selectPooledStakingEnabledFlag } from '../../../../Earn/selectors/featureFlags'; +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../../../../components/hooks/useFeatureFlag'; import { TokenI } from '../../../../Tokens/types'; import { EVENT_LOCATIONS } from '../../../constants/events'; import useStakingChain from '../../../hooks/useStakingChain'; @@ -39,7 +42,9 @@ const StakingButtons = ({ const { trackEvent, createEventBuilder } = useMetrics(); const chainId = useSelector(selectEvmChainId); - const isPooledStakingEnabled = useSelector(selectPooledStakingEnabledFlag); + const isPooledStakingEnabled = useFeatureFlag( + FeatureFlagNames.earnPooledStakingEnabled, + ) as boolean; const { isStakingSupportedChain } = useStakingChain(); diff --git a/app/components/Views/ActivityView/index.js b/app/components/Views/ActivityView/index.js index 52e238d57ea5..3c0baddb27d8 100644 --- a/app/components/Views/ActivityView/index.js +++ b/app/components/Views/ActivityView/index.js @@ -52,8 +52,7 @@ import { useTheme } from '../../../util/theme'; import TabBar from '../../Base/TabBar'; import { getTransactionsNavbarOptions } from '../../UI/Navbar'; import { createNetworkManagerNavDetails } from '../../UI/NetworkManager'; -import { selectPerpsEnabledFlag } from '../../UI/Perps'; -import { selectPredictEnabledFlag } from '../../UI/Predict/selectors/featureFlags'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import PredictTransactionsView from '../../UI/Predict/views/PredictTransactionsView/PredictTransactionsView'; import PerpsTransactionsView from '../../UI/Perps/Views/PerpsTransactionsView'; import { PerpsConnectionProvider } from '../../UI/Perps/providers/PerpsConnectionProvider'; @@ -176,13 +175,17 @@ const ActivityView = () => { const tabViewRef = useRef(); const params = useParams(); - const perpsEnabledFlag = useSelector(selectPerpsEnabledFlag); + const perpsEnabledFlag = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ); const isPerpsEnabled = useMemo( () => perpsEnabledFlag && isEvmSelected, [perpsEnabledFlag, isEvmSelected], ); const [activeTabIndex, setActiveTabIndex] = useState(0); - const predictEnabledFlag = useSelector(selectPredictEnabledFlag); + const predictEnabledFlag = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ); const isPredictEnabled = useMemo( () => predictEnabledFlag, [predictEnabledFlag], diff --git a/app/components/Views/FeatureFlagOverride/FeatureFlagOverride.test.tsx b/app/components/Views/FeatureFlagOverride/FeatureFlagOverride.test.tsx index 8ece0d1a6508..a1df559fd280 100644 --- a/app/components/Views/FeatureFlagOverride/FeatureFlagOverride.test.tsx +++ b/app/components/Views/FeatureFlagOverride/FeatureFlagOverride.test.tsx @@ -10,7 +10,6 @@ import { FeatureFlagInfo, isMinimumRequiredVersionSupported, } from '../../../util/feature-flags'; -import { FeatureFlagNames } from '../../hooks/useFeatureFlag'; // Mock all dependencies jest.mock('@react-navigation/native', () => ({ @@ -76,6 +75,18 @@ jest.mock('../../../util/feature-flags', () => ({ isMinimumRequiredVersionSupported: jest.fn(), })); +// Mock FeatureFlagNames to include testFlag for testing +jest.mock('../../hooks/useFeatureFlag', () => { + const actual = jest.requireActual('../../hooks/useFeatureFlag'); + return { + ...actual, + FeatureFlagNames: { + ...actual.FeatureFlagNames, + testFlag: 'testFlag', + }, + }; +}); + describe('FeatureFlagOverride', () => { let mockNavigation: ReturnType; // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -659,7 +670,7 @@ describe('FeatureFlagOverride', () => { (isMinimumRequiredVersionSupported as jest.Mock).mockReturnValue(false); const versionFlag = createMockFeatureFlag( - FeatureFlagNames.rewardsEnabled, + 'testFlag', 'boolean with minimumVersion', { enabled: true, @@ -787,13 +798,7 @@ describe('FeatureFlagOverride', () => { setOverride: jest.fn(), removeOverride: jest.fn(), clearAllOverrides: jest.fn(), - featureFlagsList: [ - createMockFeatureFlag( - FeatureFlagNames.rewardsEnabled, - 'boolean', - false, - ), - ], + featureFlagsList: [createMockFeatureFlag('testFlag', 'boolean', false)], }); render(); diff --git a/app/components/Views/Settings/DeveloperOptions/index.test.tsx b/app/components/Views/Settings/DeveloperOptions/index.test.tsx index 85004da0e626..ac3b93bc9693 100644 --- a/app/components/Views/Settings/DeveloperOptions/index.test.tsx +++ b/app/components/Views/Settings/DeveloperOptions/index.test.tsx @@ -1,15 +1,24 @@ import { backgroundState } from '../../../../util/test/initial-root-state'; import DeveloperOptions from './'; import { renderScreen } from '../../../../util/test/renderWithProvider'; - -const mockSelectPerpsEnabledFlag = jest.fn(); - -jest.mock('../../../UI/Perps/selectors/featureFlags', () => ({ - selectPerpsEnabledFlag: () => mockSelectPerpsEnabledFlag(), -})); +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../hooks/useFeatureFlag'; + +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag +>; + +jest.mock('../../../hooks/useFeatureFlag', () => { + const actual = jest.requireActual('../../../hooks/useFeatureFlag'); + return { + ...actual, + useFeatureFlag: jest.fn(), + }; +}); const initialState = { - DeveloperOptions: {}, engine: { backgroundState, }, @@ -18,7 +27,12 @@ const initialState = { describe('DeveloperOptions', () => { beforeEach(() => { jest.clearAllMocks(); - mockSelectPerpsEnabledFlag.mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); }); it('renders correctly', () => { @@ -31,7 +45,12 @@ describe('DeveloperOptions', () => { }); it('does not render PerpsDeveloperOptionsSection when Perps is not enabled', () => { - mockSelectPerpsEnabledFlag.mockReturnValue(false); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return false; + } + return false; + }); const { queryByText } = renderScreen( DeveloperOptions, diff --git a/app/components/Views/Settings/DeveloperOptions/index.tsx b/app/components/Views/Settings/DeveloperOptions/index.tsx index fa84445ad7ec..a2887c200621 100644 --- a/app/components/Views/Settings/DeveloperOptions/index.tsx +++ b/app/components/Views/Settings/DeveloperOptions/index.tsx @@ -13,8 +13,10 @@ import SentryTest from './SentryTest'; import SampleFeatureDevSettingsEntryPoint from '../../../../features/SampleFeature/components/views/SampleFeatureDevSettingsEntryPoint/SampleFeatureDevSettingsEntryPoint'; ///: END:ONLY_INCLUDE_IF import { PerpsDeveloperOptionsSection } from '../../../UI/Perps/components/PerpsDeveloperOptionsSection/PerpsDeveloperOptionsSection'; -import { useSelector } from 'react-redux'; -import { selectPerpsEnabledFlag } from '../../../UI/Perps'; +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../hooks/useFeatureFlag'; import { ConfirmationsDeveloperOptions } from '../../confirmations/components/developer/confirmations-developer-options'; const DeveloperOptions = () => { @@ -26,7 +28,9 @@ const DeveloperOptions = () => { const { colors } = theme; const { styles } = useStyles(styleSheet, { theme }); - const isPerpsEnabled = useSelector(selectPerpsEnabledFlag); + const isPerpsEnabled = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ) as boolean; useEffect( () => { diff --git a/app/components/Views/TradeWalletActions/TradeWalletActions.test.tsx b/app/components/Views/TradeWalletActions/TradeWalletActions.test.tsx index 60fc6a1fe204..fb3b4c0d35e9 100644 --- a/app/components/Views/TradeWalletActions/TradeWalletActions.test.tsx +++ b/app/components/Views/TradeWalletActions/TradeWalletActions.test.tsx @@ -14,14 +14,10 @@ import { } from '../../../util/test/accountsControllerTestUtils'; import { backgroundState } from '../../../util/test/initial-root-state'; import { mockNetworkState } from '../../../util/test/network'; -import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../UI/Earn/selectors/featureFlags'; +import { selectStablecoinLendingEnabledFlag } from '../../UI/Earn/selectors/featureFlags'; import { EarnTokenDetails } from '../../UI/Earn/types/lending.types'; -import { selectPerpsEnabledFlag } from '../../UI/Perps'; import { selectIsFirstTimePerpsUser } from '../../UI/Perps/selectors/perpsController'; -import { selectPredictEnabledFlag } from '../../UI/Predict'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import { selectIsEvmNetworkSelected } from '../../../selectors/multichainNetworkController'; import TradeWalletActions from './TradeWalletActions'; @@ -29,21 +25,21 @@ jest.mock('react-native-device-info', () => ({ getVersion: jest.fn().mockReturnValue('1.0.0'), })); -jest.mock('../../UI/Perps', () => ({ - selectPerpsEnabledFlag: jest.fn(), -})); - jest.mock('../../UI/Perps/selectors/perpsController', () => ({ selectIsFirstTimePerpsUser: jest.fn(), })); -jest.mock('../../UI/Predict', () => ({ - selectPredictEnabledFlag: jest.fn(), -})); - jest.mock('../../UI/Earn/selectors/featureFlags', () => ({ selectStablecoinLendingEnabledFlag: jest.fn(), - selectPooledStakingEnabledFlag: jest.fn(), +})); + +jest.mock('../../hooks/useFeatureFlag', () => ({ + useFeatureFlag: jest.fn(), + FeatureFlagNames: { + perpsPerpTradingEnabled: 'perpsPerpTradingEnabled', + predictTradingEnabled: 'predictTradingEnabled', + earnPooledStakingEnabled: 'earnPooledStakingEnabled', + }, })); jest.mock('../../../selectors/earnController/earn', () => ({ @@ -248,6 +244,10 @@ const mockInitialState: DeepPartial = { const mockNavigate = jest.fn(); const mockGoBack = jest.fn(); +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag +>; + jest.mock('@react-navigation/native', () => { const actualReactNavigation = jest.requireActual('@react-navigation/native'); return { @@ -361,11 +361,12 @@ describe('TradeWalletActions', () => { typeof selectStablecoinLendingEnabledFlag > ).mockReturnValue(true); - ( - selectPooledStakingEnabledFlag as jest.MockedFunction< - typeof selectPooledStakingEnabledFlag - > - ).mockReturnValue(false); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.earnPooledStakingEnabled) { + return false; + } + return false; + }); ( earnSelectors.selectEarnTokens as jest.MockedFunction< @@ -408,11 +409,12 @@ describe('TradeWalletActions', () => { }); it('should render the Perpetuals button if the Perps feature flag is enabled', () => { - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); const { getByTestId } = renderScreen( TradeWalletActions, @@ -430,11 +432,12 @@ describe('TradeWalletActions', () => { }); it('should render the Predict button if the Predict feature flag is enabled', () => { - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.predictTradingEnabled) { + return true; + } + return false; + }); const { getByTestId } = renderScreen( TradeWalletActions, @@ -452,11 +455,12 @@ describe('TradeWalletActions', () => { }); it('should set up perps navigation to markets for returning users', () => { - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); ( selectIsFirstTimePerpsUser as jest.MockedFunction< typeof selectIsFirstTimePerpsUser @@ -483,11 +487,12 @@ describe('TradeWalletActions', () => { }); it('should set up perps navigation to tutorial for first-time users', () => { - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); ( selectIsFirstTimePerpsUser as jest.MockedFunction< typeof selectIsFirstTimePerpsUser @@ -510,11 +515,12 @@ describe('TradeWalletActions', () => { }); it.skip('should navigate to Predict markets when user presses Predict button', async () => { - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.predictTradingEnabled) { + return true; + } + return false; + }); const { getByTestId } = renderScreen( TradeWalletActions, @@ -551,21 +557,16 @@ describe('TradeWalletActions', () => { typeof selectStablecoinLendingEnabledFlag > ).mockReturnValue(true); - ( - selectPooledStakingEnabledFlag as jest.MockedFunction< - typeof selectPooledStakingEnabledFlag - > - ).mockReturnValue(true); - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if ( + flagName === FeatureFlagNames.earnPooledStakingEnabled || + flagName === FeatureFlagNames.perpsPerpTradingEnabled || + flagName === FeatureFlagNames.predictTradingEnabled + ) { + return true; + } + return false; + }); (selectCanSignTransactions as unknown as jest.Mock).mockReturnValue(false); const mockStateWithoutSigningAndStablecoinLendingEnabled: DeepPartial = @@ -627,12 +628,13 @@ describe('TradeWalletActions', () => { expect(mockOnDismiss).not.toHaveBeenCalled(); }); - it('should show Predict button on non-EVM networks', () => { - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + it('should not show Predict button on non-EVM networks', () => { + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.predictTradingEnabled) { + return true; + } + return false; + }); ( selectIsEvmNetworkSelected as jest.MockedFunction< typeof selectIsEvmNetworkSelected diff --git a/app/components/Views/TradeWalletActions/TradeWalletActions.tsx b/app/components/Views/TradeWalletActions/TradeWalletActions.tsx index c613f9c4067a..e3ceefe37f4d 100644 --- a/app/components/Views/TradeWalletActions/TradeWalletActions.tsx +++ b/app/components/Views/TradeWalletActions/TradeWalletActions.tsx @@ -42,12 +42,8 @@ import { useSwapBridgeNavigation, } from '../../UI/Bridge/hooks/useSwapBridgeNavigation'; import { EARN_INPUT_VIEW_ACTIONS } from '../../UI/Earn/Views/EarnInputView/EarnInputView.types'; -import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../UI/Earn/selectors/featureFlags'; -import { selectPerpsEnabledFlag } from '../../UI/Perps'; -import { selectPredictEnabledFlag } from '../../UI/Predict'; +import { selectStablecoinLendingEnabledFlag } from '../../UI/Earn/selectors/featureFlags'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import { PredictEventValues } from '../../UI/Predict/constants/eventNames'; import { EVENT_LOCATIONS as STAKE_EVENT_LOCATIONS } from '../../UI/Stake/constants/events'; import { MetaMetricsEvents, useMetrics } from '../../hooks/useMetrics'; @@ -86,14 +82,20 @@ function TradeWalletActions() { const isSwapsEnabled = useSelector((state: RootState) => selectIsSwapsEnabled(state), ); - const isPooledStakingEnabled = useSelector(selectPooledStakingEnabledFlag); + const isPooledStakingEnabled = useFeatureFlag( + FeatureFlagNames.earnPooledStakingEnabled, + ); const { trackEvent, createEventBuilder } = useMetrics(); const navigation = useNavigation(); const canSignTransactions = useSelector(selectCanSignTransactions); - const isPerpsEnabled = useSelector(selectPerpsEnabledFlag); - const isPredictEnabled = useSelector(selectPredictEnabledFlag); + const isPerpsEnabled = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ) as boolean; + const isPredictEnabled = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ) as boolean; const isEvmSelected = useSelector(selectIsEvmNetworkSelected); const isStablecoinLendingEnabled = useSelector( diff --git a/app/components/Views/Wallet/index.test.tsx b/app/components/Views/Wallet/index.test.tsx index c61f8d0da109..033f1b2cd916 100644 --- a/app/components/Views/Wallet/index.test.tsx +++ b/app/components/Views/Wallet/index.test.tsx @@ -50,27 +50,35 @@ jest.mock( }), ); -// Mock the Perps feature flag selector - will be controlled per test +// Mock the Perps feature flag - will be controlled per test let mockPerpsEnabled = true; let mockPerpsGTMModalEnabled = false; jest.mock('../../UI/Perps/selectors/featureFlags', () => ({ - selectPerpsEnabledFlag: jest.fn(() => mockPerpsEnabled), selectPerpsServiceInterruptionBannerEnabledFlag: jest.fn(() => false), selectPerpsGtmOnboardingModalEnabledFlag: jest.fn( () => mockPerpsGTMModalEnabled, ), })); -// Mock the Predict feature flag selector - will be controlled per test +// Mock the Predict feature flag - will be controlled per test let mockPredictEnabled = true; let mockPredictGTMModalEnabled = false; jest.mock('../../UI/Predict/selectors/featureFlags', () => ({ - selectPredictEnabledFlag: jest.fn(() => mockPredictEnabled), selectPredictGtmOnboardingModalEnabledFlag: jest.fn( () => mockPredictGTMModalEnabled, ), })); +// Mock useFeatureFlag hook +jest.mock('../../hooks/useFeatureFlag', () => ({ + useFeatureFlag: jest.fn(), + FeatureFlagNames: { + perpsPerpTradingEnabled: 'perpsPerpTradingEnabled', + predictTradingEnabled: 'predictTradingEnabled', + carouselBanners: 'carouselBanners', + }, +})); + // Create shared mock reference for TabsList let mockTabsListComponent: jest.Mock; @@ -102,6 +110,7 @@ import { MOCK_ACCOUNTS_CONTROLLER_STATE } from '../../../util/test/accountsContr import { WalletViewSelectorsIDs } from '../../../../e2e/selectors/wallet/WalletView.selectors'; import Engine from '../../../core/Engine'; import { useSelector } from 'react-redux'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import { mockedPerpsFeatureFlagsEnabledState } from '../../UI/Perps/mocks/remoteFeatureFlagMocks'; import { initialState as cardInitialState } from '../../../core/redux/slices/card'; import { NavigationProp, ParamListBase } from '@react-navigation/native'; @@ -1069,6 +1078,23 @@ describe('Wallet', () => { mockPerpsGTMModalEnabled = false; mockPredictEnabled = true; mockPredictGTMModalEnabled = false; + + // Set up useFeatureFlag mock + const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag + >; + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return mockPerpsEnabled; + } + if (flagName === FeatureFlagNames.predictTradingEnabled) { + return mockPredictEnabled; + } + if (flagName === FeatureFlagNames.carouselBanners) { + return true; // Default to enabled + } + return false; + }); }); afterEach(() => { diff --git a/app/components/Views/Wallet/index.tsx b/app/components/Views/Wallet/index.tsx index f05216dd4cd2..cc8596b7070e 100644 --- a/app/components/Views/Wallet/index.tsx +++ b/app/components/Views/Wallet/index.tsx @@ -170,19 +170,13 @@ import { useNetworksByNamespace, } from '../../hooks/useNetworksByNamespace/useNetworksByNamespace'; import { useNetworkSelection } from '../../hooks/useNetworkSelection/useNetworkSelection'; -import { - selectPerpsEnabledFlag, - selectPerpsGtmOnboardingModalEnabledFlag, -} from '../../UI/Perps'; +import { selectPerpsGtmOnboardingModalEnabledFlag } from '../../UI/Perps'; import PerpsTabView from '../../UI/Perps/Views/PerpsTabView'; -import { - selectPredictEnabledFlag, - selectPredictGtmOnboardingModalEnabledFlag, -} from '../../UI/Predict/selectors/featureFlags'; +import { selectPredictGtmOnboardingModalEnabledFlag } from '../../UI/Predict/selectors/featureFlags'; import PredictTabView from '../../UI/Predict/views/PredictTabView'; import { InitSendLocation } from '../confirmations/constants/send'; import { useSendNavigation } from '../confirmations/hooks/useSendNavigation'; -import { selectCarouselBannersFlag } from '../../UI/Carousel/selectors/featureFlags'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import { SolScope } from '@metamask/keyring-api'; import { selectSelectedInternalAccountByScope } from '../../../selectors/multichainAccounts/accounts'; import { EVM_SCOPE } from '../../UI/Earn/constants/networks'; @@ -247,7 +241,9 @@ interface WalletTokensTabViewProps { } const WalletTokensTabView = React.memo((props: WalletTokensTabViewProps) => { - const isPerpsFlagEnabled = useSelector(selectPerpsEnabledFlag); + const isPerpsFlagEnabled = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ); const isEvmSelected = useSelector(selectIsEvmNetworkSelected); const isMultichainAccountsState2Enabled = useSelector( selectMultichainAccountsState2Enabled, @@ -261,7 +257,9 @@ const WalletTokensTabView = React.memo((props: WalletTokensTabViewProps) => { (isEvmSelected || isMultichainAccountsState2Enabled), [isPerpsFlagEnabled, isEvmSelected, isMultichainAccountsState2Enabled], ); - const isPredictFlagEnabled = useSelector(selectPredictEnabledFlag); + const isPredictFlagEnabled = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ); const isPredictEnabled = useMemo( () => isPredictFlagEnabled, [isPredictFlagEnabled], @@ -515,12 +513,16 @@ const Wallet = ({ const walletRef = useRef(null); const theme = useTheme(); - const isPerpsFlagEnabled = useSelector(selectPerpsEnabledFlag); + const isPerpsFlagEnabled = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ); const isPerpsGTMModalEnabled = useSelector( selectPerpsGtmOnboardingModalEnabledFlag, ); - const isPredictFlagEnabled = useSelector(selectPredictEnabledFlag); + const isPredictFlagEnabled = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ); const isPredictGTMModalEnabled = useSelector( selectPredictGtmOnboardingModalEnabledFlag, ); @@ -955,7 +957,9 @@ const Wallet = ({ const isTokenDetectionEnabled = useSelector(selectUseTokenDetection); const isPopularNetworks = useSelector(selectIsPopularNetwork); const detectedTokens = useSelector(selectDetectedTokens) as TokenI[]; - const isCarouselBannersEnabled = useSelector(selectCarouselBannersFlag); + const isCarouselBannersEnabled = useFeatureFlag( + FeatureFlagNames.carouselBanners, + ); const allDetectedTokens = useSelector( selectAllDetectedTokensFlat, diff --git a/app/components/Views/WalletActions/WalletActions.test.tsx b/app/components/Views/WalletActions/WalletActions.test.tsx index eef26b865a29..3085dcb9acf1 100644 --- a/app/components/Views/WalletActions/WalletActions.test.tsx +++ b/app/components/Views/WalletActions/WalletActions.test.tsx @@ -14,35 +14,31 @@ import { } from '../../../util/test/accountsControllerTestUtils'; import { backgroundState } from '../../../util/test/initial-root-state'; import { mockNetworkState } from '../../../util/test/network'; -import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../UI/Earn/selectors/featureFlags'; +import { selectStablecoinLendingEnabledFlag } from '../../UI/Earn/selectors/featureFlags'; import { EarnTokenDetails } from '../../UI/Earn/types/lending.types'; import WalletActions from './WalletActions'; -import { selectPerpsEnabledFlag } from '../../UI/Perps'; import { selectIsFirstTimePerpsUser } from '../../UI/Perps/selectors/perpsController'; -import { selectPredictEnabledFlag } from '../../UI/Predict/selectors/featureFlags'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; jest.mock('react-native-device-info', () => ({ getVersion: jest.fn().mockReturnValue('1.0.0'), })); -jest.mock('../../UI/Perps', () => ({ - selectPerpsEnabledFlag: jest.fn(), -})); - jest.mock('../../UI/Perps/selectors/perpsController', () => ({ selectIsFirstTimePerpsUser: jest.fn(), })); -jest.mock('../../UI/Predict/selectors/featureFlags', () => ({ - selectPredictEnabledFlag: jest.fn(), -})); - jest.mock('../../UI/Earn/selectors/featureFlags', () => ({ selectStablecoinLendingEnabledFlag: jest.fn(), - selectPooledStakingEnabledFlag: jest.fn(), +})); + +jest.mock('../../hooks/useFeatureFlag', () => ({ + useFeatureFlag: jest.fn(), + FeatureFlagNames: { + perpsPerpTradingEnabled: 'perpsPerpTradingEnabled', + predictTradingEnabled: 'predictTradingEnabled', + earnPooledStakingEnabled: 'earnPooledStakingEnabled', + }, })); jest.mock('../../../selectors/earnController/earn', () => ({ @@ -243,6 +239,10 @@ const mockInitialState: DeepPartial = { const mockNavigate = jest.fn(); const mockGoBack = jest.fn(); +const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag +>; + jest.mock('@react-navigation/native', () => { const actualReactNavigation = jest.requireActual('@react-navigation/native'); return { @@ -271,6 +271,8 @@ describe('WalletActions', () => { beforeEach(() => { // Clear all mocks first for test isolation jest.clearAllMocks(); + // Default mock: all feature flags disabled + mockUseFeatureFlag.mockReturnValue(false); }); afterEach(() => { @@ -364,11 +366,12 @@ describe('WalletActions', () => { typeof selectStablecoinLendingEnabledFlag > ).mockReturnValue(true); - ( - selectPooledStakingEnabledFlag as jest.MockedFunction< - typeof selectPooledStakingEnabledFlag - > - ).mockReturnValue(false); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.earnPooledStakingEnabled) { + return false; + } + return false; + }); ( earnSelectors.selectEarnTokens as jest.MockedFunction< @@ -405,11 +408,12 @@ describe('WalletActions', () => { }); it('should render the Perpetuals button if the Perps feature flag is enabled', () => { - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); const { getByTestId } = renderWithProvider(, { state: mockInitialState, @@ -421,11 +425,12 @@ describe('WalletActions', () => { }); it('should navigate to Perps markets when returning user presses Perpetuals button', async () => { - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); ( selectIsFirstTimePerpsUser as jest.MockedFunction< typeof selectIsFirstTimePerpsUser @@ -453,11 +458,12 @@ describe('WalletActions', () => { }); it('should navigate to Perps tutorial when first-time user presses Perpetuals button', async () => { - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.perpsPerpTradingEnabled) { + return true; + } + return false; + }); ( selectIsFirstTimePerpsUser as jest.MockedFunction< typeof selectIsFirstTimePerpsUser @@ -480,11 +486,12 @@ describe('WalletActions', () => { }); it('should render the Predict button if the Predict feature flag is enabled', () => { - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.predictTradingEnabled) { + return true; + } + return false; + }); const { getByTestId } = renderWithProvider(, { state: mockInitialState, @@ -496,11 +503,12 @@ describe('WalletActions', () => { }); it('should call the onPredict function when the Predict button is pressed', async () => { - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if (flagName === FeatureFlagNames.predictTradingEnabled) { + return true; + } + return false; + }); const { getByTestId } = renderWithProvider(, { state: mockInitialState, @@ -528,21 +536,16 @@ describe('WalletActions', () => { typeof selectStablecoinLendingEnabledFlag > ).mockReturnValue(true); - ( - selectPooledStakingEnabledFlag as jest.MockedFunction< - typeof selectPooledStakingEnabledFlag - > - ).mockReturnValue(true); - ( - selectPerpsEnabledFlag as jest.MockedFunction< - typeof selectPerpsEnabledFlag - > - ).mockReturnValue(true); - ( - selectPredictEnabledFlag as jest.MockedFunction< - typeof selectPredictEnabledFlag - > - ).mockReturnValue(true); + mockUseFeatureFlag.mockImplementation((flagName) => { + if ( + flagName === FeatureFlagNames.earnPooledStakingEnabled || + flagName === FeatureFlagNames.perpsPerpTradingEnabled || + flagName === FeatureFlagNames.predictTradingEnabled + ) { + return true; + } + return false; + }); (selectCanSignTransactions as unknown as jest.Mock).mockReturnValue(false); // Import and mock selectIsSwapsEnabled to return false when can't sign diff --git a/app/components/Views/WalletActions/WalletActions.tsx b/app/components/Views/WalletActions/WalletActions.tsx index b3bfc7b1e71c..13413254b835 100644 --- a/app/components/Views/WalletActions/WalletActions.tsx +++ b/app/components/Views/WalletActions/WalletActions.tsx @@ -24,13 +24,9 @@ import styleSheet from './WalletActions.styles'; import { useMetrics } from '../../../components/hooks/useMetrics'; import { selectCanSignTransactions } from '../../../selectors/accountsController'; import { EVENT_LOCATIONS as STAKE_EVENT_LOCATIONS } from '../../UI/Stake/constants/events'; -import { - selectPooledStakingEnabledFlag, - selectStablecoinLendingEnabledFlag, -} from '../../UI/Earn/selectors/featureFlags'; -import { selectPerpsEnabledFlag } from '../../UI/Perps'; +import { selectStablecoinLendingEnabledFlag } from '../../UI/Earn/selectors/featureFlags'; import { PerpsEventValues } from '../../UI/Perps/constants/eventNames'; -import { selectPredictEnabledFlag } from '../../UI/Predict/selectors/featureFlags'; +import { useFeatureFlag, FeatureFlagNames } from '../../hooks/useFeatureFlag'; import { PredictEventValues } from '../../UI/Predict/constants/eventNames'; import { EARN_INPUT_VIEW_ACTIONS } from '../../UI/Earn/Views/EarnInputView/EarnInputView.types'; import { earnSelectors } from '../../../selectors/earnController/earn'; @@ -47,7 +43,9 @@ const WalletActions = () => { const { styles } = useStyles(styleSheet, {}); const sheetRef = useRef(null); const { navigate } = useNavigation(); - const isPooledStakingEnabled = useSelector(selectPooledStakingEnabledFlag); + const isPooledStakingEnabled = useFeatureFlag( + FeatureFlagNames.earnPooledStakingEnabled, + ); const { earnTokens } = useSelector(earnSelectors.selectEarnTokens); const isFirstTimePerpsUser = useSelector(selectIsFirstTimePerpsUser); @@ -58,8 +56,12 @@ const WalletActions = () => { const isSwapsEnabled = useSelector((state: RootState) => selectIsSwapsEnabled(state), ); - const isPerpsEnabled = useSelector(selectPerpsEnabledFlag); - const isPredictEnabled = useSelector(selectPredictEnabledFlag); + const isPerpsEnabled = useFeatureFlag( + FeatureFlagNames.perpsPerpTradingEnabled, + ) as boolean; + const isPredictEnabled = useFeatureFlag( + FeatureFlagNames.predictTradingEnabled, + ) as boolean; const isEvmSelected = useSelector(selectIsEvmNetworkSelected); const { trackEvent, createEventBuilder } = useMetrics(); const canSignTransactions = useSelector(selectCanSignTransactions); diff --git a/app/components/hooks/useFeatureFlag.ts b/app/components/hooks/useFeatureFlag.ts index 4bbfb9ebc0ef..3b0c01547caa 100644 --- a/app/components/hooks/useFeatureFlag.ts +++ b/app/components/hooks/useFeatureFlag.ts @@ -3,8 +3,18 @@ import { useFeatureFlagOverride } from '../../contexts/FeatureFlagOverrideContex import { selectBasicFunctionalityEnabled } from '../../selectors/settings'; export enum FeatureFlagNames { - rewardsEnabled = 'rewardsEnabled', otaUpdatesEnabled = 'otaUpdatesEnabled', + rewardsEnableCardSpend = 'rewardsEnableCardSpend', + rewardsEnableMusdDeposit = 'rewardsEnableMusdDeposit', + cardFeature = 'cardFeature', //remote config + sampleFeatureCounterEnabled = 'sampleFeatureCounterEnabled', + bridgeConfigV2 = 'bridgeConfigV2', //remote config + depositConfig = 'depositConfig', //remote config + earnPooledStakingEnabled = 'earnPooledStakingEnabled', + predictTradingEnabled = 'predictTradingEnabled', + perpsPerpTradingEnabled = 'perpsPerpTradingEnabled', + confirmationsPay = 'confirmations_pay', //remote config + carouselBanners = 'carouselBanners', } export const useFeatureFlag = (key: FeatureFlagNames) => { diff --git a/app/features/SampleFeature/components/views/SampleFeature.test.tsx b/app/features/SampleFeature/components/views/SampleFeature.test.tsx index 5141c37f47a7..0ce60d7a25c4 100644 --- a/app/features/SampleFeature/components/views/SampleFeature.test.tsx +++ b/app/features/SampleFeature/components/views/SampleFeature.test.tsx @@ -3,7 +3,7 @@ import { View } from 'react-native'; import renderWithProvider from '../../../../util/test/renderWithProvider'; import SampleFeature from './SampleFeature'; import initialRootState from '../../../../util/test/initial-root-state'; -import { selectSampleFeatureCounterEnabled } from '../../selectors/sampleFeatureCounter'; +import { useFeatureFlag } from '../../../../components/hooks/useFeatureFlag'; /** * Mock implementation for react-native Linking module @@ -16,10 +16,13 @@ jest.mock('react-native/Libraries/Linking/Linking', () => ({ })); /** - * Mock the feature flag selector to control test scenarios + * Mock the feature flag hook to control test scenarios */ -jest.mock('../../selectors/sampleFeatureCounter', () => ({ - selectSampleFeatureCounterEnabled: jest.fn(), +jest.mock('../../../../components/hooks/useFeatureFlag', () => ({ + useFeatureFlag: jest.fn(), + FeatureFlagNames: { + sampleFeatureCounterEnabled: 'sampleFeatureCounterEnabled', + }, })); /** @@ -51,10 +54,9 @@ jest.mock('./SamplePetNames/SamplePetNames', () => ({ * @group SampleFeature */ describe('SampleFeature', () => { - const mockSelectSampleFeatureCounterEnabled = - selectSampleFeatureCounterEnabled as jest.MockedFunction< - typeof selectSampleFeatureCounterEnabled - >; + const mockUseFeatureFlag = useFeatureFlag as jest.MockedFunction< + typeof useFeatureFlag + >; beforeEach(() => { jest.clearAllMocks(); @@ -67,7 +69,7 @@ describe('SampleFeature', () => { */ it('matches rendered snapshot when feature flag is enabled', () => { // Arrange - mockSelectSampleFeatureCounterEnabled.mockReturnValue(true); + mockUseFeatureFlag.mockReturnValue(true); // Act const { toJSON } = renderWithProvider(, { @@ -85,7 +87,7 @@ describe('SampleFeature', () => { */ it('matches rendered snapshot when feature flag is disabled', () => { // Arrange - mockSelectSampleFeatureCounterEnabled.mockReturnValue(false); + mockUseFeatureFlag.mockReturnValue(false); // Act const { toJSON } = renderWithProvider(, { diff --git a/app/features/SampleFeature/components/views/SampleFeature.tsx b/app/features/SampleFeature/components/views/SampleFeature.tsx index ca59ba8e319b..0f286130331c 100644 --- a/app/features/SampleFeature/components/views/SampleFeature.tsx +++ b/app/features/SampleFeature/components/views/SampleFeature.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { useSelector } from 'react-redux'; import { strings } from '../../../../../locales/i18n'; import Text, { @@ -14,7 +13,10 @@ import { useStyles } from '../../../../component-library/hooks'; import styleSheet from './SampleFeature.styles'; import { baseStyles } from '../../../../styles/common'; import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; -import { selectSampleFeatureCounterEnabled } from '../../selectors/sampleFeatureCounter'; +import { + useFeatureFlag, + FeatureFlagNames, +} from '../../../../components/hooks/useFeatureFlag'; /** * SampleFeature Component @@ -44,7 +46,9 @@ import { selectSampleFeatureCounterEnabled } from '../../selectors/sampleFeature const SampleFeature = () => { const { styles } = useStyles(styleSheet, {}); const { networkName, networkImageSource } = useSampleNetwork(); - const isCounterEnabled = useSelector(selectSampleFeatureCounterEnabled); + const isCounterEnabled = useFeatureFlag( + FeatureFlagNames.sampleFeatureCounterEnabled, + ) as boolean; return ( Date: Wed, 19 Nov 2025 16:00:02 +0100 Subject: [PATCH 07/13] fix: loading issues in asset details page (#22916) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** While testing the trending feature I came across two existing issues that had been happening on the Asset Details page for a long time but on a very flaky basis. Here are both issues: - Asset details showing (+infinity%) and flat line: when navigating to an EVM asset details page, there is a possibility that the price API returns an empty response. This empty response was causing the code to go into a catch block and render incorrect price data. Here is an example API call returning 204: `https://price.api.cx.metamask.io/v1/chains/56/historical-prices/0x44444e15232ff6dfed49b550d672707a283b3910?timePeriod=1d&vsCurrency=usd` - Asset details showing infinite loading and does not load any details: when navigating to an asset details page, there is a possibility that it ends up in an infinite loop. I have identified that this is because of running some code before the filter was set and fixed the isue NOTE: The trending feature has been a help for replicating this flakiness and finding a fix for both issues. ## **Changelog** CHANGELOG entry: fixed two bugs in asset details page ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** ### **Before** ISSUE 1: image ISSUE 2: https://github.com/user-attachments/assets/3bcf64f3-c6b3-49b7-a587-1fe51b32c2e5 ### **After** ISSUE 1: image ISSUE 2: https://github.com/user-attachments/assets/50ee0b76-6e94-4cf7-8066-0b681fff93db ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Initializes asset transactions immediately after filter is set to avoid infinite loading, and returns empty prices on non-200 responses from historical price API. > > - **Asset Details (`app/components/Views/Asset/index.js`)**: > - Run `normalizeTransactions()` immediately after establishing `filter` and set `mounted = true` (removed `InteractionManager.runAfterInteractions` wrapper) to prevent premature/looping loads. > - Use `showLoaderAndNormalize()` on key prop changes and ensure `loading` is reset after normalization. > - **Historical Prices Hook (`app/components/hooks/useTokenHistoricalPrices.ts`)**: > - After `fetch`, if `response.status !== 200`, set `prices` to `[]` and return, avoiding error-driven incorrect price states. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 83ae80426e21c0dd7296295c1cd4a1ed0ff90a23. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- app/components/Views/Asset/index.js | 7 +++---- app/components/hooks/useTokenHistoricalPrices.ts | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/components/Views/Asset/index.js b/app/components/Views/Asset/index.js index 5276f89edf76..d39c8ba83403 100644 --- a/app/components/Views/Asset/index.js +++ b/app/components/Views/Asset/index.js @@ -292,10 +292,6 @@ class Asset extends PureComponent { this.checkLiveness(tokenChainId); } - InteractionManager.runAfterInteractions(() => { - this.normalizeTransactions(); - this.mounted = true; - }); this.navSymbol = (this.props.route.params?.symbol ?? '').toLowerCase(); this.navAddress = (this.props.route.params?.address ?? '').toLowerCase(); @@ -304,6 +300,9 @@ class Asset extends PureComponent { } else { this.filter = this.ethFilter; } + + this.normalizeTransactions(); + this.mounted = true; } componentDidUpdate(prevProps) { diff --git a/app/components/hooks/useTokenHistoricalPrices.ts b/app/components/hooks/useTokenHistoricalPrices.ts index 28d74519585f..2ac359f0468c 100644 --- a/app/components/hooks/useTokenHistoricalPrices.ts +++ b/app/components/hooks/useTokenHistoricalPrices.ts @@ -141,6 +141,10 @@ const useTokenHistoricalPrices = ({ }); const response = await fetch(uri.toString()); endTrace({ name: TraceName.FetchHistoricalPrices }); + if (response.status !== 200) { + setPrices([]); + return; + } const data: { prices: TokenPrice[] } = await response.json(); setPrices(data.prices as TokenPrice[]); } From 0733d38ee5d9d4f90044ee4395aa82d754b407df Mon Sep 17 00:00:00 2001 From: ieow <4881057+ieow@users.noreply.github.com> Date: Wed, 19 Nov 2025 23:00:25 +0800 Subject: [PATCH 08/13] fix: SL-296: handle on biometric cancel - cp-7.60.0 (#22774) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** With the recent update of react-native-keychain library that prompt for biometric on android device, user could cancel it and the error was not handled. Combined with recent default biometric feature it is causing user to not able to create new SRP wallet without biometric This pr is to handle for keychain canceled and fall back to password authType. Jira link https://consensyssoftware.atlassian.net/browse/SL-296 https://consensyssoftware.atlassian.net/browse/SL-305 ## **Changelog** CHANGELOG entry: Cancel biometric prompt during create Wallet will fallback to Password AuthType ## **Related issues** Fixes: https://github.com/MetaMask/metamask-mobile/issues/22934 https://github.com/MetaMask/metamask-mobile/issues/19642 ## **Manual testing steps** ```gherkin Feature: fallback to Password authType when user cancel biometric Scenario: user create new SRP account Given user completed choose password for new SRP account When user will be prompt for biometric Then user cancel the biometric prompt ``` ## **Screenshots/Recordings** ### **Before** https://github.com/user-attachments/assets/b39cf619-1ab0-45c1-b2d7-bc6d11945699 ### **After** https://github.com/user-attachments/assets/70caa718-723b-4818-a3a2-48c2ece81706 ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Introduces a safe fallback to `PASSWORD` auth when storing credentials with biometrics fails (or user cancels), and updates flows/tests accordingly. > > - **Authentication**: > - Add `storePasswordWithFallback(password, authData)` to fall back to `AUTHENTICATION_TYPE.PASSWORD` if non-password storage fails. > - Use fallback in `newWalletAndKeychain`, `newWalletAndRestore`, and Reset Password flow (`app/components/Views/ResetPassword/index.js`). > - **SecureKeychain (iOS biometrics)**: > - On biometric prompt cancel, store password without biometrics and update storage/metrics; rethrow non-cancel errors. > - **Tests**: > - Add tests covering fallback behavior for wallet creation/restore and error cases; verify dispatches (`setExistingUser`, `logIn`, `logOut`). > - Update SecureKeychain tests to mock `getGenericPassword` and validate cancel vs success paths. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 0b8ad0b7bd81746c9e0944a0772433201899eac1. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- app/components/Views/ResetPassword/index.js | 2 +- .../Authentication/Authentication.test.ts | 192 +++++++++++++++++- app/core/Authentication/Authentication.ts | 31 ++- app/core/SecureKeychain.test.ts | 9 +- app/core/SecureKeychain.ts | 1 + 5 files changed, 228 insertions(+), 7 deletions(-) diff --git a/app/components/Views/ResetPassword/index.js b/app/components/Views/ResetPassword/index.js index 4861199216e6..e7595bf24c3d 100644 --- a/app/components/Views/ResetPassword/index.js +++ b/app/components/Views/ResetPassword/index.js @@ -548,7 +548,7 @@ class ResetPassword extends PureComponent { this.state.biometryChoice, this.state.rememberMe, ); - await Authentication.storePassword(password, authData.currentAuthType); + await Authentication.storePasswordWithFallback(password, authData); } catch (error) { Logger.error(error); } diff --git a/app/core/Authentication/Authentication.test.ts b/app/core/Authentication/Authentication.test.ts index 4cff4386c18d..d07644aeb35b 100644 --- a/app/core/Authentication/Authentication.test.ts +++ b/app/core/Authentication/Authentication.test.ts @@ -35,7 +35,7 @@ import { import { EncryptionKey } from '@metamask/browser-passworder'; import { uint8ArrayToMnemonic } from '../../util/mnemonic'; import { SolScope } from '@metamask/keyring-api'; -import { logOut } from '../../actions/user'; +import { logOut, setExistingUser, logIn } from '../../actions/user'; import { RootState } from '../../reducers'; import { SeedlessOnboardingControllerError, @@ -514,6 +514,196 @@ describe('Authentication', () => { ); } }); + + it('falls back to PASSWORD authType when biometric storePassword fails in newWalletAndKeychain', async () => { + const mockDispatch = jest.fn(); + jest.spyOn(ReduxService, 'store', 'get').mockReturnValue({ + dispatch: mockDispatch, + getState: () => ({ security: { allowLoginWithRememberMe: true } }), + } as unknown as ReduxStore); + + const Engine = jest.requireMock('../Engine'); + + // Mock successful vault creation + Engine.context.KeyringController.createNewVaultAndKeychain.mockResolvedValueOnce( + undefined, + ); + Engine.resetState = jest.fn().mockResolvedValueOnce(undefined); + + // Mock storePassword to fail on first call (biometric), succeed on second (password) + const storePasswordSpy = jest + .spyOn(Authentication, 'storePassword') + .mockRejectedValueOnce(new Error('Biometric storage failed')) + .mockResolvedValueOnce(undefined); + + await Authentication.newWalletAndKeychain('password', { + currentAuthType: AUTHENTICATION_TYPE.BIOMETRIC, + }); + + // Should have called storePassword twice: first with BIOMETRIC (failed), then with PASSWORD (succeeded) + expect(storePasswordSpy).toHaveBeenCalledTimes(2); + expect(storePasswordSpy).toHaveBeenNthCalledWith( + 1, + 'password', + AUTHENTICATION_TYPE.BIOMETRIC, + ); + expect(storePasswordSpy).toHaveBeenNthCalledWith( + 2, + 'password', + AUTHENTICATION_TYPE.PASSWORD, + ); + + // Should have completed successfully + expect(mockDispatch).toHaveBeenCalledWith(setExistingUser(true)); + expect(mockDispatch).toHaveBeenCalledWith(logIn()); + + storePasswordSpy.mockRestore(); + }); + + it('falls back to PASSWORD authType when biometric storePassword fails in newWalletAndRestore', async () => { + const mockDispatch = jest.fn(); + jest.spyOn(ReduxService, 'store', 'get').mockReturnValue({ + dispatch: mockDispatch, + getState: () => ({ security: { allowLoginWithRememberMe: true } }), + } as unknown as ReduxStore); + + const Engine = jest.requireMock('../Engine'); + + // Mock successful vault restoration + Engine.context.KeyringController.createNewVaultAndRestore.mockResolvedValueOnce( + undefined, + ); + Engine.resetState = jest.fn().mockResolvedValueOnce(undefined); + + // Mock storePassword to fail on first call (biometric), succeed on second (password) + const storePasswordSpy = jest + .spyOn(Authentication, 'storePassword') + .mockRejectedValueOnce(new Error('Biometric storage failed')) + .mockResolvedValueOnce(undefined); + + await Authentication.newWalletAndRestore( + 'password', + { + currentAuthType: AUTHENTICATION_TYPE.BIOMETRIC, + }, + 'test seed phrase', + true, + ); + + // Should have called storePassword twice: first with BIOMETRIC (failed), then with PASSWORD (succeeded) + expect(storePasswordSpy).toHaveBeenCalledTimes(2); + expect(storePasswordSpy).toHaveBeenNthCalledWith( + 1, + 'password', + AUTHENTICATION_TYPE.BIOMETRIC, + ); + expect(storePasswordSpy).toHaveBeenNthCalledWith( + 2, + 'password', + AUTHENTICATION_TYPE.PASSWORD, + ); + + // Should have completed successfully + expect(mockDispatch).toHaveBeenCalledWith(setExistingUser(true)); + expect(mockDispatch).toHaveBeenCalledWith(logIn()); + + storePasswordSpy.mockRestore(); + }); + + it('throws error when PASSWORD authType storePassword fails in newWalletAndKeychain', async () => { + const mockDispatch = jest.fn(); + jest.spyOn(ReduxService, 'store', 'get').mockReturnValue({ + dispatch: mockDispatch, + getState: () => ({ security: { allowLoginWithRememberMe: true } }), + } as unknown as ReduxStore); + + const Engine = jest.requireMock('../Engine'); + + Engine.context.KeyringController.setLocked.mockResolvedValue(undefined); + + // Mock successful vault creation + Engine.context.KeyringController.createNewVaultAndKeychain.mockResolvedValueOnce( + undefined, + ); + Engine.resetState = jest.fn().mockResolvedValueOnce(undefined); + + // Mock storePassword to fail even with PASSWORD authType + const storePasswordSpy = jest + .spyOn(Authentication, 'storePassword') + .mockRejectedValue(new Error('Password storage failed')); + + try { + await Authentication.newWalletAndKeychain('password', { + currentAuthType: AUTHENTICATION_TYPE.PASSWORD, + }); + throw new Error('Expected an error to be thrown'); + } catch (error) { + expect(error).toBeInstanceOf(AuthenticationError); + expect((error as AuthenticationError).customErrorMessage).toBe( + AUTHENTICATION_FAILED_WALLET_CREATION, + ); + expect((error as AuthenticationError).message).toBe( + 'Password storage failed', + ); + // Should have called storePassword only once since it's PASSWORD authType (no fallback) + expect(storePasswordSpy).toHaveBeenCalledTimes(1); + await Promise.resolve(); + jest.runAllTimers(); + expect(mockDispatch).toHaveBeenCalledWith(logOut()); + } + + storePasswordSpy.mockRestore(); + }); + + it('throws error when PASSWORD authType storePassword fails in newWalletAndRestore', async () => { + const mockDispatch = jest.fn(); + jest.spyOn(ReduxService, 'store', 'get').mockReturnValue({ + dispatch: mockDispatch, + getState: () => ({ security: { allowLoginWithRememberMe: true } }), + } as unknown as ReduxStore); + + const Engine = jest.requireMock('../Engine'); + + Engine.context.KeyringController.setLocked.mockResolvedValue(undefined); + + // Mock successful vault restoration + Engine.context.KeyringController.createNewVaultAndRestore.mockResolvedValueOnce( + undefined, + ); + Engine.resetState = jest.fn().mockResolvedValueOnce(undefined); + + // Mock storePassword to fail even with PASSWORD authType + const storePasswordSpy = jest + .spyOn(Authentication, 'storePassword') + .mockRejectedValue(new Error('Password storage failed')); + + try { + await Authentication.newWalletAndRestore( + 'password', + { + currentAuthType: AUTHENTICATION_TYPE.PASSWORD, + }, + 'test seed phrase', + true, + ); + throw new Error('Expected an error to be thrown'); + } catch (error) { + expect(error).toBeInstanceOf(AuthenticationError); + expect((error as AuthenticationError).customErrorMessage).toBe( + AUTHENTICATION_FAILED_WALLET_CREATION, + ); + expect((error as AuthenticationError).message).toBe( + 'Password storage failed', + ); + // Should have called storePassword only once since it's PASSWORD authType (no fallback) + expect(storePasswordSpy).toHaveBeenCalledTimes(1); + await Promise.resolve(); + jest.runAllTimers(); + expect(mockDispatch).toHaveBeenCalledWith(logOut()); + } + + storePasswordSpy.mockRestore(); + }); }); describe('Multichain - discoverAccounts', () => { diff --git a/app/core/Authentication/Authentication.ts b/app/core/Authentication/Authentication.ts index 05319a188729..5744b100ce14 100644 --- a/app/core/Authentication/Authentication.ts +++ b/app/core/Authentication/Authentication.ts @@ -447,6 +447,31 @@ class AuthenticationService { } }; + /** + * store password with fallback to password authType if the storePassword with non Password authType fails + * it should only apply for create wallet, import wallet and reset password flows for now + * + * @param password - password to store + * @param authData - authentication data + * @returns void + */ + storePasswordWithFallback = async (password: string, authData: AuthData) => { + try { + await this.storePassword(password, authData.currentAuthType); + this.authData = authData; + } catch (error) { + if (authData.currentAuthType === AUTHENTICATION_TYPE.PASSWORD) { + throw error; + } + // Fall back to password authType + await this.storePassword(password, AUTHENTICATION_TYPE.PASSWORD); + this.authData = { + currentAuthType: AUTHENTICATION_TYPE.PASSWORD, + availableBiometryType: authData.availableBiometryType, + }; + } + }; + /** * Fetches the password from the keychain using the auth method it was originally stored */ @@ -523,14 +548,13 @@ class AuthenticationService { await this.createWalletVaultAndKeychain(password); } - await this.storePassword(password, authData?.currentAuthType); + await this.storePasswordWithFallback(password, authData); ReduxService.store.dispatch(setExistingUser(true)); await StorageWrapper.removeItem(SEED_PHRASE_HINTS); await this.dispatchLogin({ clearAccountTreeState: true, }); - this.authData = authData; // TODO: Replace "any" with type // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (e: any) { @@ -559,13 +583,12 @@ class AuthenticationService { ): Promise => { try { await this.newWalletVaultAndRestore(password, parsedSeed, clearEngine); - await this.storePassword(password, authData.currentAuthType); + await this.storePasswordWithFallback(password, authData); ReduxService.store.dispatch(setExistingUser(true)); await StorageWrapper.removeItem(SEED_PHRASE_HINTS); await this.dispatchLogin({ clearAccountTreeState: true, }); - this.authData = authData; // TODO: Replace "any" with type // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (e: any) { diff --git a/app/core/SecureKeychain.test.ts b/app/core/SecureKeychain.test.ts index ff20a006ffcd..175a5e5ba149 100644 --- a/app/core/SecureKeychain.test.ts +++ b/app/core/SecureKeychain.test.ts @@ -12,6 +12,7 @@ import { import { UserProfileProperty } from '../util/metrics/UserSettingsAnalyticsMetaData/UserProfileAnalyticsMetaData.types'; import AUTHENTICATION_TYPE from '../constants/userProperties'; import QuickCrypto from 'react-native-quick-crypto'; +import { STORAGE_TYPE } from 'react-native-keychain'; jest.mock('../../locales/i18n', () => ({ strings: jest.fn((key) => key), @@ -37,6 +38,9 @@ jest.mock('react-native-keychain', () => ({ setGenericPassword: jest.fn(), getGenericPassword: jest.fn(), resetGenericPassword: jest.fn(), + STORAGE_TYPE: { + AES_GCM: 'AES_GCM', + }, })); jest.mock('../store/storage-wrapper', () => ({ @@ -171,7 +175,10 @@ describe('SecureKeychain - setGenericPassword', () => { }); it('should successfully set up biometric authentication', async () => { - (Keychain.getGenericPassword as jest.Mock).mockResolvedValueOnce({ + jest.spyOn(SecureKeychain, 'getGenericPassword').mockResolvedValueOnce({ + service: 'metamask', + username: 'metamask-user', + storage: STORAGE_TYPE.AES_GCM, password: 'encrypted_password', }); diff --git a/app/core/SecureKeychain.ts b/app/core/SecureKeychain.ts index f8f5300e5ac4..6dc92af3a7fb 100644 --- a/app/core/SecureKeychain.ts +++ b/app/core/SecureKeychain.ts @@ -252,6 +252,7 @@ const SecureKeychain = { return; } + throw error; } } } else if (type === this.TYPES.PASSCODE) { From ff3aa0c3fe5d925e00cdb34c93dfd1f75d7ea6db Mon Sep 17 00:00:00 2001 From: Bruno Nascimento Date: Wed, 19 Nov 2025 12:26:12 -0300 Subject: [PATCH 09/13] fix(card): cp-7.60.0 card assets UI issues (#22901) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** This PR addresses several UI problems and inconsistencies. It updates the sign up button so it no longer uses a unique layout on the sign in page, resolves a crash related to useOpenSwaps, corrects an issue where the WETH balance caused the UI to break and also fixes cases where asset symbols were shown in lowercase. ## **Changelog** CHANGELOG entry: Fix UI inconsistency for the sign up button on the sign in page CHANGELOG entry: Fix crash caused by useOpenSwaps CHANGELOG entry: Fix UI break caused by WETH balance display CHANGELOG entry: Fix asset symbols being shown in lowercase ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** ### **Before** ### **After** ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- > [!NOTE] > Standardizes auth/signup buttons and copy, fixes token symbol/name casing via SDK, passes formatted balances to asset item, updates swap chain source, and enhances asset selection behavior with navigation and metadata. > > - **UI/Copy**: > - Replace `Secondary` signup button in `CardAuthentication` with text link; adjust styling; update copy to `"I don't have an account"`. > - Tweak Sign Up screen “I already have an account” link styling. > - **Balances**: > - `CardHome` now passes `balanceFormatted` to `CardAssetItem`. > - `CardAssetItem` supports optional `balanceFormatted` for `secondaryBalance`. > - **Asset Selection**: > - Normalize token `symbol`/`name` using SDK in `mapUserToken` and when merging tokens from delegation settings. > - Add navigation-based selection return, wallet address display, token merging (avoid duplicates), and priority token highlighting. > - **Swaps Hook**: > - `useOpenSwaps` now sources chain IDs from `selectSelectedSourceChainIds` selector. > - **SDK**: > - Use SDK-provided token `symbol`/`name` (no forced uppercasing) when mapping delegation settings tokens. > - **Tests**: > - Extensive updates/additions for CardHome, CardAssetItem, AssetSelectionBottomSheet, and useOpenSwaps snapshots/behaviors. > - **Misc**: > - Remove extraneous log in SpendingLimit back-navigation guard. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fb485908c7340a616baefb8a7c31f8e0720e77d2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --- .../CardAuthentication/CardAuthentication.tsx | 25 +- .../CardAuthentication.test.tsx.snap | 45 ++- .../UI/Card/Views/CardHome/CardHome.test.tsx | 24 ++ .../UI/Card/Views/CardHome/CardHome.tsx | 6 +- .../Views/SpendingLimit/SpendingLimit.tsx | 1 - .../AssetSelectionBottomSheet.test.tsx | 273 +++++++++++++++++- .../AssetSelectionBottomSheet.tsx | 30 +- .../CardAssetItem/CardAssetItem.test.tsx | 22 ++ .../CardAssetItem/CardAssetItem.tsx | 4 +- .../UI/Card/components/Onboarding/SignUp.tsx | 2 +- .../UI/Card/hooks/useOpenSwaps.test.ts | 19 +- app/components/UI/Card/hooks/useOpenSwaps.ts | 11 +- app/components/UI/Card/sdk/CardSDK.ts | 4 +- locales/languages/en.json | 2 +- 14 files changed, 412 insertions(+), 56 deletions(-) diff --git a/app/components/UI/Card/Views/CardAuthentication/CardAuthentication.tsx b/app/components/UI/Card/Views/CardAuthentication/CardAuthentication.tsx index 636b9f155b82..5c141c826688 100644 --- a/app/components/UI/Card/Views/CardAuthentication/CardAuthentication.tsx +++ b/app/components/UI/Card/Views/CardAuthentication/CardAuthentication.tsx @@ -11,7 +11,12 @@ import { StyleSheet, TextInputProps, } from 'react-native'; -import { Box, Text, TextVariant } from '@metamask/design-system-react-native'; +import { + Box, + FontWeight, + Text, + TextVariant, +} from '@metamask/design-system-react-native'; import Icon, { IconName, @@ -608,14 +613,18 @@ const CardAuthentication = () => { width={ButtonWidthTypes.Full} disabled={isLoginDisabled || loading} /> -