From 7c827b7688cc1b33c19f9da01c9a9eaa44633e4f Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:36:22 +0200 Subject: [PATCH 01/23] Disclose whole-REALU rounding on OpenCryptoPay pay Every payment rounds up to whole REALU shares because there are no fractional shares. The intro and confirm screens state that leftover ZCHF stays in the wallet. Invalid swap quotes no longer look payable, and Pay re-enables after the process route pops. Handbook spec-81 documents the confirm-screen notice (slots 291-293). --- .github/workflows/handbook-build-check.yaml | 13 +-- CONTRIBUTING.md | 2 +- assets/languages/strings_de.arb | 3 +- assets/languages/strings_en.arb | 3 +- docs/handbook/README.md | 2 +- docs/handbook/de/index.html | 98 ++++++++++++++++++- docs/screens.md | 2 +- docs/visual-regression-tests.md | 4 +- .../pay/cubits/pay_quote/pay_quote_cubit.dart | 22 ++++- lib/screens/pay/pay_quote_page.dart | 12 ++- scripts/assemble-handbook-screenshots.sh | 7 +- test/screens/pay/pay_info_page_test.dart | 4 + test/screens/pay/pay_quote_cubit_test.dart | 57 ++++++++++- test/screens/pay/pay_quote_page_test.dart | 25 +++++ 14 files changed, 232 insertions(+), 22 deletions(-) diff --git a/.github/workflows/handbook-build-check.yaml b/.github/workflows/handbook-build-check.yaml index 89c0547d7..31d752a01 100644 --- a/.github/workflows/handbook-build-check.yaml +++ b/.github/workflows/handbook-build-check.yaml @@ -96,8 +96,8 @@ jobs: set -euo pipefail bash scripts/assemble-handbook-screenshots.sh /tmp/handbook-shots count=$(ls -1 /tmp/handbook-shots/*.png | wc -l | tr -d ' ') - if [ "$count" != "301" ]; then - echo "expected 301 screenshots, got $count" >&2 + if [ "$count" != "304" ]; then + echo "expected 304 screenshots, got $count" >&2 exit 1 fi @@ -177,10 +177,11 @@ jobs: exit 1 fi - # Spot-check handbook screenshots assembled from Goldens (301 PNGs). - # Mix of original 01-61 slots, later Golden batches, and referral - # baselines so a regression in any range surfaces here. - for name in 01-welcome 11-dashboard 26-terms 35-dashboard-with-balance 46-buy-kyc-required 52-sell-unknown-error 53-buy-payment-details 61-kyc-registration-tax-tin-error 62-welcome-page-android 219-settings-security-page-default 268-phone-number-field-default 269-dashboard-insider-unlocked 270-handbook-persona-dca 275-handbook-persona-exit-1j 276-referral-overview 282-referral-payout-row 283-referral-terms-readonly 287-kyc-registration-referral-recognized 288-transaction-history-referral-payout 289-dashboard-referral-entry-and-payout 290-kyc-registration-referral-promo 291-referral-bind-error-invalid 292-referral-bind-error-already-registered; do + # Spot-check handbook screenshots assembled from Goldens (304 PNGs). + # Mix of original 01-61 slots, later Golden batches, referral + # baselines, bind-error overlays, and pay whole-share rounding so a + # regression in any range surfaces here. + for name in 01-welcome 11-dashboard 26-terms 35-dashboard-with-balance 46-buy-kyc-required 52-sell-unknown-error 53-buy-payment-details 61-kyc-registration-tax-tin-error 62-welcome-page-android 219-settings-security-page-default 268-phone-number-field-default 269-dashboard-insider-unlocked 270-handbook-persona-dca 275-handbook-persona-exit-1j 276-referral-overview 282-referral-payout-row 283-referral-terms-readonly 287-kyc-registration-referral-recognized 288-transaction-history-referral-payout 289-dashboard-referral-entry-and-payout 290-kyc-registration-referral-promo 291-referral-bind-error-invalid 292-referral-bind-error-already-registered 293-pay-info 294-pay-quote-ready 295-pay-quote-ready-merchant; do # Auth is checked before the file exists: a missing PNG also # returns 401, so HTTP status cannot prove assembly. Look on disk. if ! docker exec handbook test -f "/usr/share/nginx/html/screenshots/${name}.png"; then diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 58765c8ca..9d3fd5699 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -248,7 +248,7 @@ The app supports three wallet modes (`software`, `bitbox`, `debug`) with differe ```bash rg "^//\s*@no-integration-test:" lib/ ``` -- Visual-regression Goldens under `test/goldens/screens/` and `test/goldens/widgets/` are also the source of the 301 screenshots served at `handbook.realunit.app`. When you add a handbook page, you MUST add a matching Golden test AND a row in the mapping table at `scripts/assemble-handbook-screenshots.sh` — the handbook will not pick up a Maestro-captured PNG anymore. The `Handbook Build Check` workflow on every PR runs the assembly script and fails loudly if a mapped Golden is missing. +- Visual-regression Goldens under `test/goldens/screens/` and `test/goldens/widgets/` are also the source of the 304 screenshots served at `handbook.realunit.app`. When you add a handbook page, you MUST add a matching Golden test AND a row in the mapping table at `scripts/assemble-handbook-screenshots.sh` — the handbook will not pick up a Maestro-captured PNG anymore. The `Handbook Build Check` workflow on every PR runs the assembly script and fails loudly if a mapped Golden is missing. - Why: single source of truth — a UI regression that breaks a Golden also breaks the handbook image before either ships; eliminates the previous "two pipelines, two truths" problem. - See: [`docs/visual-regression-tests.md`](docs/visual-regression-tests.md) section "Handbook screenshots are sourced from Goldens". diff --git a/assets/languages/strings_de.arb b/assets/languages/strings_de.arb index 36da5d176..1b424ab31 100644 --- a/assets/languages/strings_de.arb +++ b/assets/languages/strings_de.arb @@ -186,7 +186,7 @@ "payFailureQuoteExpired": "Das Zahlungsangebot ist abgelaufen. Bitte scannen Sie den Code erneut.", "payFailureSignatureUnsupported": "Diese Wallet kann keine Transaktionen signieren. Wechseln Sie zu einer Software- oder BitBox-Wallet.", "payFailureTitle": "Zahlung fehlgeschlagen", - "payInfoBody": "Die Bezahlfunktion kann an allen OpenCryptoPay-Standorten genutzt werden.\n\nDer Tausch erfolgt in zwei Schritten. Zuerst wird REALU in ZCHF getauscht. ZCHF ist ein CHF-Stablecoin, der anschliessend an den Zahlungsempfänger übertragen wird.\n\nREALU ist ein Wertpapier und wird nicht für die Bezahlung selbst verwendet.", + "payInfoBody": "Die Bezahlfunktion kann an allen OpenCryptoPay-Standorten genutzt werden.\n\nDer Tausch erfolgt in zwei Schritten. Zuerst wird REALU in ZCHF getauscht. ZCHF ist ein CHF-Stablecoin, der anschliessend an den Zahlungsempfänger übertragen wird.\n\nREALU ist ein Wertpapier und wird nicht für die Bezahlung selbst verwendet.\n\nBei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es keine halben REALU gibt. Ein allfälliger ZCHF-Rest bleibt in Ihrer Wallet.", "payInfoTitle": "Bevor Sie bezahlen", "paymentInformationFailed": "Beim Abrufen der Zahlungsinformationen ist ein Fehler aufgetreten.", "paymentInformationFailedDescription": "Bitte versuchen Sie es später erneut. Wenn der Fehler weiterhin besteht, wenden Sie sich an unseren Support.", @@ -199,6 +199,7 @@ "payQuoteRealuEstimated": "Erwarteter Erlös", "payQuoteRealuFees": "Gebühren", "payQuoteRequested": "Geforderter Betrag", + "payQuoteRoundingNotice": "Bei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es keine halben REALU gibt. Restliches ZCHF bleibt in Ihrer Wallet.", "payQuoteSummary": "Sie bezahlen ${amount} ${asset}", "payQuoteTitle": "Zahlung bestätigen", "payQuoteUnavailable": "Für diesen Zahlungscode ist keine ZCHF-Zahlung verfügbar.", diff --git a/assets/languages/strings_en.arb b/assets/languages/strings_en.arb index 4d5578e31..7bae4ea47 100644 --- a/assets/languages/strings_en.arb +++ b/assets/languages/strings_en.arb @@ -186,7 +186,7 @@ "payFailureQuoteExpired": "The payment quote expired. Please scan the code again.", "payFailureSignatureUnsupported": "This wallet cannot sign transactions. Switch to a software or BitBox wallet.", "payFailureTitle": "Payment failed", - "payInfoBody": "You can use the payment function at all OpenCryptoPay locations.\n\nThe exchange happens in two steps. First, REALU is swapped for ZCHF. ZCHF is a Swiss franc stablecoin, which is then transferred to the payment recipient.\n\nREALU is a security and is not used for the payment itself.", + "payInfoBody": "You can use the payment function at all OpenCryptoPay locations.\n\nThe exchange happens in two steps. First, REALU is swapped for ZCHF. ZCHF is a Swiss franc stablecoin, which is then transferred to the payment recipient.\n\nREALU is a security and is not used for the payment itself.\n\nEvery payment is rounded up to whole REALU shares, because there are no fractional REALU. Any leftover ZCHF stays in your wallet.", "payInfoTitle": "Before you pay", "paymentInformationFailed": "An error occurred while getting the payment information.", "paymentInformationFailedDescription": "Please try again later. If the error persists, contact our support team.", @@ -199,6 +199,7 @@ "payQuoteRealuEstimated": "Estimated proceeds", "payQuoteRealuFees": "Fees", "payQuoteRequested": "Requested amount", + "payQuoteRoundingNotice": "Every payment is rounded up to whole REALU shares, because there are no fractional REALU. Leftover ZCHF stays in your wallet.", "payQuoteSummary": "You pay ${amount} ${asset}", "payQuoteTitle": "Confirm payment", "payQuoteUnavailable": "No ZCHF payment is available for this payment code.", diff --git a/docs/handbook/README.md b/docs/handbook/README.md index 2bc7b928b..82d593d62 100644 --- a/docs/handbook/README.md +++ b/docs/handbook/README.md @@ -21,7 +21,7 @@ deployten Image (`handbook.realunit.app`). ## Screenshots regenerieren -Es gibt keinen separaten Regeneration-Schritt: Die 301 Handbook-Screenshots +Es gibt keinen separaten Regeneration-Schritt: Die 304 Handbook-Screenshots sind direkt die Golden-Baselines unter `test/goldens/` (gemappt in `scripts/assemble-handbook-screenshots.sh`). Eine UI-Änderung an einer der gemappten Pages produziert beim `flutter test test/goldens` einen Diff — diff --git a/docs/handbook/de/index.html b/docs/handbook/de/index.html index e65845eb1..9b43746ff 100644 --- a/docs/handbook/de/index.html +++ b/docs/handbook/de/index.html @@ -1137,6 +1137,9 @@
  • 80Testkunden — Bestandsentwicklung
  • +
  • + 81Bezahlen — ganze REALU +
  • GAktientoken — Geo-Filter
  • @@ -1186,14 +1189,14 @@

    RealUnit Wallet — Handbook

    📱 App: RealUnit Wallet (Flutter) 📂 Code: RealUnitCH/app - 🧪 Tests: 355 Visual-Regression Goldens (301 davon im Handbook) · 26 Tier-3 Smoke-Flows + 🧪 Tests: 355 Visual-Regression Goldens (304 davon im Handbook) · 26 Tier-3 Smoke-Flows

    Single Source of Truth

    - Die 301 App-Screenshots dieser Seite sind Goldens aus + Die 304 App-Screenshots dieser Seite sind Goldens aus test/goldens/{screens,widgets}/<feature>/goldens/macos/<file>.png. Welcher Golden welcher Handbook-Slot ist, definiert die Mapping-Tabelle in scripts/assemble-handbook-screenshots.sh. Der Docker-Build @@ -1233,7 +1236,7 @@

    Single Source of Truth

    Pipeline: Page-Edit → flutter test --update-goldens test/goldens/ auf dem self-hosted Runner (Hardware-Determinismus) → neue Baseline committen → handbook-deploy.yaml baut das Docker-Image aus dem gepushten Branch - und assembliert die 301 Slots aus test/goldens/ → Push auf + und assembliert die 304 Slots aus test/goldens/ → Push auf staging deployt das Handbook-Image nach Produktion, via Cloudflare Tunnel.

    @@ -8419,6 +8422,95 @@

    80Testkunden — Bestandsentwicklung


    +
    + +
    +
    +

    81Bezahlen — ganze REALU

    +
    test/goldens/screens/pay/
    +
    +
    + 3 Screens + +
    +
    +
    +

    + OpenCryptoPay-Zahlungen verkaufen immer ganze REALU-Anteile — + halbe Anteile gibt es nicht. Die Bestätigungsseite («Zahlung bestätigen») + sagt das ausdrücklich. Ein allfälliger ZCHF-Rest bleibt in der Wallet. + Die Zahlungs-API rundet den Tausch auf ganze Anteile auf; die App rechnet + die Stückzahl nicht selbst. +

    + +
    +
    +
    + + + screens/pay/goldens/macos/pay_info_page.png +
    +
    + Bevor Sie bezahlen — Hinweis auf ganze REALU-Anteile +
    +
    + Intro-Seite Bevor Sie bezahlen mit dem zusätzlichen Absatz: + bei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es + keine halben REALU gibt; ein allfälliger ZCHF-Rest bleibt in der Wallet. + Golden-Quelle: pay_info_page.png. +
    +
    +
    +
    + + + screens/pay/goldens/macos/pay_quote_page_ready.png +
    +
    + Zahlung bestätigen — Aufrundungshinweis +
    +
    + Bestätigungsseite mit Betrag, benötigten ZCHF und dem sichtbaren + Hinweis, dass jede Zahlung auf ganze REALU-Anteile aufgerundet wird. + Restliches ZCHF bleibt in der Wallet. Button Bezahlen bleibt + die sticky CTA. + Golden-Quelle: pay_quote_page_ready.png. +
    +
    +
    +
    + + + screens/pay/goldens/macos/pay_quote_page_ready_with_merchant.png +
    +
    + Zahlung bestätigen — Empfänger, REALU-Zeilen und Aufrundungshinweis +
    +
    + Dieselbe Bestätigungsseite mit Empfänger, REALU-Anteilzeilen und + dem Aufrundungshinweis unter den Beträgen. + Golden-Quelle: pay_quote_page_ready_with_merchant.png. +
    +
    +
    +
    + +
    +
    diff --git a/docs/screens.md b/docs/screens.md index 2f5adea2d..bae827491 100644 --- a/docs/screens.md +++ b/docs/screens.md @@ -147,7 +147,7 @@ row. `243`–`245`. `SetupPinPage` also backs the `settingsChangePin` route (`/settings/security/changePin`) via a second constructor; that reuse has no separate Golden and is not given its own row. -- **Handbook numbering.** Each of the 301 handbook slots is a Visual-Regression +- **Handbook numbering.** Each of the 304 handbook slots is a Visual-Regression Golden under `test/goldens/`, mapped to its handbook position by `scripts/assemble-handbook-screenshots.sh`. A parallel Tier-3 Maestro flow (`.maestro/handbook/NN-*.yaml`) covers navigation/tap-routing smoke for the diff --git a/docs/visual-regression-tests.md b/docs/visual-regression-tests.md index a43d1d01f..c173b59b3 100644 --- a/docs/visual-regression-tests.md +++ b/docs/visual-regression-tests.md @@ -191,7 +191,7 @@ public repos are free even for macOS minutes. ## Handbook screenshots are sourced from Goldens -The 301 PNGs the handbook serves at `handbook.realunit.app/screenshots/` +The 304 PNGs the handbook serves at `handbook.realunit.app/screenshots/` are assembled from the Golden baselines at docker-build time. One Golden → one handbook page, via the explicit mapping in `scripts/assemble-handbook-screenshots.sh`. The handbook does **not** @@ -231,7 +231,7 @@ that directory into `/usr/share/nginx/html/screenshots/`. Golden file. 4. Open the PR. The `Handbook Build Check` workflow runs `docker build` and a container smoke (`/healthz` + auth gate + - spot-checks selected mapped screenshots via `docker exec test -f`; the full set is gated by the assemble step (`expected 301`)). A missing Golden surfaces here + spot-checks selected mapped screenshots via `docker exec test -f`; the full set is gated by the assemble step (`expected 304`)). A missing Golden surfaces here as a missing-source error from the assembly script before docker even spins up. diff --git a/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart b/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart index ceeff9eb6..e29db4724 100644 --- a/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart +++ b/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart @@ -1,8 +1,10 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:realunit_wallet/generated/i18n.dart'; import 'package:realunit_wallet/packages/service/dfx/exceptions/api_exception.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/lnurlp_payment_dto.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/real_unit_swap_dto.dart'; +import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/swap_payment_info.dart'; import 'package:realunit_wallet/packages/service/dfx/real_unit_pay_service.dart'; part 'pay_quote_state.dart'; @@ -11,7 +13,9 @@ part 'pay_quote_state.dart'; /// the requested fiat amount + the exact ZCHF amount the Ethereum method /// requires. The amount comes from the API `transferAmounts` (ZCHF on the /// Ethereum entry) — the app never computes it. An expired quote surfaces as a -/// typed state so the view can prompt a re-scan. +/// typed state so the view can prompt a re-scan. An invalid swap preview +/// (`isValid: false`) is [PayQuoteError], never Ready — the app does not +/// locally ceil share counts; `swap.amount` is displayed only when valid. class PayQuoteCubit extends Cubit { final RealUnitPayService _payService; final String _paymentLinkId; @@ -47,6 +51,11 @@ class PayQuoteCubit extends Cubit { ); if (isClosed) return; + if (!swap.isValid) { + emit(PayQuoteError(_invalidSwapMessage(swap))); + return; + } + emit( PayQuoteReady( paymentLinkId: _paymentLinkId, @@ -67,6 +76,17 @@ class PayQuoteCubit extends Cubit { } } + /// User-facing copy for an invalid preview swap. `AmountTooLow` and a + /// missing/empty error mean holdings cannot cover the (API-rounded) whole + /// shares; any other non-empty API error is shown 1:1. + static String _invalidSwapMessage(SwapPaymentInfo swap) { + final error = swap.error; + if (error == null || error.isEmpty || error == 'AmountTooLow') { + return S.current.payFailureInsufficientZchf; + } + return error; + } + /// The ZCHF amount listed for the Ethereum transfer method, or null if the /// payment link does not offer an Ethereum/ZCHF method. static double? _zchfTransferAmount(LnurlpPaymentDto details) { diff --git a/lib/screens/pay/pay_quote_page.dart b/lib/screens/pay/pay_quote_page.dart index 71ec878f6..721e5b208 100644 --- a/lib/screens/pay/pay_quote_page.dart +++ b/lib/screens/pay/pay_quote_page.dart @@ -121,15 +121,22 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { value: '${state.realuFeesTotal!.toStringAsFixed(2)} ${realUnitAsset.symbol}', ), ], + Text( + S.of(context).payQuoteRoundingNotice, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: RealUnitColors.neutral500, + ), + ), ], ), actions: [ FilledButton( onPressed: _navigating ? null - : () { + : () async { setState(() => _navigating = true); - Navigator.of(context).push( + await Navigator.of(context).push( MaterialPageRoute( builder: (_) => PayProcessPage( paymentLinkId: state.paymentLinkId, @@ -137,6 +144,7 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { ), ), ); + if (mounted) setState(() => _navigating = false); }, child: Text(S.of(context).payConfirmButton), ), diff --git a/scripts/assemble-handbook-screenshots.sh b/scripts/assemble-handbook-screenshots.sh index 73aee07fd..e6eab98af 100755 --- a/scripts/assemble-handbook-screenshots.sh +++ b/scripts/assemble-handbook-screenshots.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Assemble the 301 handbook screenshots from the visual-regression Golden +# Assemble the 304 handbook screenshots from the visual-regression Golden # baselines. The flat `NN-name.png` output layout matches what # docs/handbook/de/index.html links to (`` # — the relative path resolves to `docs/handbook/screenshots/NN-name.png`). @@ -341,6 +341,11 @@ MAPPING=( "290-kyc-registration-referral-promo=screens/kyc/goldens/macos/kyc_registration_referral_step_promo.png" "291-referral-bind-error-invalid=screens/referral/goldens/macos/referral_bind_error_invalid.png" "292-referral-bind-error-already-registered=screens/referral/goldens/macos/referral_bind_error_already_registered.png" + # 293–295: OpenCryptoPay pay whole-share rounding disclosure. No matching + # .maestro/handbook flow — pay is behind the insider unlock in the 01–26 chain. + "293-pay-info=screens/pay/goldens/macos/pay_info_page.png" + "294-pay-quote-ready=screens/pay/goldens/macos/pay_quote_page_ready.png" + "295-pay-quote-ready-merchant=screens/pay/goldens/macos/pay_quote_page_ready_with_merchant.png" ) missing=() diff --git a/test/screens/pay/pay_info_page_test.dart b/test/screens/pay/pay_info_page_test.dart index edbea6c40..1c917c128 100644 --- a/test/screens/pay/pay_info_page_test.dart +++ b/test/screens/pay/pay_info_page_test.dart @@ -15,6 +15,10 @@ void main() { expect(find.text(S.current.payInfoTitle), findsOneWidget); expect(find.text(S.current.payInfoBody), findsOneWidget); expect(find.text(S.current.next), findsOneWidget); + expect( + S.current.payInfoBody, + anyOf(contains('ganze REALU'), contains('whole REALU shares')), + ); }); testWidgets('continues to the scanner with the initial payload', (tester) async { diff --git a/test/screens/pay/pay_quote_cubit_test.dart b/test/screens/pay/pay_quote_cubit_test.dart index d92901741..b21e613f1 100644 --- a/test/screens/pay/pay_quote_cubit_test.dart +++ b/test/screens/pay/pay_quote_cubit_test.dart @@ -1,6 +1,8 @@ import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; +import 'package:realunit_wallet/generated/i18n.dart'; import 'package:realunit_wallet/packages/service/dfx/exceptions/api_exception.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/lnurlp_payment_dto.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/real_unit_swap_dto.dart'; @@ -42,6 +44,8 @@ SwapPaymentInfo _swap({ double amount = 5, double estimatedAmount = 1.98, double? feesTotal = 0.02, + bool isValid = true, + String? error, }) { return SwapPaymentInfo( id: 99, @@ -50,7 +54,8 @@ SwapPaymentInfo _swap({ targetAsset: 'ZCHF', ethBalance: 1.0, requiredGasEth: 0.001, - isValid: true, + isValid: isValid, + error: error, feesTotal: feesTotal, ); } @@ -58,8 +63,9 @@ SwapPaymentInfo _swap({ void main() { late _MockPayService payService; - setUpAll(() { + setUpAll(() async { registerFallbackValue(const RealUnitSwapDto.fromTargetAmount(1)); + await S.delegate.load(const Locale('de')); }); setUp(() { @@ -141,6 +147,53 @@ void main() { expect: () => [isA(), isA()], ); + blocTest( + 'an invalid swap quote with AmountTooLow emits PayQuoteError and not Ready', + build: build, + setUp: () { + when(() => payService.getPaymentDetails('pl_realunit_ocp_sepolia')).thenAnswer( + (_) async => _details(expiration: DateTime.now().add(const Duration(minutes: 5))), + ); + when(() => payService.getSwapPaymentInfo(any())).thenAnswer( + (_) async => _swap(isValid: false, error: 'AmountTooLow', amount: 0), + ); + }, + act: (cubit) => cubit.load(), + expect: () => [ + isA(), + PayQuoteError(S.current.payFailureInsufficientZchf), + ], + verify: (cubit) { + expect(cubit.state, isA()); + expect(cubit.state, isNot(isA())); + expect( + (cubit.state as PayQuoteError).message, + S.current.payFailureInsufficientZchf, + ); + }, + ); + + blocTest( + 'an invalid swap quote with KycRequired emits that API error 1:1', + build: build, + setUp: () { + when(() => payService.getPaymentDetails('pl_realunit_ocp_sepolia')).thenAnswer( + (_) async => _details(expiration: DateTime.now().add(const Duration(minutes: 5))), + ); + when(() => payService.getSwapPaymentInfo(any())).thenAnswer( + (_) async => _swap(isValid: false, error: 'KycRequired'), + ); + }, + act: (cubit) => cubit.load(), + expect: () => [ + isA(), + const PayQuoteError('KycRequired'), + ], + verify: (cubit) { + expect(cubit.state, isNot(isA())); + }, + ); + blocTest( 'a service error emits PayQuoteError', build: build, diff --git a/test/screens/pay/pay_quote_page_test.dart b/test/screens/pay/pay_quote_page_test.dart index f4bf037e7..e3eee4217 100644 --- a/test/screens/pay/pay_quote_page_test.dart +++ b/test/screens/pay/pay_quote_page_test.dart @@ -1,5 +1,6 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:get_it/get_it.dart'; @@ -115,6 +116,7 @@ void main() { expect(find.text(S.current.payQuoteSummary('2.00', 'CHF')), findsOne); expect(find.text('2.00 CHF'), findsOne); expect(find.text('2.00 ZCHF'), findsOne); + expect(find.text(S.current.payQuoteRoundingNotice), findsOne); expect(find.text(S.current.payConfirmButton), findsOne); }); @@ -139,6 +141,7 @@ void main() { expect(find.text('5 REALU'), findsOne); expect(find.text('1.98 ZCHF'), findsOne); expect(find.text('0.02 REALU'), findsOne); + expect(find.text(S.current.payQuoteRoundingNotice), findsOne); }); testWidgets('confirm button navigates to the process step', (tester) async { @@ -155,6 +158,27 @@ void main() { expect(find.byType(PayProcessView), findsOne); }); + testWidgets('Pay re-enables after the process route pops', (tester) async { + when(() => quoteCubit.state).thenReturn(ready); + await tester.pumpApp(buildSubject()); + + await tester.tap(find.text(S.current.payConfirmButton)); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + expect(find.byType(PayProcessView), findsOne); + + await tester.pageBack(); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + expect(find.byType(PayProcessView), findsNothing); + final button = tester.widget( + find.widgetWithText(FilledButton, S.current.payConfirmButton), + ); + expect(button.onPressed, isNotNull); + }); + testWidgets('expired state shows the re-scan message', (tester) async { when(() => quoteCubit.state).thenReturn(const PayQuoteExpired()); await tester.pumpApp(buildSubject()); @@ -175,6 +199,7 @@ void main() { expect(find.text('boom'), findsOne); expect(find.text(S.current.payFailureGeneric), findsNothing); + expect(find.text(S.current.payConfirmButton), findsNothing); }); testWidgets('error state without API text falls back to the generic copy', (tester) async { From 27d97a4b1f609feac2fc64c34968944707658437 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:53:47 +0200 Subject: [PATCH 02/23] test(pay): pop the process sheet to re-enable Pay The confirm-screen regression test now pops the debug-wallet failure sheet and process route the same way production Close does, so Pay is asserted enabled after return. --- test/screens/pay/pay_quote_page_test.dart | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/screens/pay/pay_quote_page_test.dart b/test/screens/pay/pay_quote_page_test.dart index e3eee4217..52eca4731 100644 --- a/test/screens/pay/pay_quote_page_test.dart +++ b/test/screens/pay/pay_quote_page_test.dart @@ -168,7 +168,17 @@ void main() { expect(find.byType(PayProcessView), findsOne); - await tester.pageBack(); + // Debug wallet fails immediately and shows a result sheet. Pop the + // sheet, then the process route — the same two pops production does + // when the user taps Close. Avoid tap(): the sheet is taller than the + // default test surface, so Close is outside the hit box. + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + final navigator = tester.state(find.byType(Navigator).first); + navigator.pop(); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + navigator.pop(); await tester.pump(); await tester.pump(const Duration(milliseconds: 400)); From 91eba15944d48efcaa2e2f5be470b63aeb9ea9bc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:58:14 +0200 Subject: [PATCH 03/23] test(goldens): regenerate baselines on the self-hosted runner --- .../pay/goldens/macos/pay_info_page.png | Bin 38785 -> 50830 bytes .../goldens/macos/pay_quote_page_ready.png | Bin 22295 -> 33464 bytes .../pay_quote_page_ready_with_merchant.png | Bin 38135 -> 49262 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/goldens/screens/pay/goldens/macos/pay_info_page.png b/test/goldens/screens/pay/goldens/macos/pay_info_page.png index c21ea3bd98e56922e2627a25498efb45ffbbc3a2..6b28de1512479a285ac9c09cfae179c88a97bb64 100644 GIT binary patch literal 50830 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≥4m>2J$tRTKWkm5!($ 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 literal 38785 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�PB4`VfAJL^ndkg zhh=WAcI2uRfQEHPb84TTf|o6E3@vA}%)<}foFfK})TowV6EuAm#6sJfzCYTRR%@<> z0UqMWze|&8Q7*1po6AR07>Im^Ko}sz#=x{4oBTV>iVY##I5*?>c+lK*cDuhJ2WG_k zer)NnGly*d|=m7cTl-&fyDC3Njn>OQIXr{eq_;YWe>SP zX4^=)?akWy`s!IH&c70k=km>F?{!)b^(OC7SKZdA(Ccr1MD#Idj-%Cjti^PvZAuG;rvfC zr?ESK+wg#adAk3b<>c(@N57s+>o+Nt{Pn*kR5P{vF9Ag`(ua&qPWsi?bJo_?0eA=l zc>8T#f~kZ0-QBIx!Hrbmd?gFi1GOJy2M=^`=mrQHK!R1$JOWPX39wer_C2rln1QGV z4BIYXL_(b^$=_xWVE}QSv}(`+@5pv)`d(RC+XpDurn?YO%|phGpAoV*AI&UxGTe(#$bOh6J&fHn%f}yi|L=w`oo-(~2tGC##XdCuKRUW` z2}Zy~2j7F@3pL#S=rlkLQ{d;i&jD)-Iy-0k4Np(ti{qA;OZTcJj@wVJF%&f;Gc%zy zH1f^+e*kA8SX*0bvRlyW;tF_g5qVr4A%b~N`d1X?tB~=d9}s<`U)k@V)2ux=^Xc#| zLS(T*^A_WZ_n;s2DWwJ@a4O_SU;3Wik{{cMNBvx;P^5s@|U;=|DNzHVg zHBZr$-g3R?Pp45au&x|c;2#{-`F9QhOsVnJ!fjVoG!C#eZeK)Xr?Z8$9C9_bZVtg)6F!+X)Gzv&xqIz;@mgvkJ*L>yeIscaBEvCNy(#~uPQxG~yz-o6;wrRv3H~|62FJO>eBxXEwx%U-$bBF?j z9Tq(=VIU8;_p)(p>^-gUVbG#Dm~E0DYy~ehYD2O~9Z_^;PTCj?G>yPkx=9*ErIUF;mKO1PIGgZzg-$X?MY%e9E z()>(n@-C1qvfj`@IX9Uy>yZ>U*Mk2{hPR!wt1JTzT_iAjJ2*_rNV z6iu_V_>yIOf8}}h%%)(a zeH|Q06c|=Q*B4Io^%Ky>2ma#NUAujc?MJ68^&f^-@9pK8@myR5X}QtrD$tg(^25GI z2DP*VKk$~U>npW=c0oKA{e0)txb^fbW?SP*9~hN>?}pS3FN<-gtrg$s zG#vZoOyD@}%?Qq4-nMPr8dB@LZ(;?Fp?k9SeZBQ^D9K_ARHujdoo%8)MNl_>@1P*G zJy@D)bXTjzZ>DmNKHtq1i?P897xfV+^cAAlJ8d9B)%rn+1pE@{L6a{@lm_CGk3n%D zi^HJPuv*bn!}2hl1qyR8y|_pWt5mlN8)7(~%L0N7sIIOUfxk|6#*G^r`8y8@HI$07 zF-yy|S9WW*fiHm#*6n>W8tfek7iSm_UC;~o3#EKnf`?BDUTqH`>*D6_zFxd8rdpwn z1F1BB(skOK!m7~k_z|2ZEi2mtaw(Nw1LUeDDf}Y)r4H=ei3Ao>CW+5ql)UwGHbSJ(|t zE>GgC?tEt%V3la^vbr2EAb{G3bf)o*5FBm8!Nafj#SeAm<xY%H6;(!1O^>(Bkx?bQq6IzL%#3S9u)@-hr)^S#84*% zlBqTEzEGROv%l{;VcY*LIqM4u^w@$_%*x(Y5NqC$;m(OtmlMF?F|Mz2i87bTfls#0 zs2c!OvYUIvP9ZV~aFl3AD@sbjgnTnXE!a%gevcdDbF699+WdPBZUAZoL#Q9372;h| zL9G5uN)j2Zw!KWTS$aCe57_O4-5_BQ+Sw^=#5=V0r<(qnu!0L3u_^9T+c4_LUHI&M zb)XewI5svWtY&Q7DCi{G(cXrMhZjtxz&}>tI!ZqsAAd0Up%@5C>nA^q8@HU4+Ud;~ zyI5~aExWi=1$<$wt+b&gFbFXrgHsfC03;1Ro=0t1t5z|_D}jS!Ag*F=JC6Wd=WYN{ z!BHUl2hW3--*M=^-!n2M@fbJ%y(Q$ZA`5;20cUD(rfnCn^DT^KbuFkrC-zSiK>Pq7 z8|((U`0DPhNYW7=o67BT(Y?6Hr)=GRE$Gp|4GXpa86d7*HYyk}B@_D>5013wNZzr6 zZuo0xh_C~lm>vV1M)Y^5*vx3ZIz=+x)ZYZu|d5skd4wVHO_^^nDZT;D_n47Q1 z(GCGJ0IK#b6lM|zP(z_D!FFFt06-2o@c?c`rS&|5PQ6Wcw1Gsn zl(FN%d<~Y8(!g~1`Tjngo;o<&q{?WismUF!j8OzG9GIVQbA_w6+WiqI4d8?xRy#~y zx@mt;4{hppg?r6-%d#-HUfXv72qr5uFhI{yYm{`4I{1)c!avY}FJMqPZY{wT50BVa>Ua{vq;BG`5a?iC(b zY0}#zidkL>LnD9Qr>`2VQtLH41s%%GAJhSNo2QxR=hVV23Y)ITpscxh;luL*(e*A3 z9|D`@msE9^D`K&~i9o@60l}sx(^qEDt_`tcS~nY-`1J}4%OC8EnIHV`9O$B@<7vqO zI9P0PzO~uE{J%P^ab7BWbIzwaKkFkom+~z$ya7sQFJ#hxU939(atN2HCllrongRs! zw^D;VsAX?FJXQAMlRukf=AYpp01~|QBHIeE_>=My894~#D#B?g6Ay3Cw;_HGn}al| zRJ63W-8SpZ9L#KGpi%FNW_!Vfb2+duW|#~D zjN<7uzU_}2@BD3AceRvT2cQyk9yJdnDZu28mpVj6M6$hNpFmpn%uP-%!j|_4hu9xT zYSg7s7u7Y#g(4~{uz;g>ZhkGPWZ<%09Jw^TT_#tklLpBUf6#eB`fsf>tGn{cKU^Q% z#5eNNzZezdcDIg-woVNsHNK&#TsegP)CzaLLYX<!i{Qum zK#O9vvhScnt}S`v!NIk5FPEsJB&Lv)Q=A^}vH?$53>+~5$50`;y03>a3^0KFU zj$dOVH?X~abJYMcGTv3q167C;M+QDr6chvl6MMDt*zZKN%eHK2(UTa;;K2q74Qr~G z>4#k(3uQVE;)T1^TiYK!!0UF{V}T|L-mM#Z!_Yuod=AjnI+%x>yW4?ops~mLk6V4qvegH^&W*G;&*x9!S(yGx8O`skuV|2)6e0TR{5CImZp>_)iE|bpJ zfB-kLO&ui{>J)t$8I<#_;l8W17Db>*4<}tBs^>1i$#HxhgUkT3`s5#!+1>;X5Szcf zal8JrY)DjpOdg%#Cw0V4IopX6W<*xVYe2o^=Wf?E0i z)$~VzE}!d8|;kO?2A^N+N)p*1gyb3m|`-4oL(F4-uf^Kp>Rp1|$-^H#8(~fcSl? z;NZR4-JP=PHbYsNp=rWGYGZa45~LF#H5aSJ@N+z-EU_WZLiKe#0F_mJjiX3!ft|2_iiH6nMK=HfV0_5FKx#&SK$+P9R=+WzTF_yDh%&{1=E}(b&H}JM_#yYV zWqSypxHG9#SmP7X>mXG1yODC~Gsp2M1(I zu68YZJ#R}4Sm^cj_O1dk2N{o+azRp_&iR=kv!dec^5{TWeH-K?vT|}_SH00tP(%SU zN5-Mey%3cH4m5sGe?Oh|_flG^m{+*C`4^fW(4+24BR`m2p0)vp2&749COqYZWYXLF zqX|GFDvnzJp`~0@PfuV-;$!X;vwU*47+c3`NnTNM$$S<#;haJ1OQ&YTjev-lBmDIR zb!vXPe!E8ms6eBnpr9ZkqGtvN?L?6Np;oK@oImjp@~EMeMmJBT=1%mTyhup@Uj56L zL7~a3T^o>tCWHi63g$o%9W%954HJ0vn~$ zY5bd&!5l?)M$|9iWncpGd*7ixffMnng|BGU*<*aI#6LcJ|3@kOtx^^f60);x40VWC zI_lMwwNFn^PcYmNA>i3SW43JUCMZ!M!gh9&LGD9woWI9%PkM(Esa5i2gG_SE3%qzl z13O+no~*)xA6sCnJp$_ZFCZ=7Cid)lTOON$xyHmLDYw(*5$#5mW59a-dUbafiNTsd zwOmz;gp>sH>+g`?sBL~yF>t^*!jGeU$5nRWd5;?!D%IuG+GOwtEUViD{P92kbbYc!+6Ef!r_j1GS%Lk@NO%L876{ zp|<{z4CF-xyH9|U0Cf+QKYhyXy6uxsqC_KNrAO3BKe!g!re5F#aoBezgT%zd*b-(Dwnq$xPuorC)T`z7no%m$9-nUX z9&kJGbJK;~{geSE+D>CyKqnFb(d^apt-wk|gC^y7ZVOJ^ORK(F7Kd`H2uzw*>psM3O4 zTU)zwc#iHHN1t43NgVd>7?D6-kR^7bs`5JzErS9GP1a_{`XQ8-}+!lTC0E zHf>~6KmJYA0RG2L!}1|n{zy_F_#K68$A0ue#Sa*#pIAVUB(}g4PxTghE9%?$lav3H zfHptLQQ?o-4Sq63@WvZsWbAj$!u!V|kF>`I+vOFP6SApNT^LBC^U!+1uI}BuL$oa@ zg2nUbL6@N=+nLeQqe<>UMqa*elAwm!d+&2N0fz{8t-7*=glT#(ZJf97gS=0P0jkzw zlPd{zfZ7UU&XyEqmiD8u%Ba4Yu;k!Wc^k( zeyvEQmY_Gwn|K|Pyg+%^b~(sRZR=rW17q6N z83Wr3M$04W~yw^EOT&PnkJ3Aipz zHoe^vQP8jtcb!GlI7P7WRJa9gn^46*KbJN5EgNzB)AMVUH;t;mFC#k4(<#@D>{4v^ za;MjiJ5L=b7|mEs+|=DVUTL63Ri+3+8{oEYuz|%LPAhY|sbxoUIbICbV#~Mx5%=NO zugco`-q?b4-Sk@iKD81cL!*G2Vsy>u2Aa!Q&)i;cTA{MjOQ~Z0w&o-OS3!_BRwgU5 zZ_1)xE&G%guG$F1YHHc-!4&bU9IUGp&ML;}+`5JQsR6zK%1gTGEc%3qH(k|Aq6dq| zLAz|*hF##7i5?-}6ZHN$r<1Co77K&PhRTco=uCoN;>3aTOV4Ac&&VDB)TESq!|?jQ zHPuutI#ac_dIubVqaSYD`$LaF5Lq2rYzYYu7ir4iNFTk_<$@!rrGR^+~>+c}P%kOsc5|qbNrMrJj0N1#I?=QfptmdlG z3Pw`JS~bI?qZJzMPCdVAT!Au9s|+#Y;xTF2%;x=sfa9^XmyVPsx zb`20B0q@bbPp*;)FJdr_iJ-+R!6!t8Ky&E{u4|KLBBtPyu{JdLQ=eEsqAP2H-Y zZ7}S;i}BL}k7j)r{E(jd2L%PV#7!BNPm|Yl^#~XH{wpg{JBzlEo;5i3FXmrCHFPsM zHs$T=cT1S+5}2542FhH&VX=A%q%{_|nU`+`9ftBR!8WN(qbEPbzkJmgMx~H3$iG4U zSnZ%yhrn1eW%mg35&j^(^Hl8|Vl}@pU12b8yJDE7M^FF8aH#LH3&*EAL4eO>pT8s2 z2QpS0$^orNz@EmtcJJj4==yONc;IK>I)7C>l9 z{BBa;htqD6l^HqoHB*&4P^le3iE-jR+e$q7AML$$R90QPFMKNsh=7QIC@mme0@9!;A|NFV z0wN{dT`Hx3bV!4ABaMKRfOL0DN=bK|Yd!C~$JyU^&iBu^$Nq0W;~7H{SZm#Ltu^O$ z{c0l1vv+Hd9|;S6TWArMU-mVNU)A!mQ?24^MtUODI&2~mCZkK0Nugb-?nC_HVjy6h z{q#oZ)(Ju0&WGLN^qs0CZR~kpn2bcvFXVJ6MM!C@Z*E_BW1&%b;dOZ&lnB6|(V6Uc zqL{OCI&$~;`0hY#Q&Sk7toKs#e2b5?MxntZx_2Ws`9u7TVe@$x^=!=RH;~te5j$EW zr8%G_tzE_a(AGV2oZO)YhS9sxbfn}exCw7-X;-MtZclHz8y#@c7kx(~ z8{coitv>5>I%G>~NU8%^U#@9{fF*7$Ni&1>?MMZK!!4ypukotgrWTCj;LW?oPXBzC zy*oifTu)IiVM%}ogr?q?Jbgs(wQAG*Jz#^NlBYkr)zTBGj#pI#UCu>k*^%F(WS4Uk z0;ODBt>qS7hi1K$gtYfk@zQh2HYd8B?p+R=E9aN^D9pvNh$dSo#b3D!J`1?(kIc7g zU*zetQas_kex=%VpKZcgUCxlL0jf~5Ab0|63_dN)6>y=O{2WZ z`mDdd{~L@k?|DCwGht5M*wACg{BEc`3r(9O!Eo9zGJs9}?6ddZlY<5qi>dFQb*O)c zTwyN%V^#FCsYwS+dYMY)mvYU>5QWiOgXkWId zsfM@eIn{z0FtQW7L8JnKPz_}c7ji7JoT|(g)PI}1-!OR=BWZ@Z%3#!X%s^7WX!Mps z_%PX}TNuhwPlee13VY41Lf9b_wbGCvBlKSZ`d;WsjSp`@PjqWHi4#@mF5U zi*g8b7ydiNL2^Q5Iuum=8>o#xiZH;*82lHcU%saIZS2;d^!^Zv>m4b zZvXOp`kme1!6?n|))AGt>Wxp2(M|Wp_8QpjSeQrQbtl#hNJ~vEEF+6ogENgl8#ih{ z9RDKKq7Eo3W^56Q`r3|PsrOGDS|98mZrv&~oOX}=^5qw?uIWmE8uA?tfVf>&jsiZ% zvPVZp4;unW7r@ahlOWvK(XqPprPf@?xwu_rGJ3qe5jiTeZ13yDmYM3_b3@Y^O`YR- zkktwYY!Td;&_Bb#)q#H|BDvi{tefjl`#x78YNKOk)Mo#9kE9Ir&HD@Ox0@e4S^xaP zxClP(D69*k$j8kaCl{^yw2Sj4;c5rOOzSJ8Tp+Nkwsn{J2!*aB)dD z;2YTA3=Fgqk^3OD=h_U0o`!%I#t+~JcJ`g5DZo$>m z^k{3jl>QwM+psTzVMh+{8$_;)3<`+mkl!ZZe-qB$Q7aYs?K@HA8ps3IU>WLYYfkul zS0F(H<7hJB!atLp9*>ydCqS4qt|8MNo58EoWhtB>X$WhusvzT~+41M$<5OFHXwoHU zp!ZV2F}{>t(EZd48IVMecRd~xUacLK8nVsAx>;F9$Q>-J+UVd|2l?8@^=OXf(6F#d z^KC4^mO^{Xz)6|=_uXU3aet2H2I_mrt%N?2-WG1#YrOrv*_1~CHX%XcqNApDv zo0gHmnV!l{Z{m4!gZ!U?bc)*XSCtphpNr@c9~$nnA1`ymfT0HoHV2H9%hD^<>u@e8e0W5C|2|P`YwJgU|0SQ+n0mRv z9=u=puQ=V;-rBDBk_3?p)fXmv_6&}ysbWA2Ckl&s&p^1xd73>7=j?@X^PTqS`yr2{ z6t={r)JW(hB@_l^2g{VgeTYuCsBLW}>oQjkHt#CklcW%K4uDJzYUpIXaeR9eDVH!& zrsC|(51j+M<7%o!OppFqiEQ6_vK3zX{%bgw z*qNf4hM3XY=^trHdaa=ox)~8dxt6u#k6*-dTt}F>r9d*o;R%)|>&E%?n!bKc@?Vsn zm%|w~$^wG7l8o_RxtA?nFfw9S$~6uUz!`w6^r~r_xbIKJ8LNIT1XJa*le4gApv<*s ziXV*VcjQwI47l~45yU8V^WHf>Yz-sL(i+UsU*iyRIlruwbJw7&;EKv*fiCnBM{lnk zJ^dPBNGas8_3{_SAu)c#neofA7ujQ#CO5Ega$c`9-hTV`EwliPvcscMteSUqpM9Hu(}TFR>Q=Vd;$91xjA5IFs=7i2W?kuv% zB=CQJS4W9Bbl`1JtuYtkw|mP*;9X7QFTwJvngAyBnVqiNFmF8x+L+YCU3zVSp*d;& zg~#LO#-ztPkQX_gRNu<)W03#KOS-mR2z}7h(eXVk=4M#350CelpzHLJAscJ78#cd! zew7Mb_7$RO{&ARcN=OCvL_8pLwBTivU#4~e>qE0qA2?AX0Ctfq+R-`sFO~Atxo<+I z2FPfkCeuA?o0vYdJznE;J>I>8|LKa3j?QywX~KPDvbBE*S7??XOU574F1O~h4D&On z{EHsSg@>kRYCkT?i_gPBy`F0Dm|a@B5hQR>Xx1X*{rB739uyRRkD;ncsCE4GS)**R z*!x|6SG?8l0fsnUr@PueypWuT!);o{ zJ~L9yx7dA>Ks8ybP2sw^^8~sEj{?4X6Ayd8PKB;<11H3dk zhk3C)Nx;7rnhfC&zA#BPOmshtaSCvVXn&wsU=YwOy(U-c{EzYO>zhRF$z8C}7yJ+->X|Bl;6+ zySp|e&3onRa>!JlyJ1({6G((vCLvDtv{B)GXu(Q4T=rIuV!Yh6p-a={^&5jgC?e

    D?Ed&EEl5WED3Br?W2)+<7Eh}5L_?B?kW(FZ zY7q0e((`m=6H3X~YH0?L3gN8`kkQ%W&6|5|7e^TrY@eaz$uxO86BJ6j z!-XR@|IaL?f6dshIhLfiS6lwOEklGZtL~dOa@mSmm(RAPB_%&R4eg3AZ`&}Wtv^$N z2B;DrkJt+e9Gz|%m9d?B^E_hS@1gne?c(@X3q3E(WI{?>su8@J-r{fOo6j(A^rkq}QasSErDnu_ zkgHxyq%6Izckb=_l4WWKJPaTG0+snYx+RU7I{NziIV^v%BYuht);K!B8MC(CXkKvT zUA~MqGm%FJ{ipk0ZdSV+2vS>SN7xVN3Zv6L0H2BHZw9b?& zk6liNt^+0gh0hEt%F=#q^DzNaI(WTt4y&C){>JXOr-H=ov8E=Om>pB;XKiKnKj zRg$x47w#A^i~k;-!|3V1b+)2*wBE~xey4ftVdh-DyrYSe`1r5lAY)>Jane?{wqX&?N|$6fFn3mi4oA z1VOIF^bei>NHa_0esXB5lC&BFTEt3L2d<(vm$z_$lD0ZsGKDicJ_i9q7E8FGJc09&=OakcPG^1y&U9sSbt9fu?uHKxWAm*8xHAAVN7_{QxD7?G>}pv}EozQ&-zADHJY8xl!1bbEOMOq>_l__Nuz=A( zO_!0_a;>$#1tz2!s{SqP}{m^B@b$_Tm7F=rKW)sy) zn37ht_VGwj3i7N`v!JS6mx3R;ArUxI&!4|$mRfFoSKl}S4UK8nskdm~Sl#duPQEuSCuc$Tv(IGR5K+UBx~oqI6?_z{_Uw1) zpI!sLuFtFyIuT<>0^U>=)$zbC7^3vx7YAFqn4HkL-Iqydh9aQOpgX=B+EP*Hq+G?S z%uM=ydd@E`>oYq0+k;F*H*aQHLIO*9+gL7T-)xazK)~+?m(x=;qzRB35rBv;M8aDgG+tHY7j%b+WPsYFB`hYSq%+g%Q{eW(C2rAH7p&R7FZ{Ul4TCVWeC733!H9o)9 z0Q^dw>S9!cE%`!76f)wgSxcO(3oq`4uv3S{z%2=2Gg0cRT~Svpf*>LGPfx#EPARfr ztA))&?0qHMAXs%d;G>E@)(=4bGzD411aDEsn8fg(xehy;w3TYZ$$vll`oj%bI2y&Q zDVor`>49++86(keh!eF?x{VPVu5Hn3iIt}dLcBQPm^@)ZpIun@{Ppp9H6&Eo6{WpmkZf(cA;zHk?3t3)f}a5Ngz~A+Z&o{Q zVF70SuH#+OC})Q5_P`%r`_n5vH^>5rI%6M0C|Cf8qp(LHmNOx{OFfNOYLsRg@?V3+4XnSEiwFri}N;a+Ggm^f!350o8KAbQt)6%q=sJ7FP@W08xh;3c{FP^Yz zY><^t#=gnF>FwZmAzQolWZAz7hgG6i*F-Gw7^YuV%o3#OW!<~qeuU1T&!FmwvENd; za~pvRzkgqlgX{ig-E?qcJM(5E!W5NNZq&hx{(5i(A7g*rCq11AaN~h|GjstG5}m^# znY;?NJuE`&^yITG-)#`Vo&`%%oG^#{s@+wIpb->neFb!26NCbC==3S(s#e|w6$CNA zUND|kit({ZrL}$pYbsJy&Lu`0KyyQ*ki zSuK|EDgP^bxXp#YGMXnOzNlhTJS2uS^ntEP8hq+&vfPo9GBVGO zL@wsPN3@Dn-Go9QElq+Qcr)IS@#LIhJF6oD!XK3#yf;{r891xpF^* zhlf*y`Ygc1>TK8fzN6jtQj+M^QEkfX`?Cx?-1pImh;RyDZ@8+GuYqoEvm7nh`c$dtir!EF~cgjSp zE6c|cDsF2j?{Rtv0Wd@u!KC!zTgc7xe7Q@|5x#QR@JZH*c=h+SQno5biyK=Ig$PUV z(OE%KPN<&cWF?|%6TSH1hKK>Qri2@`MMdwukd{WFK*@rrOg3sxW){}N3XIM*sdNkM zhBs;ud>X9Y)~~jbu|z~XJ~mzZ7<7AXbmw-3>!4=Exd?Pn(Kbt9Z}J2>*2};>S|a5h z2F`L&@e=Fn*i~FFZ(nLg#=Ey!wLYlE1sCX}p@zw-5Md|?2~BM#Kiy5g&z{A4(oV}G z;pivmx=RdN6yL-|5mwDgzo-H&Y9S#q`kCE=7;a;5^5`CJ*55z?bx3y6!z~A_>eUZx zLJ%U9RT|KIEwwhigj(*+V}ggYBfb{zudCb5+Y~|2sa;n|ZB5C`!-0md!gYc1Wq%*R z)M;9qeNJX47NZke&YLE``mP~#mxHS0Cno{%?_f$uaVidAnu6E**B zcJ@Sg&LF7~V?P-n6=u!F53|&q+X*<(kay+YY0%P`o~l852B^Sw&l{Q=*oUH*@buDj z2zwbX+m-%3x!pI~%CCXE+TU%Bz6`Z}k-<^8Wja~?c;lOk5&l#WAuFf{u$-OmRWNJ& z-Arl50)BZB>-r7xtv5}Ut7RClHNyu-E5RSG*Sx*O&=5B4*Ncl7A%{!P0?!i?hRZrd z-kt?11n#B$YB;hfoY3cv8RNk~?QRTuo`8&10f8d0$ww%lwnOGhvUvQF8k?%%EK>vJ zTR_ac0afuxsUbyhrF6ymWG723EXzn%>vqYVk#8n97P}HYfsEu=+yNxi5Sqiv{2~UI z$L{zAufuAz{?QWF5|!fUMsaa@X+2aTmZrV0mWQ&_sPi>z-={|}wdj3*GR13V7W3wK zKmrJZh{CfM(Y%*fbA~Y+C;r7_y#XTFdTCW;T_y4C+#@nBj`>xaS}>IS;abx7q@cnB zgbp)mougS5u&C8Z3rdFtIj~ut9Pi~!Y#~r8keNicDH44vm*NH8o>j!q({d|S2r3Zb zf1*)oG(>8%Ay~FIvT3^wyDM|5Q(wMRPnP&@AYH zMz3-V9Tqh;2uG6q8&W>GnBEBim8wslrdoQd>x9R|G=pYKe_!gw3q2^$Mcfk3wR_ln zTz@&AmQpV4<&PF4n`ej`t2yzFgNM2i*FxfI`C~tk@1!bLgbeB^aBBRq+P*Lf& z(EzK|*H@L+4N6kT0@==6o~-bauEkYfXf{s8?<-vzY~>JM=Aji?38>+rLeskZlznXM zLnf{23QNqQLcnZ-UHa6VcNjxHV>Mc&%B-s|Ph_FN6W|Na%FkxKxS3o4OW-bUM|;LUd6~DpE#lFFaA+e}2RAKe)R8@-Jk_5&6LLaODa*6(u`nqOjXDV|DdF zoev`J1U@0>-ag(7#H{?sOqVZv&dbp8ALn$q0|k$X9eVZyoY+5`o7>i+Vj_J&dIY4Q zTI)-qfKwSZ{$rCsd))x!fZ)-7bpR+78u=Uczebc|f<*q?=BIB(fu7DP%(^YyJ8Y4jCefwrX#)MqX&J9dO-Z;kbo@8qA z=x8T5`;AjEd*I@etB^1DC$8H6Jx4>z?5wP-#X=n*na3gHkaQG+1kxdgx}?i@4!YBi za;}F70_xrbGu%xgqCmLtHxoZwdl=*|E6~Xj_>5Ltk*N!m;%nvPm{`t%j-p}I=5|sB zT?32)V4MXM!qfk|NoOE?$i+o~=8N5uK`D}%v$Wo#VV+Ls4^TFGSonnZv-bU|aOD%O-7M6R0+7;``h1Pae{QR&` zP%I)JeIFn-Xtvx&=wQ1sa??y*VBt$tC_g`JywzA$&X$~Yq+8~z?|&iY{C(ax;6$7$ z+!s9V%^{_k8dw8E;B=C~M`gj)Z1m%&Z z%|Qa@wWBL25G%E`4FV6CF0{+2{Jt~~4X8&S9*ZeNgN=HZzTc^1wu*wXA$l(0W5CZ; zhJJYfAGmC6A;u)%I%COw9lcpL?gKQ7^+WYHOIIG&#W`J{Czr`lOF;*MUHq_9;gbW1a6Tn|yo2|ZsfS*SSPxgO|$5$P|*L7rfk)MP_2)62T zV*JZeCK|KsIl1dJtH+QvbQuNc0Kya_TyMb-w3#IeN*nT`vi^Lb6WCG)AGwk;+(6YT zcWQW-b-w(YMc(8GcYIhz=ex907Qjk+;G?9bxn1D9ou5_~l8Xn$Qko`ayPE(0J;z}> z|Mu07l|WFJ)&uebrV}6F#|z8sP*SqD?ahgG;jeWkHz>l(q?7^9hBq6+n^=qo&ECNf zQE`M&n75a$j}#jDZ}PK9Uj{+vYe4V-`_zSij|VN9!~`o1l%N~*gFAW6rR3%G4>yFy z+l;bnd=sG4?apKScO}3>z0?cbEg;f4XZ@&M3KYQ=yqWMvJa0=bSGCLmZwS~TTT6*YnEPO0`KDh z>XtxV@Ej2HJ5s)iWbGTa4!3K3V?9HdqbyKn* zM5%qpZWRCgK2KVKbfO&NYi-+HVi_4!z0@5h{8BBznOW@*TpJl5eFMEJX3)o(vB$l< zKd-$xJo31}uS7(JfE^p)?vGTuk-+-jQ|ur@bKf9N;~Hp1fjY5*?D*5F*W?B-5*dqe zM4(2?Tz;Fcp{GayJ%xzF+{rB3@h*iIgpj_DT78J9aS=~G=%gCh;c=*AxpBi(y%smD z8MM&1GG0e5?PL)n=U)_QX4utiNFRPrA@MSeFl zwf77SH3z>(tI&a4fC@M{cWy3WAQo_@LCpYa0`AMCQU#`PfDQ95tQsICRmVViCxg|u zy!-~^veKjYF#~#~Y=Z1NB-hWf?-~$%S2y5ZIHz&n`c0c4=;Y@@&Z7e@B&aJLR~J5m z@wzoH-t%~rzcZTogL z|CLn>@NQdxJSlQM^jR*bMWH~G^&S!y5a%Dj#>iNL258289c;oeC`9YEWC(%1=@W3Rqa1J~$zF*)wh)DKZl<2T_c(na-$y92`2B=Cj#fPZE9Rm1NHR_?ho2YTQalu>K zFbVt5Wv8V~m`M#C^VuF^!aDF83Uye+o}4+`fd`ynjgr2|Fp3ERB`%@B-Bs7FQlN)> zu$Xrn(Y!|Z8_I+C4D}9JkO}q_aom;)jyts*Prue$9%T!_{%!IZ_AF_MBrMX>1NlnV zX{A<@M7^;ZxP;xY<-cQZkI`1ahEd7DF*TG8mwY139?Yb5IQ)MrjSDuv-MX(++HMWR z!P7LS6E!R|9RP&tV9viudU_LZOvk;`Yv%)l3qER~0FB`rxn9s7adti{1Tk8>h){T& zE7=zkjOTIf97_M)-BkB}NO=QA}w6t83gW*T-;pOKq>9M#i|j+q1bL%%BN^ zB|sWTSH09Z9-yuL#3u;sqgbkTGioy&NS)A!@lOMe2oz;3b6 z>^=AEhx=vE4>~5gjq8sFa!m3|*g>O6Mextoig(RjCPMhu#>=&OpmDyN&OIO4{k8sJ zPZg0QR5NZE%9l*0XBeKg5epX9_J9N%2gI_iZr#2ejhZcii9eMNRv#@ENTM*Yv3}bV zU-uN%ARa3<`rPDCL-T{WI2P{DIJ(_CB{y7lR`Y7=FP%UshNQbE@%i+09y+YvdU z4$!WsOcWrGhGYg?-VCI%9_F|@B@5_cgA|GJc2w;}{yUA~{28#ys+QUdJv5*46RLXE zTO?)^F-3tW5hf(|0W(X=qV*U=gaJxhIqHLW(424n?7s!UERD^3CYMll#=}0)HdlaU z0J=sFt5elkA**jzu$f{zhqju3LcTd4khNKY6r&!UZ;jvH1AqjD$Z~_E7E}#bu$g(FmsF<|afX zr6~M9sWvgDk8{6e!jwB+cnuhJgxdjR;6q*AYe;(~YV^f<2IfeWfTFNccLaL{ys*+d zo1htTl^MvMNyY`Ez~$gg=eD=2IPKIHM0_U-j92FU{dZ8nF?v`|wnws1A6UP(TAUS% zO_xr(IG7ea03Em0G@G|rG7I)g{r1TE03!tskOHkhNN;1p9i*!S%!%vk8(cpo1==p7h%loJ_gG$1Fkw;DKDh(yD@!;&qxe)qpH?M066rIF(mFvfpSP`o{49y3_xPzg@s7t zMN{jNaE%Kh(}!i}%j)@`9lGkBJ;L);k(PsX5m<4Ymv~M4z&Qfmhr}ugrU#5z03c3K z=wcJ@?IC_4~HW{{f z3UH82oZ#o;rS2tXK|k8ir~H+1+7nOXER&kS`*X_)RtIPb=b7cm#MKI0| z{3#YK2TV5!fbRpkGrkIgwClNfcXgX{D+`T{eT_H`fke4M7f2rJl6n6m8Jo?5jkn~j zx1UnLYpvRwunj`t{Ioaf9ULmzB&v&8*czKrnIqJxDF5lF-@KrS|Lt`JV7*V-gC-5Y zOjhr0NAd|p9}s6+PQSNhtAZT?ULD+5Rz{&*1T^xiqSd6KqVbbb$#2M4lTs{@CviKz zL9js+Yp6$>PdrHyVTmvuEg>&}4Y=WQi62^X0odHMzM1J9)U_N!-7`^t3Btr5 zfq%^kc6$yW6;{-#%2oeH0NVgG{py{Q>ntH+zROb|ZF5z__PXC)-GH-|X!yF&nA0|o7V|T896FwU>V>{C`|A86mv$y)@F7EB+AMK>!Y%%64% zgu#^D+&Hw71l>El!A>F|T-j%UG>JtIlyE_wJ7Nv6q+7clCh8HG%nsO^E4~~!i2bpmoZ7ywM9IT; z4D!{E=Ra)Sy})$2a4fVPsRq@8etX+RQcj<8TQil(;hIYIg7@yT_S56JAQ464l@`D{ z4`;TC;*Vj?Z&;=aCcZ7CO;2pWJDYtaeOx7+n6aH^GfZ*S%_KgMi* zw1l9Nmdm&QAK;_+bI92aes-IHl$l3!L%ed`3gZkNSDCj1u?IM>A16MPy}Dl3Lbm%y z`Ey?;T&_Ihvt7xXNzjm-RG>{gI|9X8xLX6O$(KUQ+AE)%>H zlKmdbm!acpt$PzhLRAj8MXH5>bk5Px#d5|&?8OW01ZU^P6``v)6(rpS;h+J@I)tuA z#P42vXir$y2B7b)>U11_YM2v#K3fDbxrqYJi^1Y8kH<09_g9mBQZ17k@H8Mgf?5@HVpt# z+ClW8dT1||I@*dty9V0U)&PV6{8QotV+LQ&K4}#Odyg*z2mYA^p%Evj_}LAoK9J5OaG00} zZh(&7DodwQx}gftoBY1_SSRlk+T6=J?lJ3&g#X@g$|f zC_!!oxpgBUN8v9N!dBj4wHmRIX@IjOKrbilg7pKmpo~gwj?1cG>qgX@wEjdh1K+57 z23dUn6fau#2Ld7p;1CCd#WNo{P?=9|<6-$TUk%YB0`k$=VAvCdB077 z#CQW+RXOg`q~K8&f7##QK`mUI-ZGRSZ>c|X(HYI8f=%Z?YYBZ%j`_yH@38g}BKmdY zBA0fg)VMNz$*T4(Z!8J`+CgK4Ppp&|lR+a06Qy;;RJtTq5+Fg#qZt%yrZH~-O`w6k z0aV&LuGutI4C+Kmx2{W2)jv;$y{okVNS!$c2$xgj0;Tii-?9N_78dDcM3bJUSb#{o3|UzZGM1o_0xX#Q;@u+wK|6cB3S_E!ge zd%NIlK!&L-#p>4m>#H=dFe3+qwh{9zZM@k(ssMfyEES0w;sG2F^$wpSO8JGd+I6ca zkbQi4dM{*LE7dZ|ke2WPkal2$CjN!(GWypZZ|LE^=!f|1RwLjA=9a(Rs<1o5I;g7z z?h}#ALenE^`r_I1PrM1TkK3h>W3vg;qVC*Peh;J^U@3}u#vg%eeXLSWnynNT54$b= zANp=b%lPc|uz0o3zaa&Eah}1liE^dcR0iE~fv``?9K>@I3)_OJ*&^KoI!|R^6PJ*6P5yH3!7LJF+pfniW2o#6{$(;Era72N@Hl?uj2ZQL*mk z{nL7_X3o*^(h3N}|4EZ``Ol|d03Dr*4O>~BO2?`;p6uCx3<49tD#US(KyZp2nYk}d zetnIgy;<-)bgJD1U(392Tv7UxVt7otWRZr}cmjd2A~6=9g!8j2X^6i;-02>UGU#3uf1DZx^C=ZD15eOzJS}JKV&~4v-?jP$de7!B^3?1} z+S(($TrGgLBHPvo(zVyPEcvTP*M_G?6)R_M)_l36%u%;Zd+}8}aq8{jvKO7KkayuB zNU^-<%1j544$~5LxB;D7OuJ6k>gnSBnmo#vC?yGdg)(L*X)S6Iig;I6Jy3$-5r{zbq(@%pMZ@MMi+bs=IGyx8ed1yycZuuH#_XWHZ|^)AgjTCo zxaM1jJ}u<;_7p7~JguzmvVePlb?>TNgdUH6`#mNn7KktQ^!=>pXoWgD%48>a00QZ+ zR$&3L6N{{>AF<%&5w=p~-A!WVGy5ydgL=d%PDiYqbE(modj`l1z-DN852>?HL;2$$vp5Zs&C#SlYbvvN(iO+&iyk@D z!^19$v6OFVIz{TqS%BGQRul);0uZ17L$?@>UxKLt5siaR`Vka=Mp;>^-#f0Rm#%yb z)!~LbLOdITPQ3k*lY>=Hu!(1Cr94E(A)|6hySzN|gADoTdH$SH)WO3vV8^UsDQ9?B zG!(+vYTgzpro650sLBf^zgM|M&3qTy(GkdtFIu)k<9s>g9uqRLa+^a|C^LB2F&)gMIO49ZUCCsB?!$>2e0*T?@g+fo0 zZLr}oVnk_I+gWPi{QK+UJP;4_1X>nR`R7t$Gmt$2*_WvkYz07DN#3fq9v4B|Xrszgrb#Axv;iR#Wp!Ow8gRISeYAi+_>9JxUV) z4g9e0KOWKlP6qma&hXzt?ElZO{?D-f+tB@A7K!|)XX!}W#essv&aKYs)W)GkU}J1` zN1k2|YauKAqyD8^iLWtre$Kj%yc+m)L+xR?h;0|&(m8v-9*K-aPb|LUdt<)w&N<%{@ahI{a{b8hazb-kCn7k3}kd`MpxacEuNA$`eeqqWlz# z=R7rX1skvSw-sW-dwTg{KWS=#v7R%XmbQQ?^v`fmU~_Ym|VBN6F|F*KI<(F z*Rj=xK_MXI6+n2^T9K4kz(wVA6SR?NI`0-jyA1?b1g4rT6phC7{P${h+5-*>vKjlz zG;XgRtr`m-aLZ~IKN>gJ%x(9nbln>WmOZi1&UPzjBjfZRsu}HJSkx;-jw8IXrt-64 zXL|NkL3ZQg$s#?!t#b*=(3XS528_MF-!8Aq&votJ>?Mg}#Gg7rv49X%y z?`S^9-^wQD%+-47(morsx6I$VYGw48H}kkm3m%fxSBc_VUi0=6Ooq25_!%YC1sTFYP1f8g@sAb`C+2+nX!IaL#39`*>u?PQ4UU|&_iZzTmg37 zcME}bYE^nqxQK?cIOQe!xUWmmO7JizFiVUL4x~Lb?$)zdA&@h3vcCU~+s^9YjNNKH z#ZWdsX}Hu&!|7maH}XllUfW5#Eo_OGf#bArRhKNbRem@4T|N>tlx5h%Z5|XLR^cM* zUUn>9aB{YteC2IZBl+C8*wJpZEFm+k1??&EYYYJyi#6kwNSeGanh;JF7DISCXIZ8G z9b-P!R?IHzl+Qc@y(ToZcFiP==FDJ^`AEbw|n z-7LvhSIw@>+Bs9oTE*#Jx9D%M%pV$#{4>s-_Qx*T`71|hDytw{d?Z^MEBl4>9<#*D zA0kI76r11sIX};~?K&P*k0p7K>yju0kil~k8@F0|`o)6FmOdfamAu?s_0|1yDSoH> z*+1$l67mJI_Dc2DUy@5s<5V9gm|P>ou<4sSUX#+IW$<_@^DK5o&$*iAFOa<9WI^1I zh+kL!xjOV$mQ?n6r{-CV8n1+d7O!S#$xaF@L+K}JE+Um*e|wAmP)YPL{Y|Vn%HhUW znoT9G8OHA=TN+tQuW^v8{4qOS75r!G7=3-*i6ySxKCzH|nD{kcRYH@w#S5RAu$rJm zY0W3Wscup557 z-01r|Xlr!=$mccerpT$?u;~AsrNHxK>#1{d(!hp+Hj``@5&wyA-@(1-eY$_kmdC_& zj%+6QxBIW#&gcbw{pPh8dBrx@+jrJd!;@yJZNyZvqj+<}LV z_Jyn8ntwJU=TX5g(O3I)pnmUe0392v$7ZyEd*Y-6~P$Gx$&;WN5q3pmPM~CgS zc)0Y^R6$uM_n;M-FNr5cc6o-o_6iS#39q^<`Fdg<2~i6t3~sxUcQReWo#TApQGtK0 zZ1}^Txyzq3`AUhP@rctWQ-c)!-}2wgS|( z;{Jt~H{yy$ZoGydVly*^@q#yMV2x`|eKIao=IPi5qZ*6J5`Hc)c%7rF)6%7iRd<$?i|3ollpGeAp>X z(icujkB;wlN|=>-vZ*MM_7qQRX5xSFWB#p(U&Q(Vum3<>FqiDJX5-=7r`6xlSDk-n zA7PCaQc`VR;Gy&0i+m1ivw=|L7}K3}3KpheHWfunPfF6q#50*fE%&}#Xr!#D7ni@< zdt2rxnLu8V`%+3lp!bptCAQ@&(Y|Tigdxc2HeR`F>C79L$%wl=wLqvYP@vjzbB3$o zoxFbgtbNVCPR5k+nxYBK%C4m;H|;#^ohzD`%{Z{IBNa!E8~luz-55#(V;9}1K>OW4 zjx^ar&lTzJ$;WSWZv1G|Rx;|z$)ZY3_i{z57JKnz{#RKG<5JU~VeJ!r$n!Ga)(;|>TLOqDf zBu04r==CG1!l_REvUAEO@3S^~rvlAvG;6 zg1_IFFUZ)aw6yr_BwxO~Y56ZWXn4_%Cw6n7$oKhfmd&6kOl+b==Cv#G)?~?j*Y*uX zs+dm%z1V$N==#fa>-s8ocJ_$lHgKrZ4=U{P78wji0Owmi|V^CdL&Nzcj$<1)Kei9)R=#K{ta?vm!4uZc;!_0bTbf%US5*2v9a0N+qcfS9S@}&AsNj+hkJ&0M^e!( zuHndQr-^zQelkKR5p=$r7!==ULv0t@>#i01bXTOt%yCx1@#X7RiQ~2Y;WAYjsAZbV ztjuGQP1yASGBq_dAO4BrDd_TQd!i_??ioG?(aZM%qd5xgf2T201Yuo^t^P(H! z5Q0A{jzrN+B?K)kE%7^Cun(jN1%Ej}uc@hN8T#`GDmB^G(9+V{xY@Zr+v@~R(#Ze# zskyID!sWsm7Us}|udJ-BRqKgjGhc@S<-*fNn@Gg;M`Ii>hK!QMd?@*B=X^a(U}Gf) zRJT{>GFDcsYyBx$kXH2>jC`t@YQE07oiS5pdoFT~XwA;f?v=Z{pttrJ7NwXs_CNi< z2rYG|+xFvdDv$F$DRXnCt+70$%J<=P!I6v0oml8Kln@semsU&}B6PAniPs*4_pV${M$B)#s!V*kBvU2FaBmcKx5wEYM zIg0kXGd%Ls!*nusXMLo}f{stSy1L>8j8Q-DqqXPwsZ`@OLlb}P7@bN##uxLQg z+RX(WIXO9Z$?4`STKB!6pL`OZ@qUvR2x|lgc^+#d-)yryt7dsW*!^@10ot2y)S=zA z94<#uND&Cn>WxK&K5~-&{Q2{Ml@+`7+#dm|Snq4y5vbsqJ=s`j95RgOv}R_z))Vhm zNP(d1^Iar}T*w_8+|$FwE`f2p`180%-Jw0ShPcN2R#3mA5oA{_EyJ4*4F0w4&|9># zOwY@sco8$)hQ>w&C{yg3pxe{yaC(YEYOg!7(!ywISySA(Z;}`sRW43;fi097%OF5t zJi9M2o(z@vh(Z5}#sbZfKWEz&2AlI;ET|IF(x^>Iq7)E#-siXVq=xJ5aHdR+-JS4F z@dXVtGbU#OHbg!64QpFlODo+ui5G%wZEcZJQE5eBdR_#)L^~^^2vt>82R0-B)azFr zYBY-rwVTM8g1%+NsAuf2udE=cs;W9|Od;ebrbwu%5k$+c zOqI!y?8YrEE%lXSXwQwJ%23XfCgHooBH%H21HaWGfWctYe0?h`D~Ig=XrPu>n)R*p z+_TW@SLfbYFfxC?(hrvo^6;BqFBvgPL~y*mD$|J}I@HTcdvoIl<5G^eX=qoN%J(;i zhYk~FXcQP38v4e^$0JVu-6k9KK{2$kiFj+^9bypsqP=ENY%Ti8%%n zGW=-H^qW31C52+^AMVB4?d144p@M?KRF$#N#Oy!ycQ`nHB}H^ zz<*uFTGaT9BN>GIc!DMOwuHsJd89tP^&sN7emQu)-USI- zdl_HCqvXK_a|sI!MDfr#h=J8&oR$Af?;rUfFVbjQYdb z?U2^&{YHG5u`;+lZmY3JAX`dR(JWp$JMB*3czX-1(7L#|uyb;Lj*BBc+wI@fNaV20 z&Mw;A++^qD3sz$etf=5J9Zc|76um@F^Sr_M{{6e%^@O#nyL;QzvvukuHu=ehIMM6j zgG%4;y{q7y$?3hq9jj*@j1LQHW4xa4DX$fz$;a2fEmdg%zm@$@Vz)W7Jm*tLWYT|e zvJJU8t7# zeGN`0N{+zt?pOm9WxM zvw!`3bJ0JFDjXT&=NDX##PMmHoh1YLg5Pt4olURd3rIt)Q&S|kxMzR<{PBH20HCOV zk7{{X?!P`Mh

    N-Et%Kg0v2>#+aqpdmSC)lbkdQ(cVUnb83z;(M-*C7r(zBIp-SO zo_K5Cl*0D)Jw;7fmzS5nS~ZJa$1GT*ZjIF4{$1&S)VC-ss9^;s5>n7o7GP zoUL?swE8YSDXD#AL}k4S9B1d|CKwnxosQJj)_(KuoqthL(NH5YR905DF`mf?YFMem zDYIIk)?;w;h5Z>hNIxI8et#liw|f<}%gBsf|NYHN1_p*K-s;9&@#VH>&z?chza#8t z3=FjN0w}~U{{{HLp6t_BS2KTD`<{`JG4MPSTxw}`^-Cumy?L#x9hoOjo}}!D%$5HA z@%=j@gzoV)sHNoOOF$l{_QxRRf837ol$JJ{=(gm;^!G5H-G zuaV)+ct|10t2;YNo$da5QfePauwTD^wpjS=zY?+jSD@hke$W36t;T;3@_!HVe`zoK z-vRc2Re%|uDDo{f%NA)ML4XgCy=^S7sECS*DbnWU;PERPzK546=v|1lN z;B#_v$`&fb$OcZ;@c(+7)w!U-@PkHB5S2MbHnK8QCPQgi%2W8CgIma?yzSoo{_l$T zazf0V`D&`9YOD5?miji!N{fkCXlZ8~^A%_f4Hihy9`ZuxgtZX&Hmmj-i?k;{HtyM3 z)`WD7>xD>tL7;YqUKi$F2Ia)=4 z5D@s-KOI#ko|5nE+S|cxQk+=`WPk4ty=9uM`-H??uQ|f%b9PCLUPo1^se`u<4|Q1G z`FcxwzrC<&_(k!}D>%ab(&i|8N(q`6y7+YsG4MyX{qf)CyxfJqs> ztW!&ju$)A)+jWOb@7U3DBB%o6G_Aqpw!uz1Ly1wEg5MX7T#2qXAASAuh4nxv%|JsV zR)71p*)6C3yR^?)?Sc=ro*)bvQY+l}e7Mrp*3*LzUO^&e!zx^$@nSW0k$@wPw8%-!z#DJvCVWe8gB(qrZ)BM5VmG-h zN`D5Yr!jcoit38D^1t>|8vZKZbJny_a7?uL@#c1o+>d z@#Az7F{`trAJ@Jyw}^2jR7`}rg=EaL_5K6U29 z157-w9WFkO$$&mUtI44@rCzSDkq1(RA`cGU2uFSejnvDfjYUXt zFdy6>RTCeioLA}}RV}I7Ji2isVAHGp{4F^0 z5$PqliM6$IWj@+dK8xH6YvPxB;zPIB5OgkUv$0TQsW90yU4f2S7nx%;s5CJ_l$uIO z!foiga66(`@6>fZnzNkahBZ`R2J5@EuNrzG;Q6nc-)pVV^m3>6IR2n>J#d1Qj4bq+ zm<`jUH|~Y_wTm?Z#LLTjVZZ0uZ<$nOHICfA;Dr{j`;^DZ*V$5|b!h0(?e&>>feQt< zF)jv1NR8_zzUNFe%Wsk4VUGA}!zd+F6O#}Tq3TTU#ySZ%^9|LVxkfZ3v=f%!1K&@k z88e46J*t~`Z||_c4E@ny3RsoKAw$mqG|}1`xSs;0*zbwVo_UaA$3X@=r@OOhRAOvU z?J+Tt`?T=s?B5H|z8rR5UN)CmE>6xNpP}ov>5mJo#*4n*S`CJjeGYi}wxih<>jPM3 zae;@0?+N!}m}z)1#kslMWjtE}&7Z@LD z{x~>|dva=FKndE5@TBVH>jW`^nt>LCTlVeieM4IV1yz@u4uh#0f%Slvg(h;4WQ{Mr zL>_J&8W-)xv0f9hcx!(x))U+w&$c%fldQ;=AIddCDw?cw*?WfUFBds2bpE-+PaQ0V zL?y`g98UJ^1_xeG98hYul)IykF^SXxpDoRxG9Q?;wz3*(HZZtp+QaML4vr*e;UtN; zcUCE|nq3Qj4+e{pQvG25_j4(4X=c5BE3r4H7R%FX{W{fU4yR9W*gUKbY=<-h&%Oraqm;vjoXkOXNKy>D~y zzd8+AHCtMes#+h4%4~DU48j@esJHjq9u?b9Y5Z`IulKINYVRg+ssbjK?S0Kt=d^bs zy@IAwWj%W3aJsR8vpZWUWoO5JH&>&rdbj;mePh00olIWxwGBMCqvh51j_2%IN<8-+ z7D%2)8rJ!`(-cMTtA^a+y_z?_d*>ijW;r)H!@tnD~w)Jmb!^Hk8X8CTgme_4}%-k#Gk9yYb_;pB<_h+m5tgNkvvz^~94XkERHADu<>t{?>~NUxcBkX#8U=r@V!HWi0&HHv?zH`kXZHE6)SZA_T!{QP~>PY z)Osjpw6ZUS4suxc@V(me-kho6`!(X!zkM~}Ix1D9Vcc`FAL#E%&&TJqIhQxI3sJw2 zZwTohk??@V+eTEhB77dd{H<4!8aOo`=TraF^d;b5ipntwlbwro$So&}e6|ITj{oR!#s;m zSGT4c$<&x*)^b3VYTL%6+T4p^lH*ZSlxKoofps2W@{iK)U7b8BDQTPE6G#xYgxWNf4mKMizgDJkMB?Hu__RH9lmUO;7?>`hC$iZC!}?C&)T z`T4aSc_5*oUuRe+X|!#F>d1CrDgma?$g{mY^Q(q|$DK|3vewD53c09*9FtDvGBJQ# zL^bl13A(~0WSg#@vUk(GpH%V&>LZWEzIVuV)5&sjaaHyl{rY8Y5V%oCypb0D?OSeb z^~!15#zwqP-KYC_*x6T_!Kp#%O!d&UcrIAe0NZzYovOBuF=R*6ex`CZJv78>=5fsV zwWUm%POCB(v6s+qi(y1i!<#JLz5WP4xZYqGw%^70Y(w~4rOh}dAepibk~? z#~>&Og-ZI!z@8e0h<01wc--nc*NwX~U5n#=r&+eKp7s8=b9>@Gyt&=I70R164M~D4p%7Ne`wBOi~8+Nw5KIp#>)(vw-pe0H?qE~;|3 z$6#q`nWE>;nV^dvbmFwTm)*8!%#>-I*3tOo<*!qzit_S~6*O@{gWiDwwxbTl=FfY^ z<|F^+DX7iZ8?vR2P5Db<#8o!4ezrMYj14Z=11Yrrt#7&$RPUy#E;pZ&u*#N41mC

    ?k)6cJD)l-Jp63>batl7i!od7UZ1JggW#S0zvi}(@bLxsr6P%y zb)k`k1ty5hjBO548h!Np3)jPR{h^B3qc_j+)f}Fn)s>(jo9`uE@GW{_&yZkWk^sbY zQA$&@v(D&*wQM{H1F)4Qz~6z`>5C-JqkXZDbdYmP+fz{@Q8 z7!(s2qWcqgkTS(c)pzRjn`xdvh&FQsv8tmZzfrp^$NrFB+dDcF-c9&_{;b?MQ^0l5 zQhyGB&Nhcvm2vP{+xXg^$n`^&y{{`nbze=P@YFxs#w^siXIy@Q@6?p)qokI`n5fYU zvwbZg0f=%TgT*V`tLQOMUIP3JblJKi^p-~%jvZF7%mFfjYp_kap;D4D zD(L;Lei_VLWPr1g4OXVS-c9|~)RcM3{N7w+&XDz8an972ca_+MY+QI6c`u*Izm86Bnu zxI1Gte?|4h72U1u>55451;r<2JLlK0hVd4W#zwIGm-L6c$i)tcO$Y8C@6J^DY3{zy zeLs!_#Dp5VrSB7&)K2~DgMmOCH?+gpH`R_v8h|p z@O;6m#`TP#C-#Mod1D>6rw@9z*ELR0bXi-^xaDtDjoH=ItY-NnHiN@a_mw|~F25DY_n1sIvAfSxfUn@{=jU9eYOB2&5)>qvb)c!7wP4yKeG}b&;vsfR=(a|xC zL==0qXPSnGhj5sqj30J~=(0ECzn?8HzOF!lS#)f@I}d|?G+jwEIl8z=*c~AC{efkE zNcHx*PB-$unyS91ZgMRO-Ct~)H=pSs15Lw)-G$OpP?!A*qtSAJ{hywmHpOEi^iv#) zqoy^V8}3pcA0w(15g6q|ZzrF`-RdV9T$!D-mWGq_ZkD%bX?I?W|M|gjGiKVr{7}7_ z;#i?J1qfdb4vvFn_lMkbcql`6Fq+(E`})_&@c?T3_JBc6?x|J6Bym$NcyBZ*C;_y^DRGZ*htc2Hx2<=#Gm* z(4e7aTdJDcI-*NbdVGwvdu}v}`Y$y2PoC)fJf~Co>tOS)y+tvoE!1^lqZ~0G`l-;_~+42pco;C{hY1V4rt*op{KeY=sqNdzq zG5@Q_5@5bkKR0Wvb1wC^9&SE1c}J8X?QBmpcw`VqbjhdDKlt{FiWNph-8)2*?V9`A;B7r%*4>4qqm|jj?jC$yS&liw4ce+jg0gk;GuGSzetrlV zFARe4g7L=P8$pM|-{6DC;KTDaKJsN0$;J&Irt6N2@->_tJ{9ceSL1zZF>bf^&%W=% z<|$|bejUF8qC`LmgZ!)Z$(hTmeFz0RY~8j*)PKFsG@P(g>AUKFaC^tCFfTlMf^xpz zX!5K`uwHz7vLG~Nme+EA8W%DtEG%^%O#{NHWC}bI!@x5_@)~Ao+O%1qKQCD0vWnl7 zCR*7tE%(3@0E~6AKdGr2>m#=2^Xk{D?q9w?yM%VfZ0~{o%_)+CzG)9<86Be~5%(T*-&1`7V9UFDPH3LK!8wDee*&vtcqUHM6pk9&SxnxMSY8h zt{u+UIY;i}5g~_KavDgq z**TF?dP4$8LQsx#)tJFwPceHET^9Z=^}*HcbGxH99PCXvf^<+2Jusmi(9)1T&)c-s zikbr?JU$vKYvZ&(mlN{n1%I4A2>*Nq0G-LxJ`@+J$gj)x$87PBLvsNl zK(|(#x%Hdb5-csFFr09C*cR;Hfl^mOK~x9p zu%7PHY7gf;Q}9gIL7~-_np&abV`%6ZK;>8U_}K*SlMLB%>gz^bZv}g(a%)oMpDJvyuP=wwrdr8B#zfUl%bB)Fj*k7CyL&Aw-R?iE1H8<@X0^X zwK*~}+nOfh@x`_$^qDFU36hg{=z;IA_!EU&Hjl&cl*NIhZntxQpq8gAHR`3-tgp8t zX7|W!K#z%=1eh2<$H!|~!ON8$8Ja9EIe&kGW0(yZyaJ9z2m)-eB;Y?D(B`){&vI3} zvBbsC%dD>lB>ZW3Uf>ug+@XSu&R=88H>az|Q&MR=S@l}fCuyQcsaby>Kd*p2Yvk?i z!P{r~9%=*<;&H?nf3>czDYf3m8_)e|vMXBrQmGS3&B}?Io!tdSg0M$RJKcyvF^p`Q zcw9s`LoNScrToR0u&>>|d)5bkzfq!l5rxxR!o;(B-i}ABJ&#B}=?-s^AsMNr3p(3I zhxqOH1Qqma{1#Gl3{QqqAC}cTT82bY)s6_tebV`Gg)tZQ-m1S$MwC|NX8M}5p0kH~ z33kcWUTH;TS51@`hpFp6tr!*bhl}&^4HJ2i%YC4N^;4sr;6^MQlq?mDER{g+JZu?- zYXm59Y!Kr;;IcX`U1-^8Ffv6qf+pm*+RpoUk{j%hz#M{E!2_hoWGo3^`O7VjRo&@l z&$0~r*V+NM$nI{A_uJ+@-+AMhxmwOshDg$|B_yHN{WY(-hI4c%T_vx~eT9aEjMV7t zU)08ICH+6r1n>}(E%G`mD={aBJ=@US9DTnlJPOR*h6@lzAn1WYigwc|`pT@%yfT)@ z^=c2cqp+ywv^^uW!Min+#RW3f!N0e;5s8i$mzR=&@>vc%4ph2$$sEHH^d*;gWA02n zP17NtpnFh%l9ex4m5@hx&TeUof<*S&!!10+M;a^AMuB}!rCuD6RC95b9`9je=ivzQ z(k4?Y+Clu6YVyv+!IRIPWR67;0g`T*L}@OZ4gIpgFRu;K%RU3PzjK17F@6r)!Ydp+ zJ}0YrbV#Y$MLjH`PVKl(BBNu~*Tc0$)8pc|RlJTOuM4?ws8yf@m+!9voBHyJH*yN& zzn{E{O2ezwWHJ`pDbge!J3-kFTvgtO`AZ7uKrQV#QLa(n!l;@kF^CyGxQlft22;D2 zWnVoKthNrzk8zk$AD$LBH&&SKUF;o3GBP~a+RF3OROkMK6UiKtyySB%iijvV^wZv2 z7&A0LnC^*)5U>9ae~P*)%g_Fd#jh9!na-%Ghi7{P;?aJ}7ia_)6H`!xU!88XO=$^V z=5MbC{>cTDi>Cx|lNjSdN{w}l5H$lYk$S<_UL8h*2Ocz(CmCFQ!F`XLg^vy5 zi`a?^LUbQWEC?MZGAJfXz{0hLhLtwQYIutx(K&{hkTz4FKntd(D-3+F%(c;z(Qa#$ z8>vzq7N1)yKl|G)Y7~rr>-m?fJT9+lYWS@}KXtwA5b_P3M6^HNlZ0Nqufv8OJ&8l+ zBbG^VCVmYcTvu-_pQx(yJl&+8($W!U8|-KdRy}na`AFXBU2IPYiSsCvAa(@I&mVxuX9i zXPJI9`P5Tb#2UDJRF}}#FCTcs8B6r12UtNzOayLEoh{V-Bn8TFOsoxXrq)X8sjoam zjp^tb2g`efrdkK8utAVDBJR!kd>)OnSquC7XEpK4AZKvQFo|<{J?byl!F-z-a6Jb_ z6g_QiO2&CeL{?G*-sNRguY)yk%C7$ikPEtzPEX5nTWdYBDGB5mhA#o(M(*C5sLNCE zDWIeY>ugM=8L*w@$YS0+0~JWX<)g`#XjD&9alRT8R-qU@4$PgncU8?XY?pZnbG2r$?3uU0XdU2|%z znZtjI`#EoZfRLDuZigHGuCw5Rah zCcD6*x9JB+t`miH@^S6M3q*9N&VKa;PvpX|D9LD;aX>NQu+UekXNmEK1SLDur1)=|gSRipR|AsKE9NX^1Hk>UV9D3@XU>Fb#& zoGeqP1NFRc)|=q5vi+Ml6KbYs*ipkMFnTu)m%!SD=PpzNk-wctRa8dHKxL0lO8BWj zLlZEUzysS8Yn^7Pj`|k;d0u9Kj_X+6W5=p!NjVQOBCRn3>(1{R2nT>$H4#65z3Eek zFnLUTk6-rkJ9pZlyr_W@fNZpDQnZNvl4VAd_8pzguS*pA5g>qKg3F>F-_1Fb!>9si z>A0{SQrMn<&MTYqRPaRcf;$wb^8AMK$gw1z>+UgO(!;XsRxlW^n_L+lT?g5?>p0%^ z0*>9aQo5e_-1&9ZuJ|9x6Ebd+{zTr+uLiMO&f~jkO~RC-?!S1{PyYT;s^MS1=@;Vv zhul$N_Q5wGc)hQQW#?%LM9cb-Eq-9xA0i(*%Vzgg+ZA}RmO>`$qcnKy4_ z#|w`yzcgtzuP{~Zi3Jv2DYHEp z)TeMzht!(o-m03Jm=V_~sEusyT9 zrpLJLue+<+yhQ65*{nMGYlW@s7c;qosX`@9%j+e3!}V!(7U45n7Z=F=?lO^=`6#q7+tzNHcU?edndrB${739tQqC``Rb>(`)hF=@TMKZ8t}gbnVcTXxZkun+^1+oc zfos{kl}}ws5*@dj0|WC0tiQ;%0q4P+H-Bmkj7Bu!=8a7@{T6Dui`ZGRAwYdJk`t$m zGCUtBy0F?ICgJpa2Bpi!^h`B-Fz)R3ewx?@u9CIE6n`MbeOTS%fqWIE!#m=hbQ4cE z4WtMfwqI2Ofsg&clA-cRfw&N8dqe}*Z!7fgw0%o@J$6s8nT~oeXN#Ya=1z0Sb)N9= z2oM!5V5q7ZM^{veTY2KEF%vFqkK?AyMDK9vd|6Pl(j~VlEOK_){FT$2uJn=k>X8W8 zQ35*jMMK+rX}n?8JT;)Q`X?lif;~0x3vthTWK^WaC{Q23^i%&ZX{!sPXI5t|aeIdG z__mtkKbxx1uAV%O@@;+f`ZXdd(&NV%|M9RIvOoGic#xerTz1ri6ySX{=nXbDu=ryp zamHpHYP?a1S~jtG%3LqFVn5}`FBIz^ljW8%8z34Qq>}ZzlDRl*B>M(*f*)3XI5n9X z*fhloXjz<%Uo(YIgo)|}${f3|hxwrnp zbnmpfTOd0ZR?W|8VYyBXo|pI!X5*?Vwh0$tgT@F6VcOr&+Hn7WITE+tSRytK4vY!j z33guQ7)k5A=P?thjSghNiu#Xx3R(Mx3mhFm5!U*-?|ipK0diC8-19WU(=N%4=`sPq z-`=N`!}cKn9t3$vG0IP8{LrKx{L=w@60~_rS+~U$@lWl!>1~7fx}`o3v+;5_5(I&b z4N2#z9jCK2p!wk5R&#OeIysblOi37w!cuJvcm#lM!juLFEnPCbck@Z+>O~;K-B>z+ zN+;Z#E3ujWtk*0WLHzM(_8Dp{PdZ2DgSS&B8!OHYpiJkqVo1_r>5 z{lIW~CyQWtd7R@lCUW%+=bMYQ0#QP}*$z%syCd6r z3#v>n0Up{Bb44d+)0F^j6{uylo@1u+Q#fEIAqZ$~^h9j>pX2|q7hM6{R)Ato@l>rf z*G$zX9O!|~zC~*+Ilcw{Dg%gNp^fwgdR5amTI9 zRPVixz`HLJGGOg+w+Q@ovG-+Ec&V=!+x=3MOJdOqS^FPALG;)OpF12>5E7B!!KTv? zDmKd1MLg;y;TrmEA`(KQF(h-huz8cZQ`N08GX)&Mr)+8VB zAlQ{`1lWkmKRRK@-gFS~O*V8Tc^ZP${SshrqKLDqjnP{Ar<1*J_qMAg7k#!xE!^r> zE@~~o<^&0^l6(-Xq|DLPlVd&$_qd=$zmk0~sGHoA@vff1d?uX%GQ2%At^srw=xuHg z_cBc@WiOn}70LPSF}_;SKeUfvr`A)y<^eQnK!!mrW6yH7*KS2c(Y;UP%qSqcfqmWq z-KM~c4gxiM$F5R@l*Q$bczQ>5{y=}%3!*?9d;kx*o13Um&HV=Ho|t>k+f1~dEPbre_1VLZUC^WQ;YLgma`6q8A%tGFqn^_I_}0J*BIeV~&lo`|#8t{?z)(a1Cg&Z~?4Qe#(I%bMw z08fSlfv%DkfY>Ip;-8MQT^DvrW&y$>EnD)z+@}T&?!-d4sew9DGIAF+ViuYuVW+c^ zOZtCQp;zlw;mTb-hyby40vco(U?b?2Y(Bx?JQeEddmoT_K!ez}^OtV8+VUMBN5BIM zcb-9Jiy-KkOK)39$4b-*L029Q00paVB@$_Z_WNs^W-%B!@Tk!Qo$Tg5#{wO0Sya>` zOq9QUJrbs-RR@_Wd7+oHG*>X7MGXf?q}J){Lr@-fQOj;>z?wH)sPRfPAu;i%PTath z&tiJ^1ImZe)q9B&IS2FAl|ieREa)t~@6y%PX*97zHC*N&`G~>W`won8nd_1#4Z&Tg z?5>jv^AF>`v8+TB(8xV-6W9(OoNT&{NRlDQE7E6yuRr+K@f0j73_U@fbNkX$Jdn66 zN;yKIKkmqu@?AA+3bsQ#ww3HR)}B+G{+>|NlcSspN(V7ChvoM5$vUD^jx=FSZFF#L z0>;j6p>kz;=zxpp|AId7jfyhzb0!yZB&;l`H8vbf=JGqjHQ{hPL=6a%A$GUJt9kM{ zJ=o}CYxF#z;7iUDNABV;c*{XwXI(eTkq20J@M?;2R!t{|SLe9$r!%n|@WnfSG|2aT zr3F!qf|Jw0-;b3RsSJTElY$ zFEMVNqY69%(lP`Av2>`u*rz}R3l&s6IVv%1-=}$>IB%S3ATieIFP-p6zoKx$Hrfve zP^iZKkX5Ey-XqdeiQMkdTlM=COO)=p(`feSH$Wi4O(R-1ba|l&(`_Kig$bolIN)~u zfBAtJ#A@XNzxbMGzq0>6F!)QAe{zXYP$dCfLFSV3sP5Yl;0I~c^Wj=;9g%1)3~;$@ zlkGF}YSpZX6Zz#zZ`q&spSkl0u!vuZ*H>9D>gTEWZFhG3Lk6{-|CpmBlo6;q%xZRB z$GJ>XGZvAyGt)7hyFynKTz7)bPaoW!Kv`Q_RuOmIJ=+y}sA8;+W~f`4I)kF`P4YgW z7*L=f&$R$|Bu{TpkTi-*Sz|aD7h_2}HKsJjp&}(pJD77@M*@qzz#^r)ixsZ6G%CpY z!@rjbxcstlEHQ64yQHPtv`@E>BJ8`mf+T7~LLQe_#JE?FcFo{ZyyxlIqg%Jz_-FFb zjAi(@kvxc>mv&?^vMAuU8Z#nS^Lo5RaWsfW`LvR{cYiQtM(>RqfMAg=*BMI8>g?RC z4Z$U!e>6@M{%Wv~njAlHYBy_lI#0sCO?plsD;Ix32pp)T=B;xQll_1CkRcM1FHcyG znq*|v2M(#Z=$-@#cFlo|TV5Wzho}Iu&_COppUUm17j{!hMU$#3s!N6?9${tFMLM6T z#ta(1bdToDRK!4rz=2oUY^6V{R<&RL_nchhH&rnq zmgqDhgch9aU#80zTzgsI5q~t$a9j-b_5O!Qu)O{kO)#}>|H`0d!wevk4}$}{VE5UW zd!x;~-~n(cL@HkN0PnCx42l?fYq5xjb8)lnIqq1&wZ*}7dNc!R?98HLm5N_Hambg5 zcP)UU)Vk~ThF(p&2&ldjsb=ADbuT)hM^KmP1iZfB-~xE^LDl^GBKl$n|0)YC>(8QBh)Pc_*w587zY|GQO4VmyACF9ub_(Q?Ee9$H#w6;MDww zxA{4+2W!1=x+*IjYM#yKm)-qJ!^Ne;^~S=&BCL)_c&I|vF&f5%1s&Lx_(r0_+RyxR z?CB0@zInXm^Hvk9LG+Dy7X2@@o6Wj0Dwd)Bp+xZoIDgs>cj@1@oYkL`v;f zW3yt!+H;$Yr%4Zj0qACy23Oc^FL{@EJcP*l(s-ZVTkbcl{Nz6t^Yw9=&N|Qb{i&kH zIz?Dt)=l&y-X<*0;W-1Ww*F?1ZI`X~yL+5In+QkMv!^^3VJP8^pY@QDf1Q_)=~dm{ zX_2@YvPiuW+n?;!Y}?z}Y42lCOE5D{efiWTQk^;3j+Fyr)`co2JAuzQ`5?NgQ3iw4 z5i2S;l=Er$#dYs}M~|(h@%&bdX}xwIsZiGm>(JhX$cTbY&ZzPB;B1-s()hY-Hk=!W z%JW3**|XHP_~A?ly1YaIMrqas*Kr3}jC5w}=->_MqceF@KETd6Po#)`}guQ;0n%50?%VtVB&s zwNZ)}u%@qDXt;z|A5IAEFI9C`8=hGm3MR+pFg{#8bg)PlNdpMI>t)zmpU{^#yY!xi z<9x2`MSPDb2m{A0Cye^*_7CP0)kiwD{abyLOa}tNeHGl_q3P=C9`sn+QiGFaaCamP z(=Y20$F_|ZSzPVoGbcd`71fuS zifMM6mm$>)Zg{qL=hhXIXlx96ZDG@V#{Ja>?*_$yS&^U`?uJ)oJMSr7{`MC#NQ*V5sEi2>9a#>9 z{oEdIxr1msze)z*upo%PI=Blhi2>f z8<&ku7Wv{TJ-r4S)gJ-Imdv1AK>f2gBfsvcMdi#6#jE!zxWFRAi#A-4mlvpzvpXby zf{luViHW(iwS`GVWm`d9Sf5WON-|W+p;wn2IP)H-p;34!M-#86zIN*HE$z>3y#H*c zVjYwGzla+64>6J6iy|p*PkMy;E=p7D>vvAVt;+Yo>-Nii^aODl@m`8Klg9f?szYN! zqHt+-o=VrV@j)dewTUgacvao^G`D;5_k=O=_j-v1O6n`qnqrb~6MB}pL)KLeOJL2` z-5M~~6#YmqnStLHUMcdj-C_%O*^)EkYAO~)3%8y~cNa%8Q$#+$+nY=1Hl5r*)w3`$ zOIoMQY;nuqt51$q##fcrked+35Um@rlk`_*=GRT^tcOWcH|LJ+-AZWKWK6>|GP&XU z^|NptIw>>0^jc#0MR}*?@U8pOa2D3m%C6C*u&BW?mrbfDQRupy#i72DvcQB@m`uqx z>euJn&ZyDRdFjO^w&UwB+*TXMbBnDnyR+1o4u%U9XKxxbawXgKM{>fQ*Wlt>Ofy&>|lyAB9ZMLF?7A=cijk``hLTwSlg? z{yc4#se3jxK7Xyk$e&uJ6OS9(#JT+h1~ULidin#>b$bxi=;m@#cD7JszJp^x8JfdL6$eze>SB z`os#GirnPfEYY@Pes{k}ISvaIa$Ot{i03wCVpbckNlpk=Y?}XU>oXU^7zekQTsQF8 zd+h2~m*n-5_1U8m(Q9-0`pn(UDda#(OthC4ox{85a{Yg^E({T?r94nVKOobi8`ydO%rrb z$=WfI)Lorfl(3OvhkJSna|pUX-kZ+km6cC7ok23JOgg7tvcd!bi@gWO!&`9X0&fKQ z!kVXir&YTQ+csKXtZ8c~hxjztV-AWsQ+-APc9y@Nz;{X9LY(DTkH|MdbxajIHjI#d z4SrlFTnTla{brzrYGA9_mptbnV{J{@t*F-))q(YeOaPs%YBxAPA9eqB<#}FXcyf%U z5ARdIlBQW)9|K#~RFBiX^>vZ%()~ZAYHAvpX5YjZ!brmeRJ+lS-@ff_?Pl?jP=1So z`uePE=XoZ_M?3lAj<%?bWWet&w2Ga8HuP(PAt`GigiE1oBQmi zyaf5Gi|t9YB@i^6-PmRgid=7*)m&!VlW>-nls5G+Gan9CH+Sw+)lwAj?nsy_(4@K_ z@OE^)UYyE%c2jz)sir=eq4|dT!_TYu+Y~ZFf*7Oz?D;o?J;53U-RT>mHO5Qa0cYr? zmeV_8?nGqORDgiG6*Fjs4`RI(Z7l3OpL)-0_G9E=y=?-UHPy?; zQ=T=&NXeVl*B?I;r$3BS1nK8#Rhgu!kPG9f%KKjjDUZD*4#)hnk)G?!Rts<@kb~rW z61joHr>U7NFDq#yj)5v2^llWmXqX6NVKnu4&kT=hGXA_|ZeNhhIY_Fvsk%zp&C@UF zEK_~!>a;20*g-M!6zShKlgoI*L}V3 z0}^1cWPI?F8VN(QOyS|N4$dY8B0M(Cw|a&j3gMy*8`#9p#tbjmsfqBo;-ZqeD>gkB zUpL=ni>C;xAytx-hYLttT6{V51If{(;fH~vl)F8R88f8cJxHo7XmY8JEaO;^G+wS86aIk+O|`No4A z$*DWSK>RIKGX7oO3=O z(i)cI*eHt6U729n*z|Hn4*iwSM%#QGXF;P?4V>MR(Oou|r3Vj+|Kd9TvoGPcoFdoQml>UCpE$+b^RDn#i+F`+a56sL~mk;=-xy+;_FBhYq z;t(9RMEEl0ahPVPy@yEBiB(-{iXAOrez8Aq8k?2dG7!K@Z{|*4d~DqIw+*onA8mDeYnh0d|;=Xz4gF&V{l6F@lAUtnD zoYPHihW%#Dx_9COHl{=lad@`B+Sw-_3%Ty|KpsDNE``unHzW*~Wxe91EHL1F&aSm6 z?{Vu{WN6#hN^NRIg%6-UT!>C@oUXrh`rOU!7+Xxu9n$MsC#0(Q(A;Wc%O7GQIb*V{GWue z_yhmPL?M>y88pO@o_N07o*cFJAP*K+!~JXP9(tjkV(K%8)+U*DzeIR&KCyf(&PoW0 z`Wzh&Lgl_idm32xf0U>~6&t8u*e6lqzUm%6nTW^vUi0<6DB0Y{Qr67;_-mp%=f8G5 zvIODnsNbwAEW~RxQ&>;U|8UkSQ;HIM&hzM>d-Y}_eyzBOId$m$GRsUVM;Ak_6TC?M zQy`L##+DMkLpYZs4?K=RIK9&De+-e*Xy7Uto+z=C#S3W;rqA4F_@Rsw@kFmNgg5SE zK-vK9do`_%Lg{Fs*!Yi!d14?PHqMVzUDwZnk|H?|;*fJjz!BGIwcNUI2kV}bhvveI zza)B{9F1QqCrHOnuaEy|HTNrCT%FKL;De%Yhw?FvRy|va;kB8BhBGAg%I_^YW@z6|TyhH$BGDFFU;y zY2x&+Uc1e+O%t!X?d#fx?_7} zm87{LM*oUQRUcQ=d%w;8JUX z*~g%}j1Fda_0z>9QuRl2b=p}JzWXLAtaJ`L_=i3Pwpln4kk;= z1ug(q^z+sjIrE>GN{UJV54M{I#@8V(0KQt-+-AO-nJ94Jqb&NjrgM7X zW!%l7K7g#OVYoJWQ3DMCIkmdiJ0k^~a4i(XD=~2#y=VdX`|J9l6RgI1MoXv7-Y+Px zmnU_|!V%Gt(%k{7L(&4dQV*{m`w{479u3XW@=8QXl5VR}VO#&W`o`+^bS@KaXm{bJ z)a{)*_rQ^-JZ?sJKHT}Tm{|e3<;zA_mXaTr;Qa@izmgq_Q5fpcDA{@d^V~_KAD|M#~Gc(3TJst}s zT9k3Xk3x`j^g27`{4Ml&9{0&I1gYIXWlGvq+#Uurq5^Ui|h0bC-hCXEOwuZcrs&w)EWlm{4Qp?@zB*- zlYzAY2Y@9U+`?LReiskT)M6b$TF5#-nWcFPCim%(cU_ADwzM~4QlK7(oUyYo81eUk z96i9_Wx7ApIn)%OmR2~KF|B7C$3%(52gI&fCV<<{>F3^AcD=o5qNAfe5Bay@jYBSS zyn#(T9BU!=qrYw~ijQPVz2?9*y%vl6l;hk&A6Fsv694ezy=?j`>nhw^ewi^TpOd!- z#I|7Y{N@u~fBtDOJ76U@4$tB@c&~ZeM_KscTA|FfI&AZ}(EG}bem!i*4 zvbGyA5=OmP_H%?SbeN1dW>F1J8apR(Uwt|77DUOgl1;&tJ+^nSH8fk@c5i9;DVWJm zc{49YM$pb6s}vt7WCf-N9%Dm%s&>eJ|A|{TM0HQpuU5(&6b9woUuOa(l3YOOA;sib zvt;^Uu-_tmHq2HfAI&$bTH@@P>$jSTMBSlh=OtYI!mFYOf6q^~tUH?Y`ExQBndMWL zzoE`g78%rdT|S0J_u^9#hqSsf0}dE_+tY0e@?FHA!XSBvV3(W;AYD-Z=C4Z0GFDD-C3Rgo_cb{gX^V`a2<|^afn- zb=8N&XLw|pF`Z`dJRGDKkx4|fHr-w9#N`L=RLt!Jk?+;g8nbdM78dqFc4uqKG$b&& zNM0uAe$ut{z9Z)#E^T!Er|su(5P*!Oa*sj6DRs@cEgo>CqOBJJ2=V&+vT~08^)Ipv zPsOPc{e**yKe1%9*gCDXdX0>gZ9@v`+&g&#Q#@#!l|>0}L6AXE)>EEH3JiL!ux>qQCGH zMgMsW@BVgRuAultg;1S`xjUAy=j7RzqBRrVuj$w(D7giJ zR8~IcMr!-BHMr)tdHh43^8L6t`Vgtr9b}xPO#S|bYbI6CZO#9zotz)cp15^tzI(6s zG;=*|x_{26{r!sd^{)Ngp)**irn;A^>&#xto`Rv{%OasYR@;U7p~LG(*?DMGP))9r z@yNHOAzZPOsa3>T!U{Xb9&B`^*^0|uy=-RkHX2Qd@CJfK|D0E8(3A-O_oNsC$wJd` z&8z?=%Xf*nB`qnw|GLAUV^r>WvOoPli?mbU<-EDc@v`$(r>_bV2CZJY+b4}~5{;Wo zj@XuQk%u|CJ70=!xwDt|MgZ)bsyVLfV^x-(gSJ`7(yWK+=^ zdfHFEmEq*#g24Ik!DRSUcFrQ=xt)FxX7JW zo2`M!KL3n$C7ZiZj zT}`>=eSMNRe0M=Xg&WV3Z}snO^vjncUjMN%Ri=GNtI?X;$nJ8c$+70IYsYnsMQ@g6 zwYugYR<1@p6s(iWSl(?nCEIwH^A!-3`)x|(P1j~6!L1rxU@;nPn99=IB6V{ceBu9k z#0h@@dMmH=ezMD91&t<6pOsG;wqlnsRDxhju^$yVU)&O_-y+R1(Hq{~ zKREil@sZDcM@>XRr!1rG60#5;S>Li|e1)o}Jm%4gW*2N|{j*AtQtQ+!`*|A&43=I& zOu5||VnrEoc#TRT#T!GfyPMCJ%_f;27T!Yqp1TWpBRxMO+5BZ8R(^h;HgcNH`WunV zkNsc1S{=HdrN>N|>Q_}5fP4jXh6x685gA*S;+WXny;09;ZoiRKhoi^F>az^wd`IxS zYiF{)r{<}e7-{W(2-`PtRkVE}_$ti(+H z&t!5(-xAV?Q%=zl&Ior{WK`bhO!MRSNBP|+JP+}J`nNYk7dH(f>D7dBOy~&bzkr1U zaPUIS=Gn}wK9_UPgBcM|9-B?R8+dtx9~QL|7nbr`*IKb|)M(+_kt!PUi4 zv&>0fKtTl)&@%S`Y=uDlebyNvjl7YwsKTgxSXytagL8P3PR>X0Nch!Ti{<{vd3;A@ z!W+$H{puT>U%s0a)t}9OH1tj{mc<@3T}uXZ#nXdj&*jc}w!ln-&?c<&rM^J=6noew zb(p4UcORpW*R#7P9LXUU4oUYWbpA8Q-YgwJ^{zc@aDUFm+!Amy6V_>Jy6<|)4Z!h3 zjz0OEs9ttgCKI4?kV~{8qaVxV=1!J`<-vw+`!wD2lr`<8{ZyH61O!P*XTfJ-w07eU zmUXILAudXe$R&|c8V@=KJ*MG?V`C`(G4%H2)K2dk`QDe(s?4!-0{0)u;x}EVTNZ(J zy6&q>(rO3WED2J|k^`LW1u~dq{ty|UvX41?_i;byA?=kjh!!gBh@`R$QQdA$ zl(;L&Bp)Ta$F^h$5IUE}5}D{3ndtsq{q}}PMM_Do8!d*cR2YGa$0_ADLu!q%_mP|N z;9yzKO8Cpmz>3v!90K_Nu-H@J$pT%k#s1*g+vRb&<9n~Hy`IkKC2i*uXN|7!UGBz~ zqrJP}Fb*(SPqQpw~iw|s?mB$5F8<-3CIk_PB`>aAi(dnXP>d2E(bl+58Yh9lU1t-%+RcVx9(r z!|%r$<0Ci7c1Zd|9Z4%27?>xl6%Qmk=wyuFP$(re;4xKEhgyWlyh{;D`NU+1&^i|e z5<2IVv+zJ+i6Wo_^K%st2$#7Yn+M(N#%7&Id47(%!f@Y0)!{Bj1KOR_^9#eMFNR?T z^wMh1dD->GTk;!LtDNSKwW6qC|C<+J--iVdm5fj3$Fw2eKo4wTWj*5SA$3oZ0O=8& z27pd(>pbg^n%=B!M+EpbNBs9~VO3i>)Nu*+l;KCy&&*Zshjyz@2U6lkXlT`pjUGCr z2;QahtGlQC?@Fd8K?FL?6kaM)m^5e9xJidWg_fvgKOLCz(A71>=#!PBw}q=`vCl7X zmO0v92Hl`i08U#*+a~jIO~%kiI%)>0;jIVEfQG+Ff(Hm1BJ$d_rML$dD{TiyUGnl3 zKmDdw5+Vc|JpkdqNn%s;YH>%)++Qnom*?gdmQiCQCY~4fk78lot7aaP#Av+UEUeii zZ7THL<-R;UxTTQDb)%6iK8affB6*%)W>*Aw<(^|ADpJd#{nP3k3WydU`Sm0^u=mNkE5-Q3Q9@0`cZ z=?SfV^#g!KF3${8j82;Fuq8;s;@ewh6{}+h^?-htJuEBgGt4nd9 z?Vv;n!exi6i}=oq(?_wXn2G;B`{(aYVaQqiipy@&>keb!%eTI#z4y`2iIuW*U@b;m zQXGPq!q6NoyFM*UP7p{%j&U4PW+^I*9AC>dKG{Zg86Im!$jFezPvTe6t5Z)J(d6WN zU~<bq&)k}9;-QaGO;H2e!PBur_ltLWnr#eieH^+!U0)ZGSzM50knJV0Q#=Nu+V zIN(iV9*#-|#`o}`>7|#SIW1*4;@+AIi&lS#kBq}6?V*mm0q`T0#vU>IJ-wXLfJi4_ z%=)g4i@rqq_NS@e$WHDX$V8ds6FeTw@N(8?u9M87q0RLKuK}yl;KHHpwbw^YvI)Yd z;0;?5+t-SMFakS2cIm8f(V3(vm|JLQKae3oM7>nRP%^Jisu88g8jE8AC=SBH88Btj z@#`-`G|;i10vcm1EICq3XByw@oph=TYT09!rqch$iN`F45Ob7s955e2E+9P>pi9DVxZXk2=(ERGN z10z?X6`sm=;gTQh_vLPyuwc5{0UK-X9;O-8v|$m2`#yk-IeY@ji-1N9|EX8M>M6oI z)v+L1N=AzsLakVdQ#S{xn|tR1BQf~rWFN|c(1%q7m$bPuEe?HNJM^yt9*Xna^^gz+#Z_9EaS%{t3PUO_98Pm+`f!!>V=3)3gmSdVO`+&pREE3gnL2|P%s<&sT}<-X$JNx&M$%-;>uCU(znQYQt34F=R;yP zJ(rXtXYXaac;Bt%5*-~g&j6|U;lN*Q1B6SU?-{SZXc)u+^=9hGXb4D9bMmiB5ZeBJ3fVX$C- zne&8-w&oj1=dpv<4oj}>!t#o>YeHGZd8$%Y5L}(peVAWMH!D!dGRi@TIXC-bN~C9v zT?GwB_d7RVaal`Tr=9ZfYZwd*JkG401KGx&|E(4HpD?FiSzo<6R7 z%a1FceH5DnmkGhr6Lh;r18%qVVVj_OltRWE4FnU;f7f@uA=#18v-HvzcY*Qd23DUI z>sG%)KT@48Y)li@#G9?97OAizBt&h=w+4Dab;)q%;7&`XL07gE;)?SFfe8Y!ICzpccl-M zX<(n|)!blV*Lq`0*7SbEu&|_g>>P7Z=<(&MJJ*Z9Vq8)$^idY)GkG_i8FIq=G>BqU7ucth};;RaK7$rK9arev^}o5-yxqPUfi9J zw5N1WDkk8Y7Q)70HqUG2xoy7rO8ytiFYE+YKK)DULjkXW`o%iF+q$nF_c5#f0u{7S zm9-;d;XrS2VT2EC27{y(q1UVa^QNZ@&#e`ndFT44EhhWxl9U6wM1y7+ul=U$;TPTZ z@JqNItk2c#3SPWAz`P|KA6#K*aBJeM#`7nTFm9SZboGBr-Lwp4H6;wLjQBGZ$vN=B zQ?J0%_3BdE8UD5hh6bM=9kY)5oNQkfaW{k)Nx#g0@47EK-B_$)jZsS z|I{34Oqg92_M)tFEjepNenH)sgX)cQ`x|NgviJlz3PLkf-#_Zlf?5?g|Hj-VZZ*9*l~YGF-dHny^n# zK}P4*Q;^cR9A&A2C=-v_`@O}M|Ec&>7imoT5bwc$%a~#GoC<~QOfb0^;-q)z#P?{{ z^rg+zjpJz42_^#RCaLnn4aBm5VGhJ9&TS^6#cID2?P2 zLbwN(t#1M@bRMT>%7fZ4P&4Kn8X=rql_dkUE1S!MCN09cGU$_Jk<7M?_nM{3L zJU!a8{!JFc@I(j#)}712Tc=^fu#_JrN5gXW+?IN=5zH2$|Gx*|af%xXD${)++iHvF zA>ZE<)MONe`*Q*<;IXCg@R&yY#uE@hmSPYHDi!^ciTNE|Ww6p#NMe_cBFBCJUm0j& zwKJadkzG4+{M3^MF?_>YN;1RR`+S*D(&J!2hem8~^g3YldEX%6MVRb&>e2f0s7Ux{ zrEGc|C{9Md-uaP>E^X+%gj>*l#YH{9C0$iDH>L`ct>pMUP zS%|*)ldh~ym^Vot=^8h*{h#q1%i$ODXT}2Xzilfgy=W_9@!{vHb!!~dKmrx75j z8#!iaQX_To9qv1g=2HHcjc>)}*MWFzLG)PX&46sN#&Wiso^ZNYdCg@b+Kt+BTys=% zY@CF7$-tQgc_$1-7z<(cTk znNHc=ZDV3RFq+b=;zZ!B06k?L@y|eZZEQCrXg1m6}$K`K9 z&GEz%*fD892PNpuv|8HW*!g|jJyb)AAaKag7?26_Km$mCw@L*zded2~pG!uZDR*Ze z3Cq#pz43exfd;;piR5OVN>OpTGyQ%gg0+LL|pgm9K1#X?`q(f?Q` zbUh53&P7~|S>@Tr6pl{WI1CakDP{VbIf8C*;nXv4J{sC;&+PS@BWRsWTbx~Qy4R?* zcRA>&zBlb0cuzF3ci?AcwgP%<#eBsZ!D*@!uFr{p3L}*Gb?FgEf9vXOzXXmW-xoVf1oF+mpj-ynhAam=#cgfD0Av}r4steXp+n~y{D{XHD zqc>{}XkF#HM-8fU=m03U?(*#Ou*=?per8GM^%YVYB#+beC%|FnbWzJZWC>T#$yfE( zB6{)&8bA|>|LG-QGd@KQRC9=HRnW?>L5DLFE8$aJaMd215uRF))6ofN4xryKrrM4@CB8VmZdeEEEbkrRo$%Uh>yK6 zM6o&0{jJ2y8m zq=9QW;_0(AJs9eZY0zy=mQ{E2ZJkMbZG|UYFxVQ=Z*0PoTp8s^a!Pz~;mA8@_dL7H z%GGGL^!)#izKym1O>0O{0?wqb$3)amo@WJ*VJVe^JPW7!1iU`Rz*i-Z8?N8k*&#Pi z{Y7FP&=fJBf^`WWSCZu0lydI;>M{56$pYfo69VYUuRpQZL_qM3jjLbV)ojF;b?F21 zK+Bk~c9mb&;rUEryNQtoBGmk|Q=gmRd9q9h2zph7c8Qpc4Nl*Opxa zzSzj=t-R1Cs7Q$MJO0D_y1z%xMwS4K;Si?QjYLk%9y=BtK5APArY<0|B4{!+sFzi2 z^2&F#31#OsW`mG5AScCcK>#Id0OM);kqW$ zYLx16vfTFYa&fhLV57>~{Yl0bynhK)A)P^_|qCLFda z`g;u)8gAh4R>O=wMJ{jfev7%M3M?(&Et`DnozF#F{Z4$H1YzAD)8_!y#|F3ej8&Or z>EO#*(k!0M-dU$lo)~OmvNzQsqDczl!H|W^xzo3{Wud|gzBlfFM}v>Ko8m!jNa_ZI z=k06oFz@5Ct0^%}!CC(Gcr@eqWe)@1!_BYG9-3)pi`Gz>HO08_3+O#x2Zs=BGkP3k z?FOxN70N0}loqJ3OO`G)>eRIgHFJ7?hku~t+NG})pFZu?H?EH&CHOEhTZHAd2Oa))1?)+}+V zH#^T4(vIiZM+|L*Pb3=5-P~6o$;>Z$Z{8_?rjp}6@;lxlZzab^Hls6!j8<|!C{@w@ z3vo`1C*KK>ZrTxYdS&ihy-wtJdUeY6b$q?>Tw&Zd+s@mD!Xf0|*3BJ(y_~klZz7lnOLQ~YYcHVCExMm$smRQ46Pyf$9+Mf1n z1rpgHOc`%MqObGSxD>WmLp@jJ=m+%gCEz{J8C+7H9xfE^9cgp_JxH`R z`BN7?n0$yUR?1B=e15i+vFaQ_atd<8a`1`wRSw zA0+cncu1gZ$)qu|{y47l0nI{S9U*>P#Dq73W${PU@^IS~5y=8HsR@#y7dU8apzW#^ zHhNYuRtEQU^If38nq;q846aD`sm+#@faByOzw0wMxwPpq^df*1 zx_Yq%9_}@=mM|19OuNRPjp|sRuVw|BzS1Kvg)$~jeZ%DogL>zuLbLuVUhOc-h!-7Q zr|o&DHufvN|0|L-keOAX-+rmGGH|#`|IM;~>W&7&!2( zCaTEB_3C6*HPYK!(q+KdLFu&ahT)5@t8kLhlXq>ponHHJLlzK9Bz*XmkFPHEd!a3b z4+xn@kY|CU3?u6C^&k|E$l!eq1u3>Q*jUkw?J&M3V_$wHSDsWi!bNOm|ib>DLvazjp7<&T>cHnn==&2q!C$ z$hqp>#^Pq}Qa;zQdokcyNPV-*~i|><8PKP0jt2=I#LiHyH zI_i&!3_iwpoW?!LP)H&fDh`$LO?gs*lfm8SU*ifA9ZcLsW z3T|mjO7ns~u4z8JmU5C^W(vTx1<%V z2KW6OaIL)_P6k-w{f>&LENPo?`nsL}wPhT<9CLUhyi!FYpe>hEYM!e}`Ar7mGK)BS zMC5sr8JLj!0UyL6j7~+_q;nifLloiQoFF)U`m0}@|EQD=rQ?j1vg9&RDa2;LnsMUE zlCK`HwK`31Kjxz&?wZJ}8}d(7IOy26K0VjCwNVN^tz@|gF{11I?6I|s5=!sYc>{#t zLt%LfzVZ``*W)EIS-AV-N$a2p@%ZcrBepe88-=DhrlUxbhHFNib? z$ao-G$<)1B$({6D@(e+Tdu|TSk`nIvj4#9~aDQ`wN@wR#>JO^kR;&9fOcSUt;u0Lh zi#|r^ZYuKM5gi>U4-ejKDo_<#zMJugiSpOpl+sHt7e}E^L?VmuP1$yNtB}fd=Z-r& zC`J?EFEQ;#shStRW3QdmT^?=N=#jY8igOM{Fo*Ok8}gUIHQrHO^Tvs$=Ko3ZQVl+I zoM)=0sC2l|*sTr_{WRS6lI)MTQP>48=rI zf_GJ>0TAl_%`IZ9eDOdR`<>~Es`o+^`G`XpWKQ&RsNk`s^RF=5m(T^} zFUV!WN8V-Ady6jtpzst`>)vaP)c`0bY4+>px7-&I%A_Y9Y#z(1qTrlCzcj7)c6}2j zK5KN91bIA*yY&`|y$Fs`V#ef-1I2RB=Djvx;PV((x1!n!p-n@Zn}1A~f~(at9y{+Gvz&n_sFKN|Uqlnj`0x zA58pj?q;-MhO|M3>0Qr!!L+$PoP8JR;4EGwQrOg~5E}qRhQ_28i{UbWSr`~@rI_A) f{l7rqmy+|T>8|E^j=)I*fxLO8^fLd2(TD#9f&3W= literal 22295 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 From 61dc635e47f89c97435bc8a66a637ccc3acf637c Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 13:09:26 +0200 Subject: [PATCH 04/23] Keep pay-quote copy out of the cubit Invalid swap quotes emit a typed PayQuoteError.insufficientHoldings state. The view maps that to the existing insufficient-holdings string via S.of(context), matching CONTRIBUTING localization rules. --- .../pay/cubits/pay_quote/pay_quote_cubit.dart | 15 +++++++-------- .../pay/cubits/pay_quote/pay_quote_state.dart | 9 +++++++-- lib/screens/pay/pay_quote_page.dart | 6 ++++-- test/screens/pay/pay_quote_cubit_test.dart | 7 ++----- test/screens/pay/pay_quote_page_test.dart | 8 ++++++++ 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart b/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart index e29db4724..42405f396 100644 --- a/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart +++ b/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart @@ -1,6 +1,5 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:realunit_wallet/generated/i18n.dart'; import 'package:realunit_wallet/packages/service/dfx/exceptions/api_exception.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/lnurlp_payment_dto.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/real_unit_swap_dto.dart'; @@ -52,7 +51,7 @@ class PayQuoteCubit extends Cubit { if (isClosed) return; if (!swap.isValid) { - emit(PayQuoteError(_invalidSwapMessage(swap))); + emit(_invalidSwapState(swap)); return; } @@ -76,15 +75,15 @@ class PayQuoteCubit extends Cubit { } } - /// User-facing copy for an invalid preview swap. `AmountTooLow` and a - /// missing/empty error mean holdings cannot cover the (API-rounded) whole - /// shares; any other non-empty API error is shown 1:1. - static String _invalidSwapMessage(SwapPaymentInfo swap) { + /// Typed error for an invalid preview swap. `AmountTooLow` and a missing/empty + /// error mean holdings cannot cover the (API-rounded) whole shares; any other + /// non-empty API error is shown 1:1 in the view. + static PayQuoteError _invalidSwapState(SwapPaymentInfo swap) { final error = swap.error; if (error == null || error.isEmpty || error == 'AmountTooLow') { - return S.current.payFailureInsufficientZchf; + return const PayQuoteError.insufficientHoldings(); } - return error; + return PayQuoteError(error); } /// The ZCHF amount listed for the Ethereum transfer method, or null if the diff --git a/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart b/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart index 8a62dc347..e987a5710 100644 --- a/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart +++ b/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart @@ -63,9 +63,14 @@ class PayQuoteUnavailable extends PayQuoteState { class PayQuoteError extends PayQuoteState { final String message; + final bool insufficientHoldings; - const PayQuoteError(this.message); + const PayQuoteError(this.message) : insufficientHoldings = false; + + const PayQuoteError.insufficientHoldings() + : message = '', + insufficientHoldings = true; @override - List get props => [message]; + List get props => [message, insufficientHoldings]; } diff --git a/lib/screens/pay/pay_quote_page.dart b/lib/screens/pay/pay_quote_page.dart index 721e5b208..2f1055193 100644 --- a/lib/screens/pay/pay_quote_page.dart +++ b/lib/screens/pay/pay_quote_page.dart @@ -44,8 +44,10 @@ class PayQuoteView extends StatelessWidget { PayQuoteReady() => _PayQuoteReadyView(state: state), PayQuoteExpired() => _PayQuoteMessage(message: S.of(context).payFailureQuoteExpired), PayQuoteUnavailable() => _PayQuoteMessage(message: S.of(context).payQuoteUnavailable), - PayQuoteError(:final message) => _PayQuoteMessage( - message: message.isNotEmpty ? message : S.of(context).payFailureGeneric, + PayQuoteError(:final message, :final insufficientHoldings) => _PayQuoteMessage( + message: insufficientHoldings + ? S.of(context).payFailureInsufficientZchf + : (message.isNotEmpty ? message : S.of(context).payFailureGeneric), onRetry: () => context.read().load(), ), }, diff --git a/test/screens/pay/pay_quote_cubit_test.dart b/test/screens/pay/pay_quote_cubit_test.dart index b21e613f1..e9d1dc9a9 100644 --- a/test/screens/pay/pay_quote_cubit_test.dart +++ b/test/screens/pay/pay_quote_cubit_test.dart @@ -161,15 +161,12 @@ void main() { act: (cubit) => cubit.load(), expect: () => [ isA(), - PayQuoteError(S.current.payFailureInsufficientZchf), + const PayQuoteError.insufficientHoldings(), ], verify: (cubit) { expect(cubit.state, isA()); expect(cubit.state, isNot(isA())); - expect( - (cubit.state as PayQuoteError).message, - S.current.payFailureInsufficientZchf, - ); + expect((cubit.state as PayQuoteError).insufficientHoldings, isTrue); }, ); diff --git a/test/screens/pay/pay_quote_page_test.dart b/test/screens/pay/pay_quote_page_test.dart index 52eca4731..1229cfc59 100644 --- a/test/screens/pay/pay_quote_page_test.dart +++ b/test/screens/pay/pay_quote_page_test.dart @@ -203,6 +203,14 @@ void main() { expect(find.text(S.current.payQuoteUnavailable), findsOne); }); + testWidgets('insufficient-holdings error shows the localized copy, not Pay', (tester) async { + when(() => quoteCubit.state).thenReturn(const PayQuoteError.insufficientHoldings()); + await tester.pumpApp(buildSubject()); + + expect(find.text(S.current.payFailureInsufficientZchf), findsOne); + expect(find.text(S.current.payConfirmButton), findsNothing); + }); + testWidgets('error state shows the API message 1:1', (tester) async { when(() => quoteCubit.state).thenReturn(const PayQuoteError('boom')); await tester.pumpApp(buildSubject()); From 47cda3ee504e5b3c0ee41a588d38be804aab5da9 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 13:16:49 +0200 Subject: [PATCH 05/23] docs(handbook): match pay slot labels to 293-295 After rebasing onto staging, bind-error overlays occupy 291-292. The pay rounding cards keep 293-295 in both mapping and visible permalinks. --- docs/handbook/de/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/handbook/de/index.html b/docs/handbook/de/index.html index 9b43746ff..169721a01 100644 --- a/docs/handbook/de/index.html +++ b/docs/handbook/de/index.html @@ -8451,7 +8451,7 @@

    81Bezahlen — ganze REALU

    - + screens/pay/goldens/macos/pay_info_page.png
    @@ -8470,7 +8470,7 @@

    81Bezahlen — ganze REALU

    - + screens/pay/goldens/macos/pay_quote_page_ready.png
    @@ -8490,7 +8490,7 @@

    81Bezahlen — ganze REALU

    - + screens/pay/goldens/macos/pay_quote_page_ready_with_merchant.png
    From 7b8d36f38a628824ca0827730dee29247817da2a Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 13:38:11 +0200 Subject: [PATCH 06/23] Drop unused i18n from the pay-quote cubit test The cubit emits typed errors; copy lives in the view. Document pay handbook slots 293-295 on PayInfoPage and PayQuotePage. --- docs/screens.md | 7 +++++-- test/screens/pay/pay_quote_cubit_test.dart | 5 +---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/screens.md b/docs/screens.md index bae827491..8dd255612 100644 --- a/docs/screens.md +++ b/docs/screens.md @@ -56,6 +56,8 @@ Column meaning: | Dashboard & trading | `SellBitboxPage` | `sellBitbox` | `/sellBitbox` | `126`, `127`, `128`, `129`, `130`, `131`, `132`, `133`, `134`, `135`, `136` | | Dashboard & trading | `SellBankAccountSelectionPage` | — | — | `121`, `122` | | Dashboard & trading | `ReceivePage` | `receive` | `/receive` | `101`, `102` | +| Dashboard & trading | `PayInfoPage` | `pay` | `/pay` | `293` | +| Dashboard & trading | `PayQuotePage` | — | — | `294`, `295` | | Dashboard & trading | `ConnectBitboxPage` | — | — | `137`, `138`, `139`, `140`, `141`, `142`, `143`, `144`, `145`, `146` | | Dashboard & trading | `BitboxAddressRecoveryPage` | `bitboxAddressRecovery` | `/bitboxAddressRecovery` | `147` | | Dashboard & trading | `WebViewPage` | `webView` | `/webView` | — | @@ -122,13 +124,14 @@ Column meaning: | Shared widgets | `PhoneNumberField` | — | — | `268` | | Shared widgets | `ReferralPayoutTransactionRow` | — | — | `282` | -81 screens — 47 routed (`GoRoute`) + 34 non-routed. The table also carries +83 screens — 48 routed (`GoRoute`) + 35 non-routed. The table also carries two shared-widget baselines (`PhoneNumberField`, `ReferralPayoutTransactionRow`), which are not screens. Referral surfaces have Golden baselines (`276`–`292`); the handbook documents the programme in `#spec-referral`. Overlay slots `291` and `292` are listed on `DashboardPage` (the host screen), not as a second shared-widget -row. +row. OpenCryptoPay pay rounding cards `293`–`295` are documented in +`#spec-81`. ## Notes diff --git a/test/screens/pay/pay_quote_cubit_test.dart b/test/screens/pay/pay_quote_cubit_test.dart index e9d1dc9a9..dc4206797 100644 --- a/test/screens/pay/pay_quote_cubit_test.dart +++ b/test/screens/pay/pay_quote_cubit_test.dart @@ -1,8 +1,6 @@ import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:realunit_wallet/generated/i18n.dart'; import 'package:realunit_wallet/packages/service/dfx/exceptions/api_exception.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/lnurlp_payment_dto.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/real_unit_swap_dto.dart'; @@ -63,9 +61,8 @@ SwapPaymentInfo _swap({ void main() { late _MockPayService payService; - setUpAll(() async { + setUpAll(() { registerFallbackValue(const RealUnitSwapDto.fromTargetAmount(1)); - await S.delegate.load(const Locale('de')); }); setUp(() { From fcb9836d8294e689d4d147ef96e87b46fadf0aea Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 14:01:07 +0200 Subject: [PATCH 07/23] Leave the pay quote after a completed REALU swap PayProcess now returns whether the swap ran. Success or retry-close pops the quote page so Pay cannot sell REALU twice. A pre-swap failure still returns to the quote with Pay enabled. --- lib/screens/pay/pay_process_page.dart | 8 ++++++-- lib/screens/pay/pay_quote_page.dart | 25 +++++++++++++++-------- test/screens/pay/pay_quote_page_test.dart | 10 ++++----- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/lib/screens/pay/pay_process_page.dart b/lib/screens/pay/pay_process_page.dart index fcd0338c5..c057b03e8 100644 --- a/lib/screens/pay/pay_process_page.dart +++ b/lib/screens/pay/pay_process_page.dart @@ -59,6 +59,7 @@ class PayProcessView extends StatelessWidget { icon: Icons.check_circle_rounded, title: S.of(context).paySuccess, description: S.of(context).paySuccessDescription, + swapCompleted: true, ); } else if (state is PayProcessPayRetry) { // The swap already succeeded — offer to retry the PAY leg only. The @@ -70,6 +71,7 @@ class PayProcessView extends StatelessWidget { icon: Icons.error_rounded, title: S.of(context).payFailureTitle, description: _failureMessage(context, state), + swapCompleted: false, ); } }, @@ -141,6 +143,7 @@ class PayProcessView extends StatelessWidget { required IconData icon, required String title, required String description, + required bool swapCompleted, }) async { await waitForIncomingRouteAnimation(context); if (!context.mounted) { @@ -175,7 +178,7 @@ class PayProcessView extends StatelessWidget { ), ), ); - if (context.mounted) Navigator.of(context).pop(); + if (context.mounted) Navigator.of(context).pop(swapCompleted); } /// Recovery sheet shown after a successful swap when the pay leg failed. The @@ -233,7 +236,8 @@ class PayProcessView extends StatelessWidget { await cubit.retryPay(); } else if (context.mounted) { // Closed: leave the flow. The swapped ZCHF stays safely in the wallet. - Navigator.of(context).pop(); + // true tells the quote page not to offer Pay again on the same quote. + Navigator.of(context).pop(true); } } } diff --git a/lib/screens/pay/pay_quote_page.dart b/lib/screens/pay/pay_quote_page.dart index 2f1055193..b96222cae 100644 --- a/lib/screens/pay/pay_quote_page.dart +++ b/lib/screens/pay/pay_quote_page.dart @@ -138,15 +138,24 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { ? null : () async { setState(() => _navigating = true); - await Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => PayProcessPage( - paymentLinkId: state.paymentLinkId, - zchfNeeded: state.zchfAmount, + bool? swapCompleted; + try { + swapCompleted = await Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => PayProcessPage( + paymentLinkId: state.paymentLinkId, + zchfNeeded: state.zchfAmount, + ), ), - ), - ); - if (mounted) setState(() => _navigating = false); + ); + } finally { + if (mounted && swapCompleted != true) { + setState(() => _navigating = false); + } + } + if (mounted && swapCompleted == true) { + Navigator.of(context).pop(); + } }, child: Text(S.of(context).payConfirmButton), ), diff --git a/test/screens/pay/pay_quote_page_test.dart b/test/screens/pay/pay_quote_page_test.dart index 1229cfc59..104506051 100644 --- a/test/screens/pay/pay_quote_page_test.dart +++ b/test/screens/pay/pay_quote_page_test.dart @@ -168,17 +168,17 @@ void main() { expect(find.byType(PayProcessView), findsOne); - // Debug wallet fails immediately and shows a result sheet. Pop the - // sheet, then the process route — the same two pops production does - // when the user taps Close. Avoid tap(): the sheet is taller than the - // default test surface, so Close is outside the hit box. + // Debug wallet fails before the swap and shows a result sheet. Pop the + // sheet; the process route then pops with swapCompleted=false so Pay + // re-enables. Avoid tap(): the sheet is taller than the default test + // surface, so Close is outside the hit box. await tester.pump(); await tester.pump(const Duration(milliseconds: 400)); final navigator = tester.state(find.byType(Navigator).first); navigator.pop(); await tester.pump(); await tester.pump(const Duration(milliseconds: 400)); - navigator.pop(); + navigator.pop(false); await tester.pump(); await tester.pump(const Duration(milliseconds: 400)); From 1cae5c13eae5ca63596d3dfa9e95d930701bb8db Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 15:21:29 +0200 Subject: [PATCH 08/23] Leave the pay quote unless the swap is known not to have run Pay re-enables only when the process route pops false (pre-swap failure). A completed swap, retry-close, or AppBar/system back leaves the quote so REALU cannot be sold twice. Failure sheets now read the cubit swapCompleted flag. --- .../cubits/pay_process/pay_process_cubit.dart | 2 + lib/screens/pay/pay_process_page.dart | 2 +- lib/screens/pay/pay_quote_page.dart | 10 +- .../screens/pay/pay_process_golden_test.dart | 1 + test/screens/pay/pay_process_page_test.dart | 106 ++++++++++++++++++ test/screens/pay/pay_quote_page_test.dart | 13 +++ 6 files changed, 130 insertions(+), 4 deletions(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index 763711c8f..790379a80 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -55,6 +55,8 @@ class PayProcessCubit extends Cubit { /// retried on its own via [retryPay]. bool _swapCompleted = false; + bool get swapCompleted => _swapCompleted; + /// Guards overlapping ETH-poll ticks from each calling [_executeSwap]. Set /// synchronously before the first await in a tick; released in `finally` on /// every path out of a tick (success, max-attempts, isClosed, transient diff --git a/lib/screens/pay/pay_process_page.dart b/lib/screens/pay/pay_process_page.dart index c057b03e8..faa4fbde6 100644 --- a/lib/screens/pay/pay_process_page.dart +++ b/lib/screens/pay/pay_process_page.dart @@ -71,7 +71,7 @@ class PayProcessView extends StatelessWidget { icon: Icons.error_rounded, title: S.of(context).payFailureTitle, description: _failureMessage(context, state), - swapCompleted: false, + swapCompleted: context.read().swapCompleted, ); } }, diff --git a/lib/screens/pay/pay_quote_page.dart b/lib/screens/pay/pay_quote_page.dart index b96222cae..309118d7e 100644 --- a/lib/screens/pay/pay_quote_page.dart +++ b/lib/screens/pay/pay_quote_page.dart @@ -137,8 +137,9 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { onPressed: _navigating ? null : () async { + if (_navigating) return; setState(() => _navigating = true); - bool? swapCompleted; + bool? swapCompleted = false; try { swapCompleted = await Navigator.of(context).push( MaterialPageRoute( @@ -149,11 +150,14 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { ), ); } finally { - if (mounted && swapCompleted != true) { + // Only a typed pre-swap failure pops `false` and re-enables + // Pay. `true` (swap ran) and `null` (AppBar / system back) + // both leave this quote so REALU cannot be sold twice. + if (mounted && swapCompleted == false) { setState(() => _navigating = false); } } - if (mounted && swapCompleted == true) { + if (mounted && swapCompleted != false) { Navigator.of(context).pop(); } }, diff --git a/test/goldens/screens/pay/pay_process_golden_test.dart b/test/goldens/screens/pay/pay_process_golden_test.dart index 80f8d4f30..02bb41a2f 100644 --- a/test/goldens/screens/pay/pay_process_golden_test.dart +++ b/test/goldens/screens/pay/pay_process_golden_test.dart @@ -15,6 +15,7 @@ void main() { setUp(() { processCubit = _MockPayProcessCubit(); when(() => processCubit.state).thenReturn(const PayProcessInitial()); + when(() => processCubit.swapCompleted).thenReturn(false); }); // PayProcessPage resolves its cubit from getIt and calls start(); the golden diff --git a/test/screens/pay/pay_process_page_test.dart b/test/screens/pay/pay_process_page_test.dart index 2882fcfe0..26bd21e61 100644 --- a/test/screens/pay/pay_process_page_test.dart +++ b/test/screens/pay/pay_process_page_test.dart @@ -66,6 +66,7 @@ void main() { processCubit = _MockPayProcessCubit(); when(() => processCubit.state).thenReturn(const PayProcessInitial()); when(() => processCubit.retryPay()).thenAnswer((_) async {}); + when(() => processCubit.swapCompleted).thenReturn(false); }); Widget buildSubject() => BlocProvider.value( @@ -220,6 +221,63 @@ void main() { await tester.pump(const Duration(milliseconds: 400)); } + /// Pushes [PayProcessView] onto a navigator so the `push` result can + /// be captured. Phone-sized surface matches [pumpWithState] so result sheets + /// fit the hit box. + Future pumpPushedView( + WidgetTester tester, { + required void Function(bool? result) onPopped, + }) async { + tester.view.physicalSize = const Size(1200, 2400); + tester.view.devicePixelRatio = 1.0; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + + await tester.pumpApp( + Builder( + builder: (context) => Scaffold( + body: Center( + child: TextButton( + onPressed: () async { + final result = await Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => BlocProvider.value( + value: processCubit, + child: const PayProcessView(), + ), + ), + ); + onPopped(result); + }, + child: const Text('go'), + ), + ), + ), + ), + ); + + await tester.tap(find.text('go')); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + } + + Future pumpPushedWithState( + WidgetTester tester, + PayProcessState terminal, { + required void Function(bool? result) onPopped, + }) async { + whenListen( + processCubit, + Stream.fromIterable([terminal]), + initialState: const PayProcessSwapping(), + ); + await pumpPushedView(tester, onPopped: onPopped); + // Incoming route animation + sheet open (same extra pumps as the + // TimedMaterialPageRoute page test). + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + } + group('$PayProcessView result sheet', () { testWidgets('success emits a success sheet with title + description', (tester) async { await pumpWithState(tester, const PayProcessSuccess()); @@ -352,4 +410,52 @@ void main() { expect(find.text(S.current.payRetryTransient), findsNothing); }); }); + + group('$PayProcessView swapCompleted pop', () { + testWidgets('failure sheet after a completed swap pops the process route with true', ( + tester, + ) async { + when(() => processCubit.swapCompleted).thenReturn(true); + + bool? popped; + await pumpPushedWithState( + tester, + const PayProcessFailure(PayProcessFailureReason.generic), + onPopped: (result) => popped = result, + ); + + expect(find.text(S.current.close), findsOne); + // pumpPushedWithState nests an extra navigator; Close lands off-screen. + final navigator = tester.state(find.byType(Navigator).first); + navigator.pop(); // dismiss the sheet + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + expect(find.byType(PayProcessView), findsNothing); + expect(popped, isTrue); + }); + + testWidgets('failure sheet before a swap pops the process route with false', (tester) async { + bool? popped; + await pumpPushedWithState( + tester, + const PayProcessFailure(PayProcessFailureReason.generic), + onPopped: (result) => popped = result, + ); + + expect(find.text(S.current.close), findsOne); + // pumpPushedWithState nests an extra navigator; Close lands off-screen. + final navigator = tester.state(find.byType(Navigator).first); + navigator.pop(); // dismiss the sheet + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + expect(find.byType(PayProcessView), findsNothing); + expect(popped, isFalse); + }); + }); } diff --git a/test/screens/pay/pay_quote_page_test.dart b/test/screens/pay/pay_quote_page_test.dart index 104506051..14a2c7c9f 100644 --- a/test/screens/pay/pay_quote_page_test.dart +++ b/test/screens/pay/pay_quote_page_test.dart @@ -158,6 +158,19 @@ void main() { expect(find.byType(PayProcessView), findsOne); }); + testWidgets('double-tap on Pay does not push two process routes', (tester) async { + when(() => quoteCubit.state).thenReturn(ready); + await tester.pumpApp(buildSubject()); + + await tester.tap(find.text(S.current.payConfirmButton)); + await tester.tap(find.text(S.current.payConfirmButton), warnIfMissed: false); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + // Offstage: a second pushed route would hide the first; count both. + expect(find.byType(PayProcessView, skipOffstage: false), findsOne); + }); + testWidgets('Pay re-enables after the process route pops', (tester) async { when(() => quoteCubit.state).thenReturn(ready); await tester.pumpApp(buildSubject()); From 8bc08c4394a666dfc06f43f8ee94857b6a85ceb8 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 16:29:29 +0200 Subject: [PATCH 09/23] Treat a signed swap as completed before the broadcast round-trip A timeout or dropped 2xx can still have sent the REALU sale. Marking swapCompleted before broadcastSwapTransaction keeps Pay from running twice if the HTTP call then fails. --- .../cubits/pay_process/pay_process_cubit.dart | 8 ++++---- test/screens/pay/pay_process_cubit_test.dart | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index 790379a80..6fac9184e 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -261,12 +261,12 @@ class PayProcessCubit extends Cubit { if (isClosed) return; final signed = await _signTransaction(unsigned.swap); if (isClosed) return; - await _payService.broadcastSwapTransaction(swap.id, signed); - if (isClosed) return; - // The swap is now irreversible — the user holds ZCHF. From here every - // recovery path retries the PAY leg only; the swap is never redone. + // Mark completed before the HTTP round-trip. A timeout or dropped 2xx + // can still have broadcast the tx; the quote must not re-enable Pay. _swapCompleted = true; _acquiredZchf = swap.estimatedAmount; + await _payService.broadcastSwapTransaction(swap.id, signed); + if (isClosed) return; await _refreshQuoteAndPay(); } on PaySignatureUnsupportedException { if (isClosed) return; diff --git a/test/screens/pay/pay_process_cubit_test.dart b/test/screens/pay/pay_process_cubit_test.dart index cfcb40dbd..ad212b156 100644 --- a/test/screens/pay/pay_process_cubit_test.dart +++ b/test/screens/pay/pay_process_cubit_test.dart @@ -984,6 +984,22 @@ void main() { await cubit.close(); }); + test('broadcast throw after sign still marks swapCompleted so Pay cannot re-run', () async { + wireHappyPath(); + when( + () => payService.broadcastSwapTransaction(any(), any()), + ).thenThrow(Exception('timeout')); + + final cubit = build(); + final failed = cubit.stream.firstWhere((s) => s is PayProcessFailure); + await cubit.start(); + final state = await failed as PayProcessFailure; + + expect(state.reason, PayProcessFailureReason.generic); + expect(cubit.swapCompleted, isTrue); + await cubit.close(); + }); + test('transient quote re-fetch failure after swap → retry (not re-scan)', () async { wireHappyPath(); when(() => payService.getPaymentDetails('pl_abc')).thenThrow(Exception('lnurlp 500')); From 9a383d45022f8a79e2021a35669531f640772e20 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 16:58:37 +0200 Subject: [PATCH 10/23] Show invalid swap-quote API errors 1:1 instead of as missing holdings AmountTooLow is the API volume signal. Mapping it onto insufficient holdings re-interpreted a backend string. Invalid quotes stay unpayable. --- .../pay/cubits/pay_quote/pay_quote_cubit.dart | 12 ++++++------ test/screens/pay/pay_quote_cubit_test.dart | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart b/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart index 42405f396..d056b89c0 100644 --- a/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart +++ b/lib/screens/pay/cubits/pay_quote/pay_quote_cubit.dart @@ -75,15 +75,15 @@ class PayQuoteCubit extends Cubit { } } - /// Typed error for an invalid preview swap. `AmountTooLow` and a missing/empty - /// error mean holdings cannot cover the (API-rounded) whole shares; any other - /// non-empty API error is shown 1:1 in the view. + /// Invalid preview swaps are not payable. Non-empty API errors are shown 1:1; + /// a missing/empty error uses the view's generic copy. The app does not map + /// `AmountTooLow` onto holdings — that string is the API's volume signal. static PayQuoteError _invalidSwapState(SwapPaymentInfo swap) { final error = swap.error; - if (error == null || error.isEmpty || error == 'AmountTooLow') { - return const PayQuoteError.insufficientHoldings(); + if (error != null && error.isNotEmpty) { + return PayQuoteError(error); } - return PayQuoteError(error); + return const PayQuoteError(''); } /// The ZCHF amount listed for the Ethereum transfer method, or null if the diff --git a/test/screens/pay/pay_quote_cubit_test.dart b/test/screens/pay/pay_quote_cubit_test.dart index dc4206797..e6567726a 100644 --- a/test/screens/pay/pay_quote_cubit_test.dart +++ b/test/screens/pay/pay_quote_cubit_test.dart @@ -158,12 +158,13 @@ void main() { act: (cubit) => cubit.load(), expect: () => [ isA(), - const PayQuoteError.insufficientHoldings(), + const PayQuoteError('AmountTooLow'), ], verify: (cubit) { expect(cubit.state, isA()); expect(cubit.state, isNot(isA())); - expect((cubit.state as PayQuoteError).insufficientHoldings, isTrue); + expect((cubit.state as PayQuoteError).insufficientHoldings, isFalse); + expect((cubit.state as PayQuoteError).message, 'AmountTooLow'); }, ); From 900877e717b525326da80f181cd2c2375af91ecc Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:16:10 +0200 Subject: [PATCH 11/23] Retry the pay leg when swap broadcast fails after the tx is signed Once swapCompleted is set, a broadcast timeout is recovery, not a re-scan. The retry sheet can close the quote without offering Pay again. --- lib/screens/pay/cubits/pay_process/pay_process_cubit.dart | 4 ++++ test/screens/pay/pay_process_cubit_test.dart | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index 6fac9184e..db6126db0 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -276,6 +276,10 @@ class PayProcessCubit extends Cubit { emit(const PayProcessFailure(PayProcessFailureReason.bitboxRequired)); } catch (e) { if (isClosed) return; + if (_swapCompleted) { + emit(PayProcessPayRetry(PayRetryReason.transient, message: ApiException.userFacingMessage(e))); + return; + } emit(PayProcessFailure(PayProcessFailureReason.generic, message: ApiException.userFacingMessage(e))); } } diff --git a/test/screens/pay/pay_process_cubit_test.dart b/test/screens/pay/pay_process_cubit_test.dart index ad212b156..41ae96185 100644 --- a/test/screens/pay/pay_process_cubit_test.dart +++ b/test/screens/pay/pay_process_cubit_test.dart @@ -984,18 +984,18 @@ void main() { await cubit.close(); }); - test('broadcast throw after sign still marks swapCompleted so Pay cannot re-run', () async { + test('broadcast throw after sign is a pay-only retry, not a re-scan', () async { wireHappyPath(); when( () => payService.broadcastSwapTransaction(any(), any()), ).thenThrow(Exception('timeout')); final cubit = build(); - final failed = cubit.stream.firstWhere((s) => s is PayProcessFailure); + final retry = cubit.stream.firstWhere((s) => s is PayProcessPayRetry); await cubit.start(); - final state = await failed as PayProcessFailure; + final state = await retry as PayProcessPayRetry; - expect(state.reason, PayProcessFailureReason.generic); + expect(state.reason, PayRetryReason.transient); expect(cubit.swapCompleted, isTrue); await cubit.close(); }); From 6ebf0ebe45dc92af468756e62cc833aa086ff270 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:29:56 +0200 Subject: [PATCH 12/23] Drop the unused insufficient-holdings pay-quote error variant Invalid swaps already surface the API error 1:1. The named constructor and view branch had no production caller. --- .../pay/cubits/pay_process/pay_process_cubit.dart | 6 +++--- lib/screens/pay/cubits/pay_quote/pay_quote_state.dart | 9 ++------- lib/screens/pay/pay_quote_page.dart | 6 ++---- test/screens/pay/pay_quote_cubit_test.dart | 1 - test/screens/pay/pay_quote_page_test.dart | 9 +-------- 5 files changed, 8 insertions(+), 23 deletions(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index db6126db0..b9f797171 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -50,9 +50,9 @@ class PayProcessCubit extends Cubit { SwapPaymentInfo? _swap; - /// Set once the REALU→ZCHF swap has been broadcast successfully. From this - /// point the user holds ZCHF and recovery must NEVER re-swap — the pay leg is - /// retried on its own via [retryPay]. + /// Set after the swap is signed, before broadcast. A timeout can still have + /// sent the tx; recovery must NEVER re-swap — the pay leg is retried via + /// [retryPay]. bool _swapCompleted = false; bool get swapCompleted => _swapCompleted; diff --git a/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart b/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart index e987a5710..8a62dc347 100644 --- a/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart +++ b/lib/screens/pay/cubits/pay_quote/pay_quote_state.dart @@ -63,14 +63,9 @@ class PayQuoteUnavailable extends PayQuoteState { class PayQuoteError extends PayQuoteState { final String message; - final bool insufficientHoldings; - const PayQuoteError(this.message) : insufficientHoldings = false; - - const PayQuoteError.insufficientHoldings() - : message = '', - insufficientHoldings = true; + const PayQuoteError(this.message); @override - List get props => [message, insufficientHoldings]; + List get props => [message]; } diff --git a/lib/screens/pay/pay_quote_page.dart b/lib/screens/pay/pay_quote_page.dart index 309118d7e..665dc4bc6 100644 --- a/lib/screens/pay/pay_quote_page.dart +++ b/lib/screens/pay/pay_quote_page.dart @@ -44,10 +44,8 @@ class PayQuoteView extends StatelessWidget { PayQuoteReady() => _PayQuoteReadyView(state: state), PayQuoteExpired() => _PayQuoteMessage(message: S.of(context).payFailureQuoteExpired), PayQuoteUnavailable() => _PayQuoteMessage(message: S.of(context).payQuoteUnavailable), - PayQuoteError(:final message, :final insufficientHoldings) => _PayQuoteMessage( - message: insufficientHoldings - ? S.of(context).payFailureInsufficientZchf - : (message.isNotEmpty ? message : S.of(context).payFailureGeneric), + PayQuoteError(:final message) => _PayQuoteMessage( + message: message.isNotEmpty ? message : S.of(context).payFailureGeneric, onRetry: () => context.read().load(), ), }, diff --git a/test/screens/pay/pay_quote_cubit_test.dart b/test/screens/pay/pay_quote_cubit_test.dart index e6567726a..2df72fbd7 100644 --- a/test/screens/pay/pay_quote_cubit_test.dart +++ b/test/screens/pay/pay_quote_cubit_test.dart @@ -163,7 +163,6 @@ void main() { verify: (cubit) { expect(cubit.state, isA()); expect(cubit.state, isNot(isA())); - expect((cubit.state as PayQuoteError).insufficientHoldings, isFalse); expect((cubit.state as PayQuoteError).message, 'AmountTooLow'); }, ); diff --git a/test/screens/pay/pay_quote_page_test.dart b/test/screens/pay/pay_quote_page_test.dart index 14a2c7c9f..26e422295 100644 --- a/test/screens/pay/pay_quote_page_test.dart +++ b/test/screens/pay/pay_quote_page_test.dart @@ -216,14 +216,6 @@ void main() { expect(find.text(S.current.payQuoteUnavailable), findsOne); }); - testWidgets('insufficient-holdings error shows the localized copy, not Pay', (tester) async { - when(() => quoteCubit.state).thenReturn(const PayQuoteError.insufficientHoldings()); - await tester.pumpApp(buildSubject()); - - expect(find.text(S.current.payFailureInsufficientZchf), findsOne); - expect(find.text(S.current.payConfirmButton), findsNothing); - }); - testWidgets('error state shows the API message 1:1', (tester) async { when(() => quoteCubit.state).thenReturn(const PayQuoteError('boom')); await tester.pumpApp(buildSubject()); @@ -238,6 +230,7 @@ void main() { await tester.pumpApp(buildSubject()); expect(find.text(S.current.payFailureGeneric), findsOne); + expect(find.text(S.current.payConfirmButton), findsNothing); }); testWidgets('error state retry button re-invokes load()', (tester) async { From 582b932876e67deb82d838cc10be52c5ec3d1be4 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Tue, 15 Sep 2026 18:08:53 +0200 Subject: [PATCH 13/23] Surface invalid process-swap API errors 1:1 instead of as missing REALU The process cubit used to map every !isValid quote to insufficientZchf. The API error string is now the failure message; Pay still does not run. --- .../pay/cubits/pay_process/pay_process_cubit.dart | 8 +++++++- test/screens/pay/pay_process_cubit_test.dart | 11 ++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index b9f797171..684b06409 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -175,7 +175,13 @@ class PayProcessCubit extends Cubit { // The API is the authority on whether the swap is fundable; render its // signal rather than recomputing limits locally. if (!swap.isValid) { - emit(const PayProcessFailure(PayProcessFailureReason.insufficientZchf)); + final error = swap.error; + emit( + PayProcessFailure( + PayProcessFailureReason.generic, + message: (error != null && error.isNotEmpty) ? error : null, + ), + ); return; } diff --git a/test/screens/pay/pay_process_cubit_test.dart b/test/screens/pay/pay_process_cubit_test.dart index 41ae96185..6d739692c 100644 --- a/test/screens/pay/pay_process_cubit_test.dart +++ b/test/screens/pay/pay_process_cubit_test.dart @@ -57,6 +57,7 @@ SwapPaymentInfo _swap({ double ethBalance = 1.0, double requiredGasEth = 0.001, bool isValid = true, + String? error, }) { return SwapPaymentInfo.fromDto( RealUnitSwapPaymentInfoDto( @@ -74,6 +75,7 @@ SwapPaymentInfo _swap({ ethBalance: ethBalance, requiredGasEth: requiredGasEth, isValid: isValid, + error: error, ), ); } @@ -313,14 +315,17 @@ void main() { await cubit.close(); }); - test('invalid swap quote → insufficientZchf', () async { - when(() => payService.getSwapPaymentInfo(any())).thenAnswer((_) async => _swap(isValid: false)); + test('invalid swap quote surfaces the API error 1:1', () async { + when(() => payService.getSwapPaymentInfo(any())).thenAnswer( + (_) async => _swap(isValid: false, error: 'AmountTooLow'), + ); final cubit = build(); await cubit.start(); final state = cubit.state as PayProcessFailure; - expect(state.reason, PayProcessFailureReason.insufficientZchf); + expect(state.reason, PayProcessFailureReason.generic); + expect(state.message, 'AmountTooLow'); await cubit.close(); }); From 59ae1661c12722d14f215281ad7c70a7d0bf51bc Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Wed, 16 Sep 2026 10:19:43 +0200 Subject: [PATCH 14/23] Say leftover ZCHF from OpenCryptoPay pay is kept by DFX The wallet is REALU-only. Rounding leftover is swept to DFX with the pay transfer, not left on the user address. Retry copy is unchanged because ZCHF still sits in the wallet until pay succeeds. --- assets/languages/strings_de.arb | 4 ++-- assets/languages/strings_en.arb | 4 ++-- docs/handbook/de/index.html | 6 +++--- lib/screens/pay/cubits/pay_process/pay_process_cubit.dart | 3 ++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/assets/languages/strings_de.arb b/assets/languages/strings_de.arb index 1b424ab31..6f49fa41c 100644 --- a/assets/languages/strings_de.arb +++ b/assets/languages/strings_de.arb @@ -186,7 +186,7 @@ "payFailureQuoteExpired": "Das Zahlungsangebot ist abgelaufen. Bitte scannen Sie den Code erneut.", "payFailureSignatureUnsupported": "Diese Wallet kann keine Transaktionen signieren. Wechseln Sie zu einer Software- oder BitBox-Wallet.", "payFailureTitle": "Zahlung fehlgeschlagen", - "payInfoBody": "Die Bezahlfunktion kann an allen OpenCryptoPay-Standorten genutzt werden.\n\nDer Tausch erfolgt in zwei Schritten. Zuerst wird REALU in ZCHF getauscht. ZCHF ist ein CHF-Stablecoin, der anschliessend an den Zahlungsempfänger übertragen wird.\n\nREALU ist ein Wertpapier und wird nicht für die Bezahlung selbst verwendet.\n\nBei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es keine halben REALU gibt. Ein allfälliger ZCHF-Rest bleibt in Ihrer Wallet.", + "payInfoBody": "Die Bezahlfunktion kann an allen OpenCryptoPay-Standorten genutzt werden.\n\nDer Tausch erfolgt in zwei Schritten. Zuerst wird REALU in ZCHF getauscht. ZCHF ist ein CHF-Stablecoin, der anschliessend an den Zahlungsempfänger übertragen wird.\n\nREALU ist ein Wertpapier und wird nicht für die Bezahlung selbst verwendet.\n\nBei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es keine halben REALU gibt. Restliches ZCHF behält DFX.", "payInfoTitle": "Bevor Sie bezahlen", "paymentInformationFailed": "Beim Abrufen der Zahlungsinformationen ist ein Fehler aufgetreten.", "paymentInformationFailedDescription": "Bitte versuchen Sie es später erneut. Wenn der Fehler weiterhin besteht, wenden Sie sich an unseren Support.", @@ -199,7 +199,7 @@ "payQuoteRealuEstimated": "Erwarteter Erlös", "payQuoteRealuFees": "Gebühren", "payQuoteRequested": "Geforderter Betrag", - "payQuoteRoundingNotice": "Bei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es keine halben REALU gibt. Restliches ZCHF bleibt in Ihrer Wallet.", + "payQuoteRoundingNotice": "Bei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es keine halben REALU gibt. Restliches ZCHF behält DFX.", "payQuoteSummary": "Sie bezahlen ${amount} ${asset}", "payQuoteTitle": "Zahlung bestätigen", "payQuoteUnavailable": "Für diesen Zahlungscode ist keine ZCHF-Zahlung verfügbar.", diff --git a/assets/languages/strings_en.arb b/assets/languages/strings_en.arb index 7bae4ea47..00e4b7eb8 100644 --- a/assets/languages/strings_en.arb +++ b/assets/languages/strings_en.arb @@ -186,7 +186,7 @@ "payFailureQuoteExpired": "The payment quote expired. Please scan the code again.", "payFailureSignatureUnsupported": "This wallet cannot sign transactions. Switch to a software or BitBox wallet.", "payFailureTitle": "Payment failed", - "payInfoBody": "You can use the payment function at all OpenCryptoPay locations.\n\nThe exchange happens in two steps. First, REALU is swapped for ZCHF. ZCHF is a Swiss franc stablecoin, which is then transferred to the payment recipient.\n\nREALU is a security and is not used for the payment itself.\n\nEvery payment is rounded up to whole REALU shares, because there are no fractional REALU. Any leftover ZCHF stays in your wallet.", + "payInfoBody": "You can use the payment function at all OpenCryptoPay locations.\n\nThe exchange happens in two steps. First, REALU is swapped for ZCHF. ZCHF is a Swiss franc stablecoin, which is then transferred to the payment recipient.\n\nREALU is a security and is not used for the payment itself.\n\nEvery payment is rounded up to whole REALU shares, because there are no fractional REALU. Leftover ZCHF is kept by DFX.", "payInfoTitle": "Before you pay", "paymentInformationFailed": "An error occurred while getting the payment information.", "paymentInformationFailedDescription": "Please try again later. If the error persists, contact our support team.", @@ -199,7 +199,7 @@ "payQuoteRealuEstimated": "Estimated proceeds", "payQuoteRealuFees": "Fees", "payQuoteRequested": "Requested amount", - "payQuoteRoundingNotice": "Every payment is rounded up to whole REALU shares, because there are no fractional REALU. Leftover ZCHF stays in your wallet.", + "payQuoteRoundingNotice": "Every payment is rounded up to whole REALU shares, because there are no fractional REALU. Leftover ZCHF is kept by DFX.", "payQuoteSummary": "You pay ${amount} ${asset}", "payQuoteTitle": "Confirm payment", "payQuoteUnavailable": "No ZCHF payment is available for this payment code.", diff --git a/docs/handbook/de/index.html b/docs/handbook/de/index.html index 169721a01..e07a21f31 100644 --- a/docs/handbook/de/index.html +++ b/docs/handbook/de/index.html @@ -8443,7 +8443,7 @@

    81Bezahlen — ganze REALU

    OpenCryptoPay-Zahlungen verkaufen immer ganze REALU-Anteile — halbe Anteile gibt es nicht. Die Bestätigungsseite («Zahlung bestätigen») - sagt das ausdrücklich. Ein allfälliger ZCHF-Rest bleibt in der Wallet. + sagt das ausdrücklich. Ein allfälliger ZCHF-Rest geht an DFX. Die Zahlungs-API rundet den Tausch auf ganze Anteile auf; die App rechnet die Stückzahl nicht selbst.

    @@ -8464,7 +8464,7 @@

    81Bezahlen — ganze REALU

    Intro-Seite Bevor Sie bezahlen mit dem zusätzlichen Absatz: bei jeder Zahlung wird auf ganze REALU-Anteile aufgerundet, weil es - keine halben REALU gibt; ein allfälliger ZCHF-Rest bleibt in der Wallet. + keine halben REALU gibt; ein allfälliger ZCHF-Rest geht an DFX. Golden-Quelle: pay_info_page.png.
    @@ -8483,7 +8483,7 @@

    81Bezahlen — ganze REALU

    Bestätigungsseite mit Betrag, benötigten ZCHF und dem sichtbaren Hinweis, dass jede Zahlung auf ganze REALU-Anteile aufgerundet wird. - Restliches ZCHF bleibt in der Wallet. Button Bezahlen bleibt + Restliches ZCHF behält DFX. Button Bezahlen bleibt die sticky CTA. Golden-Quelle: pay_quote_page_ready.png.
    diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index 684b06409..f8d33151d 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -110,7 +110,8 @@ class PayProcessCubit extends Cubit { /// the common case (a few minutes of drift + the OCP/swap fees), so any /// adverse move stranded the user in ZCHF that could not cover settlement. /// 3% is a pragmatic headroom that absorbs ordinary drift while keeping the - /// over-swap small (leftover ZCHF simply stays in the wallet); a larger move + /// over-swap small (leftover from the 3% swap buffer is swept to DFX on the + /// pay transfer, not left on the user address); a larger move /// is caught explicitly and surfaced as a retryable /// [PayRetryReason.insufficientZchf] rather than a server-side failure. static const _slippageBuffer = 1.03; From dfac8c54c12a3b2a92526335c5712373ffbc8875 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 10:21:24 +0200 Subject: [PATCH 15/23] test(goldens): regenerate baselines on the self-hosted runner --- .../pay/goldens/macos/pay_info_page.png | Bin 50830 -> 49829 bytes .../goldens/macos/pay_quote_page_ready.png | Bin 33464 -> 33424 bytes .../pay_quote_page_ready_with_merchant.png | Bin 49262 -> 49229 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/goldens/screens/pay/goldens/macos/pay_info_page.png b/test/goldens/screens/pay/goldens/macos/pay_info_page.png index 6b28de1512479a285ac9c09cfae179c88a97bb64..9fe11497c00c62749c2a4d1adb3d652de419ff83 100644 GIT binary patch delta 12488 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 ll$38y1>=nyo;56{1Gp{s#(y$NvBT delta 13515 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

    Azjy@u!2^GN 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 diff --git a/test/goldens/screens/pay/goldens/macos/pay_quote_page_ready.png b/test/goldens/screens/pay/goldens/macos/pay_quote_page_ready.png index 18b0fa566fc0b8e252b18080f78228b5c6cf14f6..ad005122a7731bc890b0204e42f9ee5459a5a9eb 100644 GIT binary patch delta 14896 zcma*OWmHvP)GvGx1!e>JJ{c@XCFpy)^hdhtD5jm2@heU@V|HnUx-njnHtk*RuF zVJ}9CJw~VR9lqvggFT#}dP8EAryKQ^+7&mqY9t=x+G=rLp0kB9g+FE{Cj5Tu3$pk3 z@arngP$87Y=bi1bD|Q6vq}ji0>n*&oFbjQVv`X|sp5Y4%$^Izco!<(BihghI%GX-; z9*Feaz&YcPZFzBXuIm%HC|R)zuvspEzBz@=yQUA6BTv6 zRduaozKY?26f-S%6?>BAaar4jI5ssd%=xSyuV}kt??-7&h4|NRk5vDY`u9(N0F|i^ zm+t1rC_VifIHELSA~93P>b?A@H(Ci4sdA8imY42r8H$U~2j`OszYNdI@gD^4*Nt=g z{U7jX{_AWUbs@oSpVGCkAhfnGvXYzXl}B)7%jGO=Z^L|k53Br{>iu=+86Yco_28^8 z?k5I*>y|ZBUmuCx**DnVG+BP1@ha}^&}rJ6w+*+eQ|C4l%;(z?FCXs=Jwm7yHf?f1 zjSH1XhK#^c*Lo_a(D;Yt8o_6GM^@t#6ASftf+FTx6d_d8cveh>yU zVhc6Kut0D7N0(atqVdLsAFV{F{^>M?UTnCPsd-2tig3Q{%Ais`c$;IvNLQ_ehQ~!* zxmTLsC*&YO|y9V#Jh#0CTBfDW6N%PcpxKk@yw`wtsrsY@E#abaxyI?_N3g z=#}KZI4*Vmb}M4ium$NFvJ$}NdnQU@UiX!95ui-B2VI>IE3kYf5hCjLR13g~=ai}} zf8bSGiZAHCr@g^mP6<>sdM5051YW&P zX!WoJ))>8iw!`Z;Z+#>)*ks($!^9CEJUu-V;pAjfP1ENiuh(W9{Xkha@ z4f`wV4Rx1~{r^NQJ)hEZ#JTn_Emt#ib}_uWN>a&cX`nSuDagBXM?^(NEg{buCB8a( z!q@a=WOP!GYv-<+`NppI6cqL4-{^SUxh<~}t0&N1itx|gxPQQ}sBtlI;N2E-EfC(? za_`}|z8cnz%h2Wu{3+YMCY0BL1?{=REy6qEZm!}YR1gsrwLRPJk*e9IiL0wn#uq}m z;jb$M&l`)z7x|A};S-LLk5(4tgV$aWV2ac2yU#9@q^0~ z+;VOlSP(T2%q}Z5+H-UhvUgsK(4Al0_Q$(BQ7xT2T4+pqSKBjcCFF0`Me4kk;nTcD zNY62=Re~Lu91Bm^41&l)1vgq(LEj4E!vI1lE({p5R% zmk;X%X5y-l!DkCwkdH95w3cu!Qg_tFOu|>EE5(WU;IMyWQoe-+d-iK6b`~!8}>B9s{%J9hOpW0ATb7eQzLPTYBCEF_|=XVNK?sLKZ;3j$}CO(sp)ozEEwu|T+8n$Iwa(f8khWp8mF_36notoyW zkYXdJXA)SS*O5Cqa(f@zmLJ#X6m}HG|FOPwr=aH`JKmlo4V@Jtb##=3{aq6(X!#M2 z%4+{!Ho|3Z?P3D2|^u|?hrULaf{hJozJ5L!?D-O+-;A9*$y$LJ6 z`HkHG^$5#^3-eIkkQ<5q)S@ba9S?q1dp+6D6dZD~vRWea4cZN)6V*QJL_<&U#c|&k z?k4s!EoDFqm4An49-T?o+N4)HZh0;f5-oMP45PphoZCK#QheJ(%%>i#xD}Ew(avyM zjt@lV*Y)sVRlmZ5z&^LGRQ(6@O3XiSa?x8Q(HDq}R-G?DgZ{FI_K2M^dBeP-w$A2{ ztGV6x3mYYq-A-=ySTA;)){z1q)pRd>+RhtgRiXJk*`D@)4sKzQaXxEQ^~4MMP28Sz zXps30{>u!)_4&2nBBsQi+dkxd*}E?3Xi4>XiKmH%4#-qlU4A>SJSs7rpx}0-B6p;C z2&+3eU~_h@nh$Qn`rMFJ@WoD$4rR-ULd-FwxZB!#j)kAaE~w0-?xw3hmY429xZj^} zDE8OSQ^6z>&LU#EATqsax)-5_{oabrPH0Yt9d@B)cf3+sv zfrqH1xpe18JK15X*S+DIpndn4@08LHl2ra#>*~-{X7hC4YAx79qED|k(_>)k#Q8SA zFja|ue{f6ofdiwg-BnE7DJ2iQQ*;pYMG@;1>eXJVP_NV3%5Pn2Sx9X|7z{oOOOy#c z#N_Df&=OTJjV`iNFLuNWNox3Evh>3G?wHkI>SNPbqj}_Pe=l>%cwzSNhP(!(gOV?U z1?%j4+xlwm2IZ9mI->?R7UhjcvHc3sf0;%w*hmyv-Q5a(=NC5qyD=UTXH~Ae8OQgr z#@a^!*==~3FdDBLu$ClFJBG2o#{LkI4)>Fx<#|gUNYwW|xHlMS#6rU2VE$0YW0&T~ z+2i)f{404mr5Em}W76{LPbV=TS>{-jsG4WVcU8DwR#syqbc9(0B>(*w!<3Sgmvc5u z`p}j!UU$XvYq*rnJ;D(St%V( zM@nrC){y_bkS{D>7}XwPnW`Q?3aDr`Hz+69-VuU|ZLFgGq~$c3QW^(~I|X9Qlx zRKI=Z-wT09o(JuE0HJBjf7eQJ?&_vDb{kR7WSF6V!i>koU%OAmf3`00vAd^jv|b`# zhjXU(p@BJ4xcQGy>3*jNzH~!N+?TXr(t$=N)w<)68_;$6LlPQ(3==P=y8vujs8!Yk zbjT}FZOzfSG@0n1o_uvuNrdQJ?iHYG9CCQE6o!X(%(rtksm z+P&__7&0nK4#6=b1Yc-B`Cj+^g_dkrtAEo13F*@i!$H=8Z{;eGv0);&+apd}p50B- z?@c$&MP~yh3pZeAhztKSa9d{mOu_-f+Ku;OP>nd~WrpHmu=*MY@j^>s02*!gPcd>$ z>P6UHx_YWH+-0X)5HVQa1k}QzM93oGxcb*n7?;at2NJx7uHSE1T2^)$5snwi(TrZSO10wi^5Xq`N@} z^fF1oAJ#%V@B1xTJ`vWMjJTc`bB*7_=D}HTs;SCcsj_*yU0j>65i(MCM}hktqc^ed zT%SBZb@w^T3<(aqZB%^ECq@+{eth9q0rmEW+2ic`E3O$17COCVYSZykNPRDH=h)fH1ub}-r_4Ho_P4QyB&Vf`=|1T6 zhNNSG?aRlHl9lII&MsA$d`GM;R|a;<9x#|TFM4bu)E@U`xKfq) zc<0MB(|5j$h4l?7ZkOEvYnJ7?KFv+ZonhLC9chNvZ+R%eet}oylU2(An?Ir+ZEER# zbS6WJp;m1XS9&&YGCoOf{pOUnAj`*uUN%?IG336HYdcIumTWUn))wwhLe!xZjcJ(zpl z^uoqMKwYze{tTzRi^>#{3${QlntorIJj}~ckjmMvi|xPvGR9nbmsL!onpg~*S&s4c z0wjac-k9*5I~e|FWJ^la^V@5rhXVH3dua_|CZn7~%o7-7WV8~${c-D8Yyt-Cd_7(_ zW6a)FKw+o^1*Tqo0hYGDzDHX>mr)AUugd4UqUHrR!Q5-z@u#&DeVEcsO@0G(Ieak0 zek7-%gOaEdT7r4--Qg_0MvnKKbZTat_7_;3!fV)j2}pOtzx?te8z&8+H_A>}(r$9-(P_W0!N#su_(PO)HGk6^JT^gxAivvuOT*hH7(!cJgxIe z{92;i+8Nk;x`?K+4odo{Dw)s^y6tV_kXT)@bHhloCp_QKnE0->O@vm)_tFSdv@@&- z9r9`B&y$@TWR#JT>KLCzRDV&7uZfm+fqXFUF83w4c_s~~ z_iy)4ZCiG4vOYh^U9Hejl(!*`zNx@h>=1w4Jrid!oX{vFNS?IIbYIW6{I0lmnIT{^ zs%EY(Tz}W6tv5%BDP@natZQ3uCKOBc^r`$@E;ClqNP*6bhN52z>>GXuVqFGdvT!c6Ru2bkIgYeTun&bqQqV7^nRt_GW9-W9B z`#1*$RDoW*L6cjVMLuGRbBGx*zoM^o0l4}m2cFpqAw;lnmJh}4h&=GJ2$xvcUiWGg z;3Nm#*{3Z7;CpXhw}zz8gKC#WJ3MgBmdC2Hh6)NGvHZ4kVgN&#wLTVhHO&(3cnH|6 zw|*cXjM3LiwzPJz5#yuA+xF+h4OR)9)ptnNp6Qty#yR+z(`?3i&_$Hh-_zF-^~0zq z9ulBRdvOVa_36~mf3{vP_MDYsuR#=1zly~q}?+9 z>@$@&yn|V`a-md)Z~@xpR&3K zT_zLFhk`DFahTVEy@7iUPN@;v{6M8@1Ia70>tG+%5G$pSx!-@@(T`HbO~8qad(4UYu1uXK>?8`9yGW~ zy9EmKxR3XI*@>aT=C+CAS-y7AaZ*Jx+O6WxXbMwEAg5-4q4@RpsgQ*#Esl>w@v zz(-zdF*!A1uzNhnO+{&F+r$f&)McVR)cEHYTVx~@y`(VhFfDM*q_6S&vu`-O#b*AT zXCbv>xr|YtudpH9U_e`6j-KG$5=lhCYlE_(UOirQ^u$pt@%@~RHY1gDLbWp?S-wgQ zoqB$K;j8N@7urp^vM4FSZ+lzbc?l1UzOG5(<#9N=gpkhOS8$Qd8qG3sbV_y=wx6ty zm<#k_33oqE1Ho^2&oVjp1hHWNao{FPzIw+4fAgwL*Z3L8nC2JhA>Q)mZefq5?BLeNAs` z)-Zd7WKZGX#IXa?ahcxUBc~$z4g{N+*d2M+@=Z&vf#x#nF$Nav5rh$e_88a#ZRg=P z#cO{}wgsHYfP(!@#oqZ}E8-0SXO+{x$L5nRYH_yyUTtJ z^&$r+{q41z?)5XQfaWuGy!v!hR3@NWcqV`zT$$T&)<(Y}z@_@i{knbF!783;y6#gj z*$_J4Y2sg5GspQm==LD{_%cQ)pIDGxe+0(O$Mc>kCe6y~fb0n@h-!$~4L1Rxq!>33 znU!6^ZGDD`@2rpC9x3`O3AehsbrknTQwGlqLt@z9KAE2=9yJCF)1Qc@Zq~v}fw_WW z$&`uL5<)sk4BnowPwvq6TzXymoc!Is<#_epf3s=^?(5L$)k|iip-bGITRhuWmVXRN z<3ui>T_tBH2AdX7s-j=8k2tE0{R1WvK}=*z*Pu=ni$**+Wp$@bc=zrI9r3y3y>Cih zoAcSJ0yw3lT8Wgs4aPhCaU$UGS5*9S6)I9B4_3j-SHVMfn{tItyOTMe7Z!c2GJC^G z^9Z88+vB>n8x(zvaad?aCHadk9Wlr4*P9L zG1rOgdHO+{n4y=_XT*t0I+cg>zYGxw1U5y?GH@ zOoe0koov7J`Wze?qNOdyjN<;~k8{Su6;i#1s#hG9qi=V~OZmUBEuq%sE5{2OW{3VN zv8}tBkR%|AdBHt^SIFpElo4+~>4U$-{vC(>YGA~!YL zjn#Yp;>A|kzbWOP{@E)mB>w&%ttB3bY8I9uwW5~dhI^66xePt(xdmg9f0$dB>X}v5 zSuDS)FrDlw(L)dA*r7Y1M8tH|iGjVa}=CCBVCWY|9&)`L&` zW@|689UU2Fw4`NoSyU&kTbN^jiN_(3)s$SAkEy3vlsT!R4VkK-clR-Pi5u1^T3Sk} znmE=McS*^-1ymbX-RPQ*DfoxMz2 z)xH@Fm9af|Fu}`JF6{MT*;XC7|V%|CA|wF7`{{GLn_+$PLOP0 z@~lCVoF>FkKbn_cQJVoS!;$5GhvV|-19)96%+U7t`uex4GkiL6nSlB7AM6JoL>q2lrbZ2}=mU#R` z;ciy@pmX}CgGzvAxjr-hjJBMHiuX-NUlX7bR*gjixw+pQlvln-MJ-_lN){W;P_?$c zY8o8GZ9zM27Kji}sS^o4Yt--o(pQ&x>M@_@%davNzJna?Mb+va2t;tuV=E;NNWjh% z5psWPp^Dv(C`6Z>swr^OzWdm{O4a;m0p}ypu8s@JV5rb*^1vUgRE=@1oQga7Vxm2g zSz+qtU~#s(e(dUAX^K#KYyu3Xh?3}X&%6$FXu+ibk$Ny*7?);VLMl%_A~vM?H_a-ooy_#>~N;avb| zO|f6*-x(w+!1(iPKL?l>@$4-cY=21cjP`G#gYq|oRD4yt9zsckDaP!kR;o^PLs2T;bux^Ene2(~28qj!{g>GO;H{B3pHUr1{#M{Sq2w(RC zgo2j5&6|pC!2rdz#r=Ui8|U*R8?Pwk!Oh%%U!+&K^Huy_-f6<~rrr53=Z%6$2tszk zJBr=z-i%MsXNYjJzrtw&4uZ96;bh=LWMxepM|XCGsVfIknbK_I-`md4zWcBD583hb z*1eKca9EQPpy*)PM%_RfRM(G>Y&NHMYerQqw*GLID^DTJYPnv~31a-7aEW!=bH?78 z!$J>9>;MK*#@SZxa~0KcL9=h=ysdQU&4r0-2hv%?ScG$?xF1PexXJWW69+h|XhF%? z?4P?J8cS0*bBl}%Uc_tUHzlEFvDl0}pJsRAex}F{?ayU2qQWL!+&-dX^)n{?1RhLN zZ3xYioN`uG6RAS3dEfxZE0EU9Pdg$auGgs0E3z*DF!k+G=k@*9G8AhQMr>GWi#dZg*Br-FTwtp ztvlZJ8&iMJSNQ4gDR6%@fO#m1jxnn8q*N)t{}&)o=Arx{;9cEQB;W^q4I=h~3E8ny z^*7vBAKQ5)bIp3{Lo{;brNIqPLK_A7abPUA*4+2@+QyRK=w*Gd^4umIX<2Z+y14A0 z49)!<38JvyKMD^pbilyWQ&q651?qT^cqu$eaU)$x4+eV<`y?i;^jw*-^z`Eh1&GCn zjU`&OrP|U5;c_{H_gu6EomApmd4+KZO)dy}x&>E@$OZGa8gDPJwZwb`e(!l zr4$XkpB7pY=TW(e4_Kz)@pua2EWl4e8uh_b7(=p~;Yoa$fwHQ;D6;ZWuRKhK3%9Js ziM4{6uToCK&q6!?u`lISh~dpCoCJ{AprFTo!CE1p9gkf8e#Ss=(Oc`p5Be=epw1Nq zZ#@;tPCd()pyDdO@~B0v#4Rc{2roMK57IWk1XRl=Wm_*YU5=wlPZXI|GnrqI=>+nW z^W}WwqOJaj@w&Cg6(6WtwgT6F2mR8NE*xv=Y65(?-8P#R&5tYhzBGIb0w-&l$x3F% zD1v0wIWCiBvPx^dt63l~88?R6AIkQ{hXB@HcfG5yEnrUu^y@Py)5g|5tl-NC0YDer zQ%7#MHw)rZgqUJf0TuKlxln)eqQXLmD7>l4k}%JfeFfXLuo4k8=*J+}8x0uNhQ@3&%v6xC)B855~3<3MI8M04Hwji}wYxs9F1Ua1Oy3K~!U2 zK80T{6H6&XZmXO*Vhqp!-}>)A*A9tgw;;$23jW)DcR_v2Z;OjJ!#=uQ1{kzeb>!MST8=EtUlNx0|1N*&E8akO7 z#nr1ZfyzjKA&3N^Ct5gW*wKLhnvtmube(iQY*Tz)WpxI=$|s-!@5wG! zzG{z5$ZZfVnE}#}Ngbts{&&{DF$oHQJkC+&98iwE)wwQDwhErBxRncbH?{?v5O8uj zJD+khY8O8uF3=L)+iiEz{q(W@&Z9!)e7bV4(W~VZv%%M34P>@PriYtD6Nt$(;vX&+ zWIT@AlvAD=036Nu&K3_yQ14(qJYa5%-rK3u#R5qhETT0y)pT13yje(X6;$s2p>-SJ zBB;5yDtEWz<|dlJ5%8Jg{eLA*N`pHYt2JG zo^X`cZy72#o6`Tk{OWwZ{MG!z*X;!O0=;6IZ#d`3+jW(xzng zNR%~XWBVgG*!hK8&R|NN77nNk0O<3LQc%a*ooB%(KTpebwvtu_hrB~fLM2li{%I{n zOZ1b$ksWc$tv@uIle@h+a>^o15$e-46{na6!Jq}mX=$Kw5wG#as2k?unS!DiiBjOw zmR=#G|5on0u^I_XZs)3M&MwEP>B&}zRJ6Rt@tjS4W>|><%)BU=(B_Q*-){ZHHG*&^ zOw#6?(Mn;wx*|^>z!3xWkD3|JDlFTB1%XFm=zC&z=nBKp7LQiT4Ov;&n@i^_$+YC! zR3pY240~0y#Y zCx6{HkyrgXCQ$q6jGU6fR|TBBd$i#Ct&>0coK6rV#ReZZr3jl$RZxdb9lkbpD<~JW zGhvw_YI8=S{C{!@cK(hFr&US-6s!*1VB@TtnbA8VEa=#@-U`+Q!$ zA)O%VX5uX8i2sw0K5u$?CUpA(NA{`HTf*+KT@e)-@8bq7rj9>8>`$qP42oZjXH;#S zJ6_OT@4<=n3~414G@`pw>|iXO%dnnAOAW%j;_l|jP0N_2U;8_U(&xKr#0S7&wuYP> zn$qw-6Rp`Omh+qC2Gk!6%F-1A`e1OojnTYM6ir{^aX8BEd{# z+rdDIr)RDiwDiH9Z_<+Y`=qckSbyrJzK92zs04Mw|414@!l8At>8HS=94}gW4#ZxA zbo59)J}Zd^&+i^?e&=K=8lcwiIk!Fw$@7S=%{&oDR?eq?IKR9!=tC(e>7-tw!K}TA(eoKO9X(X?%QyC&AVtQql(r|FZ%HFyMtM zw5%`jWkOD41wH*)tP?qqv!;k$2n{xs7Gel;5`fYl+^A)-DaY~gC2-!ENQoi>s=0Yy zFur>-BSO`T*n>j%R4v-b1BpNGY36ovf7mNq zAsSSLtYtLDOsy>|nW?O%2$9T!k$GVJ{Ov_z+_|3$1Bl>kuCf1)fJ*UQ9kzmWX1?Fg zZ~*bKkaNM_>-Erh zosL`LdgZIE+iEb4JNjGo?uza114$4pp@2}FDfqiaeB`nD_O#Q3GimadIQ{u!Tla=8 zPz~vFP*M6H)Zk1{RI0dAU;$Rua4-Dy3pQpzaEWQuGv*>yW^k1CdH?SaKO@(N z%gkJvwOY%!)^FAabj-jp3e(H(n}}2e<;CF8Xqva|{fnI9`S|@L8pXCzWK*=EY3X?s zfY^j3YWg?!v8z<&A}~oI>~=~c;OnFd*XEkNJ$J5d8EzqT@o7_0bsXL}zV`|;gUP@D z#t%kKn$bGIQYP$6a#PB)js}6w?95hywPXEeCvTY@EFqC1kL-_D;n))53;9!$`M}~9 zs|59QW75J1HTG+V-duxn^>RK% zpd@^Ao5&CjnBV+5;e-By)XWJPC|;!zqG^Z#W%N(-UBSFP#TakynTbgp?v4iw7~9<7 zGyY5hl2Saq>rRwy5mQ4F?EF}rLW$!xZlJE)<(!?#&`vjS)zp2=ht`GFY8`}dsf0p- zpUYAOS>Xjb;BNl~lIC>RAhLWyhu0t{m*i+bXa`8O)>ve={MtG}v*BLV2uTu!xBcBA8+tmX7(}?4 zmw&3F>QGts*%0N=aSuNjE_k0cCiMs&rvZKNIdHQoP}a*X=C{1PPeTA7297^Sa~}01 zu=Ff?d4k45qQPn`fnIlecELj8#T9++e=m9FwcGWIGBGE%b7-FqHllOx@CGH1ZvQ>a zUUI(KJ0gD<@a+V*tEuUb@+Ekt)uok?msb2fqOX|rh6`G_?GGPNLDsol&@nQ%Hf%T9 zrgFqbsTWKl0iF-k7o9N&2M-_L;}u1DM=8O3j|29dDpHaT&W;+9KLE$hR~Ucqz7bex$yr@k5K79#pn)8?lLuR-P9saG70;QecnCYbw0m^1O@lZ_ju35fw08uw4EuqH4?iHSlGZ= zS|~`;eh%+h);XHA$7CU*siufADvtbWk(XngDL1YZRlE)F_dG|9KcnCz$BwQE`*G^{ z&5u(46^o_V9Z}97Wsjyt4K0ye0zGN@9ShB6d2T-5d8^P~$XAOAI6!ac^RiE7!g38j zzHz@d;&}Dlxf@{G;T~#w;svN?lPsOrXN%8Q&a_E*s$}c8ycE0V+txT={MSkC;p(f0 z^sNVJi-QUc14yao501dZrk@HzRL7H5j^n>~FcAE|2htkMP-XnHEVn7D`~YSw9B*A7 zKwz`M%mWR8{I-`XD&>s@n8wCTI&CK-pV#eOfsgyAPQ>D%=PP(;K;E>s%EPS%l=D`V zZ=TOb9Aye4kPE#pyR88xfV>b4Cbb^0vpNV;4-h0g)Ur&k_cgP9mG$<@DaZO59kVBQtl zXz2&>Sp`v;*I}6e+WdI`sND%s@mG(ftlIRe(~Bg~YVqdSahV%y3BbTeD=K@(h=$K+ z1ac`f|EjnymwIYq5G7)l>OXDtbs(|$&JtV6rGoI@c{DD+gh~mUEIoJHUac(#QjbX~ zS1sG}%({D`XlYZBYcFiOnxZvatW+Jl%5|LHhgx(;s9uW7V@eIW7LyK#J+!3*V0Ht{ zcPvo%Plw|0;V#4{bA8HC-r0^^pWyhoxtWvSn^_p|G4Vr-t|JIT^xi7V37C)7_h3zj z@DR~$($L(uN#EQtaok;agt6g4|5*ciZtkv+pHFN>{icMSavM0{aXr*9kW78=tqpyj zBlov^n6Q)%wB%6nsj-#0D6<0}(vihLsgI z;Ps45-uVg`uR1g}^YhZnC_->giDDED5%p23*?MM(GFKO59{s4oqyk4N-&44^zyHI! z_V*FO;$aceoJJ8c;_&~6PhE)M?F_8u$SB67=*$$QU^$w$H2oQAMpWl(dD{A_l8pG# zKiAq83u^}GLdKf*)}^Avvgn_&PrPE%z<1(KB)^+LDcIAlpE|uLf5^9ZSaj$5v|u^1 z(%x<|GO0nPif^29Nrayz8!jcq<+lsNMl)3*F8#OfIO0I@iOF&!6PhLxe^|XxF7LfQ zJX@U+FH*^hhRP9GHI3=+{`%3B!O>rwJd-Zi=dE2IRq=-}#)lg+;zcWI!2hW}iLpDl zK1B?ySDA3U$_U1$mc?xHsCU<>d1D{1&mtGW3UjuC*ct?*M~9@V)2=N(!gNSUAFE4o z{jekl>v%>;CXh4%Jqy)7xOh7g$u|^PkaTXV@tPvC4mFW1wCR0tCKv4J*1swFr_cTO zld*bEjLG=C_Jic-6W za$D9U6kSH&<237~xN3TG1{z~o!1~FuQ%SIutl|x-N=+C%8^dOXq*FNko8F)NQr7s% zz5!)`D@%rQj-L@A9PZZ%091(?q9d9)P0N_2+zwF{M>7x$)65@!*_pK`wpY=$cN`fVxm%fy~SyO#MabA}r&l^jvqaI)@xql(U(^M35pj-vNm z$NLVgOL5RNcS-*ddt!su~W1Xb9;FC|#P?1vh8pBSsI2iUm z`N7VIywCqWIy>EOPfdT(qit8+)p#T`M6nfQX@!ke5~pJI{;SCm^2_aBDgnhu`eqnJ z+|!7l{La74S{FfHM-kP@F!pZhY<9Oqk|A}FJY{*^)#xP}s`}eTk*U11HXwFY=Z#D; zWHO`mG|j0(1dw>JCyOS`k6N<(cF)~SiJkfAX(CXnzmU~c(W1EF2We|bByR_vaydvT z2iB;D4~d7tn)wBQw;*S+CXygsXQ?;ma>LVDpHL)YwTRe!pdXfU3B? zSWy+&50!0{e~16G~S3G^^D4j5X^x zbMfWM6%h@6Ea_>81J@rB&*<~1=!2;QWh5Dshbb3!61{S_@agk)E+ONruof8_zleMs z*zl2Y+F$$YKe86_OzWQO09z{Q~|xLqHE)$ zy<%bKFGkN3EG*>IQhl`OM6+X1PX!!f>|1C1)G_#cDCT-M1DJGh2R2XS{(T{NGXEWU z=7;3H^Q}?d3bDlFH-w%eGL$F}IAg4g?c2D9X^{8>n>goVN#yWj58iSt*!*YlHg1sf3ed&Qr?Qo~-C_-YUJNmim;kaDA`FKxiV(Rg;{DYG)5!$szFO z%$lAe(pJme@;Ufm40!w`i6jQ)d}Vwk2XHpd0zrFF$>`hJNsMJ=IhvK=d~oY{@7^qX+N7_u=rd8jKd=0Rb*B@ zd(zLxuw2M-m*)#tfjnry`{yvBAFe!qdv#DmkusBWZ8DF2zhl1jY>Y*PaffR>a6poN zG?sNMZ5rt4|AbkNYk8_bj^q^p3q3w@BFbdW9x&K>IedZcGS20~@&t(v_s&}#?(rCb zrW^_54G&?kmIpKY9dLnx;W3QB7uN@k_@r`5(2m2^1z(zOaAIC!Z!i`@vKqTl;0YS3 zS3Sm~aqElrh{?vD-H-!q{`BN>S9qI7myOFxb3amBG5W^^x8xlJSy4xv&Fr)aRbKWr zvhvnUaCC!uY}I>?xZwS*Gh)Hy7ZE6zJ=8p-<1Gvdr)}`vMqk_=l}wv&H&64i=?)Ye zxG2=Wi>u1_C_qVrzd}&O)k7gWivW|FTC!1#`BgDkeh+_BjC$O^Gs zI#F!~rkTCs%)eK^JS-P#(keoUle=GU~dW*}Y_ ztRQ|s7liEvecopFX|6itua3B-W9!wmdc^ zXy$lVN91ZKfI&WcXp|%HYid~c{Kj9y_a#)7L?v+wOz>K`$aado7A%y;=Hk_0t`d}PiM`}*l- zcQB^gi-r1?R@a*tku08b?l%j227X&U^aSN{T+d+cEHoromld<#x7jBE-Rq5_RQ}A3 zWm#R>Vry~0U=J|w^RK5WR>W*D<0Q(zSxGrM<56NKLwysY%bxD0^_Q1?>;&1f_gEMq zBA{7=Vf3_~6gJsuGVX?Afz%nM2nf zlapF0W?UMw$iaKCkBEG|QbxbL_rj_T&u+R0cPV2>ANa3$IWxn;u%+QQG%BAz8ByKk z<}}qf^UN=Onno$-OqSmG{-i(C<4^o9BY^ctH&@8nP#(EII&w(#;h~;*tm^%(xdFSG zM9`wL0uLkLO%6{mhGPeU)K21VqxU7r1(E}-K)al00Fi9iJ$XwJYLSrV+>O>JwRP^6f~MN_zbIHD=KKZW%hRK zV4gWelc`V(u6^*xzxS<#_$T(4Y?2J&@_)o#ZEi4kr!D_~vRUR-{6SXtRS=eqUkt5Z oZ>DD8|NQZqV8=bjeL-{%iQY&#hqSiW!NAX_4>Do}B6{Ed51NU$fdBvi delta 14905 zcmY+rbyQW~_XT?Wpcf=X=@d}ul#m8dP?Y9^T)MjjE_qPAgtUr)v`AgJfOK~#-Q9?E zN%z})e`CBi-d{MxbI#stuRYhCb1kFL|5c#>E8KeueOK4y8Y8d%*-r5}&LJ$;h5eC7 zW%cFv=@?WV1b zjpi=Clz2;vWL_GFNCZcs6BqyONq5GW%y<#g#GNl?wFs3CcDrJUv01Fw%ZKgEu|zV7KD>3d;PDa)M*jqh9yHil?$sr(o}S)Lhppp%@U#N)hMZCAN%eoUDe4C9SH5w4 zQu(cC>GEMR1qPYo6dqe2+i^&w!esezc6a3JWi`znycMHY*WgW8NpV^|2`QiPByqev zvM(OR<$0vv6gDnm+Ffq=s#ls$3UVPUpYO?+!*VdH(_maTz z2`b*Vpr{Hylf0$QMinmO@@7B8y-A~kMwfyf6q_T#8lDPlum5W%OI18&CSh)ar<*~a?r|In|-qTgm4^ueEj*f zHGD=!$70I7Y7DIuRbL^$epMoR0!dU;E76ywO;S-^Ikx+f`TIIaz`Nk!n_NS3pMSbU zL8+a$Gr%v-;lV}tUN-f6m>Y< ztE#FwvgR45p@(F;*iyP8kBPg||CXzYSRB`umU|iBu^s`J#(2UH!-ZKZbLD1;e&H|4E<9Wqku}9>kC*`-+EbBbFy*B*(Xh`2`XJ7 zMu$q{$_gv!%*kUYmW}zSy35irRU;eAVeVsL96q+q@lWGBM+a+t+v`^Gm1xvvfKZcd@|Hsd z^xH0sj>g`Z1{Nn|F1V%lMCnu~3mRQqDzAGNng>y9y@NcgbtrNfo1ol#g zR}1&c#&-?{>bu<(3M7y4B&MgM<8}S%>yumBIYkz+vC00i?ZdOXhL9iLrJuIPnz9S4 zF~e<34Hyg@X~icE|GHYp%bgy!P+bd^mK9^1AH8PF zTHgrUluiQ*$zL+ki{^^|YtTVqMh(UJK|ZRz%VBvbF-sm;Uu z5z<>vo8rl84$mDkdL_@+EGtejov8#03kvHxI5>8Dq4N6HZN^IaT;YwU7RpS?UOU1q zZO`V$avq!)9%ySKM$@!k+&B4t8h4RIOHLMJ+?_f7qPHVRE4Mv$MXJJdUhu;qUZL&y zhO`$2Z8;+hc77pk*f`ruz$;ao*LpOD6t?_4u(NoG!^R=(Mjb&*8c^*R&tuQXTYDh% zS0z&J9BO=KW=5HM9jXZG_v0E031uP2remd7KX#HxeV^_Q1!Ur|>rR%73dGX^Y}}7r zArjHnPE=BqbCA6amk)e3$QFaoM*h`^_S)BP=y%bYb{NTaM@RJW0L&d;Vrz zql>bOCJFoQbY*N~>zCI)dl$rA-vsa@d3A@F$-ae3$NA??G3ULhqf%DZ*8U8z>73db zb(rH#D$e%bdij=IB}VahW1`!ej}59KVK6Mivr&?qxiG=8vFYZG9Qdc0jj{PK%7MYC z892KoV>)ckOZM&*{lj;@vM=VhoS@o}it_IkC&qyh!dawFy&iwTzh&TOAxhDk6b$%A z=(2Lt*gOu})4Qr#HqEJN{D7%s#Hdc_t-k3hXT`oH13jYtT>;n>t z9h%2)542ETRr9;%p?CUOp_|fn7vvyGZ@`?>O|Bz<9k$M`xPY|@v3)#&%`bNL35QQy zcLiYgAF#=w^fe4g!sR(H9@7*U@Un4h&nvp$coZ4h`laFxozm;~pjMoTPp%!WzH<81 z$?xOzpe;PCaVy|<)0vwMQIBCqL+`EvzxSFISGB1ykA6>+0yJv}hY?cuk;uXK(e(u) zT3m)*RiDA%pRR{f!F?l=(t z>2jgGy8O~K&}3jNO{V#IZUAe~d=Fa0`1IKzV}@2%>x7aw0P8%4#<=3`73(Lzm)`vJ z;s4`8ZDPvo1f8CnCq79E^Q)DMauU7;*hS}d4fVWnBNY`jv4^&{-T9LL^qx$!PS0W| z#kd<1sh-(HqI+b#Rq_*$gn(iuL7GMR^h(ND@(y&LG{jOPgPsi56({(g2T#py*qyoM zaHyvCt|$5-wk~sEWt?^UbA&tZ1Izo8oFuTQPtoCGP$`_iqAd;F|G&z#p-T01PwkUv z@Sk@M9*xD}C02iVCr&x@p@cItKkkyW*7={EfIM+{8~P8YDhJsL{RGZK^S`_`Dm3C` z9D-Uzsxd|$}mN6>v&HJCI6d-{)D?>A4wmx?ip(c{a*zuHZ`N@o{G z3{pg(K=_RAbMZ9O3DepInGEak{E|Q)I*eOI3(sy#CmW&aPt5 z?mx)2PmP6EhtI-3Zbo`xDaI>X-&C_R2vibwe(jQ1mgR>TUHyFg;z1&2Aesy!tQ^YF_Lk2AcdtC{vZTPtCb7*ag=_F788t=52sBPl4sf3?daY) zI3%lzqFJK&GS?U43b@g80A%}c9GkTkf)SjAw`u$M{H4`cg$I)F&wr@G{Abb{2S{xf zqs?59#7)g!_X|?V0K@$W@snCClhfV{kz?(VOYdK3i8uQYbc@BojIeI9h*F-#=~5kT z^1YeqvyMY=FjIe1@AHRC!FVL3QupXdErh7vib;a=l5s%_gPYBkn{9KHj`aSjgmB|N zWRwi;n)**ubL4(O;mtJ3mV9)Zg9t3@w;3MsKQxj%e=t3S(pd@;#o?9mtshEp*e)BN z`d?xtMa63bhnNP&)uPS-<(gaHWWSgiD{v5``FXXXbA0A$+{vTS=T%Y7d};Kw8Xf@P zwW`}YBL$aaB@`qr8CfiocmdVB%esLhoQ66UOQ-ej&uGtQN3~vsL*hdv+kLeA6a@+; z?w;RwBQQ{tfTq@PSp_O3Nw>wQu(fwoV{LhJGM5!Uw6kzs=D)34x4@x?0&k6OzW>h$ z>C>ZDY9k~eImPE-7Pdc85zRj!pFg~orYR;nVivhLzxB6IqR+`Px-xzF?;+jmXIc)V z20mW#edwF8)%X+CLBKH8R6Vae2`$W!QN^dq#x@l4ym{(fj_M{I9_HQ-!~Z8TYlsh% znqdHh??K&c5oLl0!v|38!I$tz){Wgyd zyoG%Gd05y>q`FcjceuIzmEM&S@0V|TTg$XjU*m%kvLai5rCmfP$6FSk{hliN*)~#? z17S55Pe$wggQ__#lxffnFvg83kD})?LbD?Y8iUn@!Av9S5Ln7@Rjz!gTGftFsm}XE`3APk8u+HQYij z?pmouIwB0PRUt}C^JZ-B!vXKwX6QAptT#zgpdOEcv9l-$`ny1$uG%0K)7`1x1C0Ud zX@%n%lX|wXtTbLkKxZ|{1@PNB{n$CluCo_UaCFocp!znrw$DdJ*tbrIXZ?ix;NRP3 zrF-%vo-<%kFC=0=<~TPq#gic8#{+C3X%7v?PgsG0ies7+NJ0Vk*{nA4299nm;M;y z3LT^*i@ts%%^D;qC^h#K6a78Ex&_B7&+?q*M+`mWm5SBYWU0?4%b^y1Q*Y1cC+R}t z>viBC8hRJNbMVH!kDJ~RrnAwHv#}cKfLR48Cpr#$bSDbp1JFsqj(^OXdO9?OalVAq z;YE9|vjWot4{>2Wm0Og5{>IMjqdUjymMi4;3WIV8R#`#Cq!NB|mwNo9Njkkh*l(UG z8)2)Oj}e?!D|YtC^;^#LLf>TKeoV6b`LU`V@|_UvqV90gr%%Z^l$H-&{)IX}m}gdh z?D8Qrx|@iWETqMi9q7Za|9QOKfF(j=5Vb+_7V$O}E8xF?J$!Qh#^_>8{HrJK953VkBDoUkYF}RrRNi`+jmd8jr=m z^({IeXgi4ntAz`wN@+26GBY>yF%X( zDKle!o5cz6P@F|3kuunHc5suG?X}Uew-HCaQ%`Hi$}OLp+XYC^)tG5WY;u;oNX7r4 zW8qzU&R%TV@ahlSPvIa7SxOY{1LP@j&G}C<;6n9{UIdWKtM5w7czRbq%QHWeq)qS> z4KDh~k!R>YFpvWw%?C4Z7D#oR3uTHULtRA zox898=To{xS+hSf8r8Y8 ztAA5$t9&{+FmoGuGVTWaWm{4oy|Al1G2p76pYf6;T=<%rGXGp0y%$XDcJReV(+;u= zmHueV4@Fx@^?$$dK3XoF-?oEoVI6viff6)} zeZ0FFm@6VVR&JM9Tx!RB`oX9r%F5@sbTz*Ue5xyjG$=GDen5iDzBhc`cl5>}7E@4D zj`ZqnpTxQH+;yIu%)F%}l9RI-WPCQWc)X0dXSxmK?hamIvEdr zTNuEXIGR{Soy0G3^XwpohnlST+%!t3#{a`$Xi(n3(deD=ED4$r6G}{qA(k#Q4cE#F zP`30>$SrP8@xAH{XTz%A_TYX9{r^4Gi9`i&ek#K3e6`7o!uWoxXKwaM!|SA@CgVf4 zrF>LjPHxWU;u~(iSrfrsrU6=JGVl-dx%1B+I9-3OiX^qW8H}wFe&d zQf*{7xwxS4-oG~)JeHrah+wnR&lB_@TUe2pkW;XG0V$&Y>(Fu_iW$yqu$$VYzV4%z|Zhm|1T}d%%p#a#gs+apre#gM9ukP2Z*A`y> z<+*DkmV^=6n4H%786EV;4x48mg64QRw^lbE>5BmP*=bW)2YL0(zkme)W2X@xmD6&Q zbsQvQ{?<~YK*M=l)#GjR%>V<(h8%*NoxRRbLU6Q|TTb<2O+ z!~@~dD~KtxJ3%d}p!P4(Nfd<82xisIe7bZx$$Y=?2I|kuEg&kHgjgtN&kJ$#^LyTS zO>$X(BbEEU`^#6mUH6mhhzV=mvMMt$xquNd#!Mw9XUkC(^EG#8*kh94Zz$E_;J&fO zG&7ap0W$B>nX>1hd8!sx_DwI0>zkw+#=a0d3m9|DUcD}d@85ki)cK~EpTV(aC%aWq z7jPwD#*(r2K9b8Fenr9*PBXzsG9}t>kx_ANM$L{A3=6r9dF&GcmvCo*F?JF`-mQh; z8PgHXe~JhPWZ|j0&7-MleLm-|J5ypF0ygV{*PQd3Pt0p4%q`@#aJxP-K^F7deRC

    %@%u~z0>JSAjPSspA!(-?{|qc~`TX0Y0GgQ?2sM|A z>BBtUSL;nQw!?>Z_D6qLh~Pd|Ub&ih)>FZ86z1Gm#GT?SWXeOANGJp5oMvobkLm7E_%#&Ly`4z&&>~nL{ooi89N$jZc~tt|4|k=r-KN+ ziCMp6s)#Sn4w~eSdIAc{S%K@h1IR242KlVAz#1M$PNNH>@)2p>Umcvo8+CF%=<&2) zys}vAjhrQNR3W*xWmYe~A%zq>Inlk@LI(r>dS5y0v6D5Fz<@m7Tl84`4b5@|W*USx z;+!t@1Tv-ABR*;%v`jmDSe|%3x^={p9CGH6bbCzae{uHaXa^p7%}Ko*8y9YAneX!SDCR_UbGx#d03U=(s>Lh%zCv#9cyU-BV$iln%Pmhu%U;$`js4nS zkd}59c@)NAH+p9g(y4roIx9Y)lJ<(yywl$AK8Z9O89@t;U^d4mwz^*`c0ZFGAEp~|Y;vnTL1)%4idIgiu?t2BO?qW~;KkNqGCA~L|d%@xb zGKLm6BB}IDT(?sTE$K==E=a@ez9}67EYXFL1Xd;%R*3QH;*U2>CQ?Rv)o4CssoV%G zAFqVp%u9QSyNAk501wALlmj!I0Oj&<*=tFln4G_v;E$qSBs+xhqs?wdp?}f zOWMpQ%NkzYIp6+ThVkw|B6vW!9%flyvp?PoYtbezxCtO!dcWBl((Wx^doa%q_%HII z+NbZiw5V)*qStIjtG*?JvyhQye0D?-pvP0bF53$7vgWXn21sdMM5(QPH5SXOyWVsc zq#m+*`s(1f_k5lvv%{bJnxjM4e0MIqpZ=|U|+ zv6d=zG!IDxtHhXs4I%}EmRxq za5P}pIzBx!jQVUCX22w??wprhXS|`fX0^;~eqTF^76F6ZhrN6ztGVmL0TfKeNAp95 zkZ+(_HMg`H@nxT`D@mB*07(y+D8F@{^#?6)&ej8BBAWvt0$T)BxsgK`8*fh&elYpS zT$LcSQ*APkhA2W)yLx1J-yuch7NcM7ZI!DFxvqFI_#kU|iCAIMj8VfnBNiQ6te*X_ zZ^B(y*AS~uS%%pZt(wL?J;Ph%X?+%SO;rJ7Z60nN&&M|z!5rwQ8>of1?6Cut{xk_0 zAYzEhYkeaF@%PVH*!B;*d2e%!)hIjIf0A2jc6`H?lgH1pW_NoH$&5uf3Bz;PrU<|PF3c5}vIte6McIO6W8Y+!tw5T0Ig{)yL8jwkk&xu|&6`?$zh zT#7Eb$ZK9dRAKBMv)k3pD+^?H^4YZS%Bc7=FW+7$P2<{}a$ECCkV`%y6u=HHW_{v2 z%KSO7z8de@XH^nhIIy|$;-FDJUKAa?W-Dg8vvl{A5P8yeaR{7R5k z&y=tok~n~&gVb;aI@)yf^78;aeB_6)<_HHzj?BV|W@4R_PE|n-cMP;J zk^V1MGGn@PdL*w*_;IVZ;RC$c)eIYAQ?4j?mg@F z$qlI;9?o|Ys`XXqO$Cev9zY73T6`JrntcBDyMLc;Ash8F3?2VaVsWR8Xk6g+FG6$$kTKz z7XtX$-KRHTZIJ@gr0x&q*SvD_FhUyBeM1++-^xb?(Y7qv_Cle?>hGiO=oZCV21nNMH3-1Ba8=map!?ZY0_Ez=^3;n z{UAx1BwXuy+FXWeSb z$}L;CfOtg|_uf3Qtr=3Nvg)~MH&({Ts%+R)v%1LV=tak4_`9{`rySD9gGB+8TZ;LX zj9zyx!GIWy!6$JNQ@sNR26MMBZT;OJ+eR0lF|aWyD*4j4)eYvI+q4fL*b4&~Sb z^WLh$an)7wLEEyjv#*RX#shI_FKRypEE`@ybXFBGucL+Bi_y%aig7vGAtf zw~wZ!?xpxt-&*F$FkO)utl`ZtpHJEL;q=*B)V>M^cIDz%i&9K~;cEq89?vvqWhC5G zA1FpEx>;pAtbovbuCF9F#7;&4PrC&O=BGTd>4w|MD7$gyRpCE>HwvUsZt+1u&@GmR zURp=LbNarW^3$^*huAW7vg{2ifmBAV{MnG0b&my=$m!b|Pv3QFyF^FF%re8OzdHz3 z*#L_Z_<+W%PwV^fK=GM4Fd6`hD0J8}s5zWs+1cYic!?1@IKG&bYIq;-+%$a$n?n{P ztaWMA0geE)dxpMwp*$;^q2DhhNb^Q*)O2&-MV8}!8Z6qKRjF&QzCvO2gZvye1&UhK z-SU8p8lvGo_o?A>z>Tolc5iO0vLe!*tQ7_K_LsRpsCY}hfovW(Xa{lR+RiO5S-ZxU zW}K!fX9XcOc-;ntv~{xrl`W$jl-YB$Kcqx@RNIx)V|5ex1&g54=GfnMDuXW&2%L<8 zmv3?a9|3L}x7J%*j@GpBnEG!;SuTmWp~bC5Q9X(e6MbLP`ht3&sX{ltbpS(FhjIPX zr0<;WF4gxi+njb7dqaus|HfKqPapR70N=!(DYkRNk1wBl7?&KM6~)mN^k0`I(r)AZ zCUMm;wVXFb1N7f{uP$$X^Wye`pQM*Oy#;1wuG#i+k#5y<%ssWq!lqX_z?)D(0cOp{*ue} zAroiz(#)9!F}ohU3^9cfM$vrT>3lEl+T*s^re249o;XQ2L5i-D9hsPbZ`vpugXuiT zbBWD1-+U?mv*l-Q;tQYNh1G$87r-Rr9Nli&)rkF&Rd3p%h0Up@f@4=>qp+XP}+Plq)T1~gcLo7d9>!6uDf4!>)p@cc8DHVvkPR=av%GK zXk2i)p}~!@lWLD2z~i`X7%|pC|4QC!8_H`*8C)0%Whzne5N+Oofsw4|=d#YoS6v7U zczk%oI_guheQCt45Gq0~E?oiKMFoqjWuvr|ZEM_= z%|vxiTotvMyIsDx(fT%w+QDnuh;Ocz*Y6n+6W|TB&G6?nFVYgMee`cL( zD_AQDiRi}cRjr-cUt9U-MMq#HAv8nn-M!u{80>COCSIcxk0?FPcQ3=wlTG(}GVfoi z{uj`AgAmSX<}!$*3R)%o;(}Dt+oFM>U&Kz8hoF5-6aJ>!nxseXwVclLhXCFA9OdbN zZxe^z`Ln^54}C29*g+AKKJa*Nw|T@cdPbGnb}E=k0(I0qaO8V1?fxL~)jQzcwS@-* zAAAu#xs`|55=%*Z2mH;&e=&Ng#!q&$7;3Ps&2BE0$Ab1?um&u1F4~*&1xbcJF!l)8 zwXX+9KJZ`ST=*huSxOKWudLEz@OA%|Wa8`VK+hjuA1auHn491Fh%Rnh%)HIAk)Jr~ zbHO0(c3a^tuaW9oL%UgTLK`>9K$4Iq045X)k)>uw?{1#|TXzP9l1l0c{+?ya%Ybto zj2Is6q=M<$f;@3kp#51I2Gi($g;E@&U_Sc*0C4fCOCT9xR!^46#E1FggB|NXlu!)w zgC{U>{ap55ISrx)W&E%?nwHzAwsi9i;KWFvt2>Gr|6S`-xz0WL7F$Ah#on%@tN9>|v!EjtQgIxu8=?dySwp?CFCo+QbB$L=l94t|RMsE|)@1*OX9 zm%ksC_`;gbGo%H>7ku;`e2Qf?Ltf2;0jm;=0`VtJNHn)AQUmQUdU+E#C3Dedf74ao zkmQY1MY_fgZ2m8zBRN7(Aa)!e3tBgF(tmD5j8{OwTVeDq9#5Oq&mAStx@ujNi?vJ*2IEWY_HjbPIK(4MGn}u=B z)Omk=f6b;6p_sLAMP-+PgeyTzIHyfOhjD)8Z8JUMb+PiC$wsvqwdT0ysOH!>L86Z- z!KeBkj~R-w6e8?56q}>X-q!P>yee+XIh1EM4Mu+;0Dyel{+I+w2Q332_#8-B7nR7g z->I8BMLx`WJ*Wn(_bB+WO9l03JXN=Co81!`D5@x|w9uiAraN7fBf= zygN?tF0jmZvLK(Z+v#xAnJ{Pfa3#l=UKUcP=%6=*Xa-rorYHZDavi9{3w0`OK~ww< znBXC%6AwLkyujzsazEGiIF`q9zAt3&DWy6KiHEkP)}#mb{1M4Caf*e$gd+qU%7w0m z!PEK3im=N9o7lqP2^)ug(go#A$jlM6k_#suc?;4rRC#2tRv*A?^3(W@byEC08U^v=*GEHs;Dk3XGa3314PRq_Eh&u^Gh8-ya%{S{Eum z^I3PPCRWA;lGIHE|0$tsfu1FFh)-aIDahtRMGSoiaU)Zj|I!CJ?X-wW`1GDrkk@Tw zj9BHlZ@$T`GFMs3pIlavoywLSt698Lr&msYjdYZLQ2jWmf)EY2)Jd5+rFyzlt=C)^ zT5#n6o{%0Ict~jHto^BSn~sV;LLru?M64ilMAEiPXr+SM$~; zeQ*yRKp#l-@fpxLK0h63XHb`FU=*Ml6V6ViOhkLeSF?9Qa%?@y#6(4xvoloSfd^c< zKFlE`F8X^DGetf!I3)QgIw?|nMmPM&(Cgx9_*c-~ettj{pq15Jm#*F3Uq7;uQ-~JU zOtY~I02?84L>ni~JJU9fuy_cv|1ui5?V6Bu< zC4ZPFO>NeK`UV5!U14mK-bfshpuu8BJNB| z43wdt1Y%TQ=ISAC3Ephp4`KP~KFDA<;e4m^vu{`*1SibP|fOr&l%Hw!1D zt_Pzmm_d$s_$W;efqrQk^q&^TvYYv)&ba-X*AF@nh!xU5xFkopaw?HjG(=$OUN=u} zdvunTsnc)hLH}Q`$6Eioog^ZKWYyPWCGDlkvqHvjlqkR+h0}ioGegE;L`yg~T>tm) zc7<8G&r;AV5HJ!x1*=j%uH?!8(I~hHX~Yl^Q3k|v#|JQ$U4G=Qj(`yv8&|!st6uwB z+My4o51L1O-&Fc#?VnC1w3!%bqC(9-IrY3XJWZAh0jaNsa$Gw$zV=OF4b$bXgVg6g zn1;L@D?3{mcJHDJx+K*Ot)BE&8&2jhA-XpKYCVgV;N^De%|}mApX>Ga_@q@5Vy5Y=6c=@xf*bpr)&Y|+84lDBwg;B- z|6sTD5@^W=UT>ATRuLrbq-h3{}F$eyPDxLR<+>WE<(p3kKizAz!0@SG2rtgHk%O0~%jEi{&5u>AWs zU7!J`ruDiFURfhWduOV9#dIyT+-*U+W!hn-5eTBh7{!W8G2jS%2Sso?R8XJye-8be z5S*F$E+18J@Qa4xPQtvKpHm5Iq12TPcwcx{wtVPxY^QV14~koegI@*t3Vtzg&zOUx z=@Mn~wau_Qyp$hMV(GDw1mDl6`B*1NZfte*IM7TRnaQX3kBx_?uFvi!a@eV`x7KlT z=yBw4Zv1`A84w`pr162*LjKg)j<=x4fp{85ML3k!Lpd^+A*t>3B)6zI0dmogn;OOK zRU&FHOioUkCaa3zr^=T5@nvXU8n^f-cO}_W!$d4$!~1tPjywN2Jv**;cXwS8YcWc7 zKU!?Pdp^J1*|%0{?e-w!GvQS{ZHRc_O*eOq6|nnMchj3Y9d%qjD8cgL1Q)rJ>0`cg zbHyiSNz-?#9QdfR^@ps9P>{(h4)-5l!7~mo_D;_hFK+caY5XI8Ya zwXY_`zKhMSqQN!>XF+v@^rJ+jcLUxb%`Z;wnrUT=S5uoc#<&Ox>#?nZcZjqa-4C*U z3$Jl~l2x1_D_rCKAjpzvh=UOBGS)GOme5^+qef(~*Z<01d7&q>`uI{$%~IrD6%!ms z^haS8Ll*Q8bN$Y&&z^|vp%w7Qp>95^UrhBD+4*Pv>W&|GS`9Nln7SA;<_(LnlMoT&Gl`9#q zLY&j$sI~%R8@HY~JvVo*S|#;6zBuOlGP(*Cp1vOS&9?Klp>_zly>Y##Ca~HEf6E|| zfnz7fC*mQj1?kN-PLruJbX}VBJ#Lhf7vhc&=zsRCoVFR=uU;jTC)4!M)Bk(L(A9SN znp{4}YyNUxvTwAP{PXGY{RaJz0i=D9@Ag4H*e)`FR52o7!QF%}YPw_XExnf^qvN-ZutXivrsV&Z5Z zl81$OB2e~*!Vybvcr{MXc8%YVLX>b4OV$-4d9yFM&Q~Naf2mu;V2oU0ZReMlD3^8f zb8{C*ko2;Sf(x(xgbZd=!sT?nRu>@UZ27*|CK7reQ8Lr^aT{M`T~O^K%C!55WC zOoGAY>v&ceSK#3@{#-F|Wf$s4foDd|wE@TyQ$<5YLPD3IMk}!ihS5&i*;z?E9{f&7 z_$scS5{kb|tYXQkIkb8|_V*q7xxiWyqS%NrZxqM;_o&6e)(cYdIe1bdEJH7_-`L=d zt9ID%N%=@A(&Me~95sY9&RsnpT%PVzlPxWU#LG$c?=foGtIj7LI66FMgEi!w+jJRv z62l5zJ-Gt+cN#d0nG5G8UE@xMb*xX9vjR<@>rs`!S&}Ed;R}Yrz4KGyS^tzSwpipO ze;!<>?YOHo^eVmkCzjNgnN_aecC;MIUlvO#JS}n)92LkFC|(ld;r?l{QH@DPu6zt4 zS!z&XZ$HUuyZ-U9f^R;=nc9EWzBcTD@>`c7Pjeg}FI|`2Y;mAn3>@Iwgj@343llz7 zFbYANI!rsi@gQj6B^<36h%3L}F!A_#A8k0^fq)w+b$A1DqHOvFAg+KY%A1z?9_ z<{`9##wsaC^=jqSG}Bv~)8#<;;EdY0!idCIRe33ys5;i)9$)(K!{$)ROeXiP$GNk3sP*WadDzqs0hu~o zkJ)p`V0`>jxYARP@xZzZnR&>r#FI&$L(K*rX4$Or!jr$Np6J&WV!m|lOi%Mi-55*K ziU_AHkjlB}-o)YO>`*z?vE)PM#U!dDInSrYgv?*Qj;h|j@*pCz*{v%GJzoC1az6RJ zJn~ggS8TotA-qVpP@yxlihfD;D?Ygmy^lUQ)nq5_HvR9It-O=%G&;MQH(aj^`XT*V zw#$P}ocYb~{)*UUIq65Q3VOp2W1n8b|L)ej-jm_&hK z$J^}0<|&|&mbMi1PnlvHXT#h5&7>W;%|tTv;D#dTKEv7MnJQ8Ig6;_atm4l@_L>?6 z?b1gU|G^BTqtKC*2MVvF#0649nn5a~#5zgoS0Z?o|1KWjjH7G~pa*?UwF~tk3W|GD zx~c)AhnDjs_q-a%Uq(#VhoFl;(?#EK*gO^Yf%5S@+Tn{of2LKi3R5kI+T2-KeeZXf z9|!*97e#rC0fCK0KT#1C#jRsbUpDi;CK+#6gAuTa$tXwBu7ndNI# zd6|Ja&mzkn5@Sm;qk<+o2?E|r!dRSsW>d`YC=XDFgO7p?`2lI1oqn&74`t;2Dr3oK zqFRW{j5FmVkfm7FXKQtw+;%9)NY*iyS33YDyxwcyv_3x7ys=gSKd#`o&NI@>{OpmH zjA9z^dsg)F?yy*s%J$o*na}o9j;$;A>cab<*3RHznp#n+nLzFcZnU^P z$2LNs*hot8kj?uTVLEB4{zSC5qut#fXVZcb(VS=|AR#VPb6r`_JzX51{6-~kh+da* zmshV-`EK5H;|7&!Ec_X^%_vpt?9bOrCk>Z-Yc_i1E;W+80}<>YU5kc7rASSG+RMkW z;;H$6lRVXe_Z??ht5(~Zj8cUw-Bh9bT7ra*N=c3Y#wc2Ez6GC7Fy&KCkQ9GN_n75k zBkq&fz&@U#gg9E{mg*#+M%{k|1`h&7YsSW{EuNpw@9E_a2&Vn$G3)2=7to+ddALYhkTU< zBnHVdlsG3&Om6q#IQsY6T``5?SUT@PPO*%SIv&DL#&8CiefT*CNKCyw-2iWcHyEYb z=9g%N(&sF_;K_OJhY*nbm%AQqm?3MBVS39WUnFg&2XEI!HaP3CmzSuiQz0&3kIW58 r%@%{DfW-ihHO2IEGyx06x%6ymx~qAfBj|#{U@xC5Kg)k=^#1<=mr$ZK diff --git a/test/goldens/screens/pay/goldens/macos/pay_quote_page_ready_with_merchant.png b/test/goldens/screens/pay/goldens/macos/pay_quote_page_ready_with_merchant.png index e6ec307335470c6997009cae1ee78166175c6584..f6a4c25b4bfa15cc16976dc3ff3a0395deb09894 100644 GIT binary patch delta 14957 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 From 8e66fba3a7d0061e840503b2f50b4b6c1b2cc148 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Wed, 16 Sep 2026 15:12:56 +0200 Subject: [PATCH 16/23] Add OCP pay integration tests for the 1 EUR whole-share quote Pin the cubit-to-HTTP contract that a 0.95 ZCHF bill becomes a 1-share Ready quote and that pay submits the full amountWei, not the quote. --- test/integration/pay_ocp_flow_test.dart | 331 ++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 test/integration/pay_ocp_flow_test.dart diff --git a/test/integration/pay_ocp_flow_test.dart b/test/integration/pay_ocp_flow_test.dart new file mode 100644 index 000000000..fe7337f5f --- /dev/null +++ b/test/integration/pay_ocp_flow_test.dart @@ -0,0 +1,331 @@ +// Cross-layer integration tests for the OpenCryptoPay pay flow. +// +// These tests stitch together the layers that a 1 EUR / 0.95 ZCHF merchant +// bill touches end-to-end. That bill is the original screenshot bug (quote +// showed 0 REALU sold vs ~0.95 ZCHF needed, Pay disabled) and the leftover +// sweep (the pay unsigned-tx `amountWei` is the full ZCHF balance, not the +// 0.95 quote): +// +// PayQuoteCubit / PayProcessCubit +// → FakeBitboxCredentials.signToSignature (BitBox boundary, no real +// BLE/USB stack) +// → RealUnitPayService (real production class) +// → MockClient (last-mile HTTP boundary stand-in) +// +// We deliberately wire up the real RealUnitPayService instead of stubbing +// it — the goal is to pin the contract between the cubits and the service +// AND the wire-format the service produces. The MockClient plays the fixed +// API: PUT /v1/realunit/swap with targetAmount 0.95 returns amount: 1, +// isValid: true. The app does not ceil shares locally; Ready displays the +// JSON `amount`. +// +// They run headless (no device, no simulator, no live merchant QR), so they +// live under `test/integration/` and run as part of `flutter test`. + +import 'dart:convert'; + +import 'package:fake_async/fake_async.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:http/http.dart' as http; +import 'package:http/testing.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:realunit_wallet/packages/config/api_config.dart'; +import 'package:realunit_wallet/packages/config/network_mode.dart'; +import 'package:realunit_wallet/packages/repository/cache_repository.dart'; +import 'package:realunit_wallet/packages/service/app_store.dart'; +import 'package:realunit_wallet/packages/service/dfx/dfx_blockchain_api_service.dart'; +import 'package:realunit_wallet/packages/service/dfx/dfx_faucet_service.dart'; +import 'package:realunit_wallet/packages/service/dfx/real_unit_pay_service.dart'; +import 'package:realunit_wallet/packages/service/session_cache.dart'; +import 'package:realunit_wallet/packages/service/wallet_service.dart'; +import 'package:realunit_wallet/packages/wallet/wallet.dart'; +import 'package:realunit_wallet/packages/wallet/wallet_account.dart'; +import 'package:realunit_wallet/screens/pay/cubits/pay_process/pay_process_cubit.dart'; +import 'package:realunit_wallet/screens/pay/cubits/pay_quote/pay_quote_cubit.dart'; + +import '../helper/fake_bitbox_credentials.dart'; + +class _MockFaucet extends Mock implements DfxFaucetService {} + +class _MockBlockchain extends Mock implements DfxBlockchainApiService {} + +class _MockAppStore extends Mock implements AppStore {} + +class _MockWallet extends Mock implements AWallet {} + +class _MockWalletAccount extends Mock implements AWalletAccount {} + +class _MockWalletService extends Mock implements WalletService {} + +class _MockCacheRepository extends Mock implements CacheRepository {} + +const _paymentLinkId = 'pl_realunit_ocp_1eur'; +const _lnurlpPath = '/v1/lnurlp/pl_realunit_ocp_1eur'; +const _swapPath = '/v1/realunit/swap'; +const _swapUnsignedPath = '/v1/realunit/swap/99/unsigned-transaction'; +const _swapBroadcastPath = '/v1/realunit/swap/99/broadcast'; +const _payUnsignedPath = '/v1/realunit/pay/unsigned-transaction'; +const _paySubmitPath = '/v1/realunit/pay/submit'; +const _payStatusPath = '/v1/realunit/pay/pl_realunit_ocp_1eur/status'; + +// Verified EIP-1559 unsigned pay tx from pay_process_cubit_test.dart +// (`amountWei: 5 ZCHF` vs a 0.95 quote — the leftover overpay). The app must +// forward this hex unchanged; it must not shrink amountWei to the quote. +const _unsignedPayHex = + '0x02f87183aa36a7018459682f008504a817c800830186a094111111111111111111111111111111111111ac0180b844a9059cbb000000000000000000000000222222222222222222222222222222222222bc020000000000000000000000000000000000000000000000004563918244f40000c0'; + +Map _lnurlpJson() => { + 'requestedAmount': {'asset': 'EUR', 'amount': 1}, + 'quote': { + 'id': 'plq_1eur', + 'expiration': DateTime.now().add(const Duration(minutes: 5)).toIso8601String(), + }, + 'transferAmounts': [ + { + 'method': 'Ethereum', + 'assets': [ + {'asset': 'ZCHF', 'amount': 0.95}, + ], + }, + ], +}; + +Map _swapInfoJson({ + required num amount, + required bool isValid, + String? error, +}) => { + 'id': 99, + 'uid': 'MOCK-UID', + 'routeId': 7, + 'timestamp': '2026-06-03T00:00:00.000Z', + 'amount': amount, + 'estimatedAmount': 1.05, + 'targetAsset': 'ZCHF', + 'minVolume': 1, + 'maxVolume': 1000, + 'minVolumeTarget': 95, + 'maxVolumeTarget': 95000, + 'ethBalance': 1.0, + 'requiredGasEth': 0.001, + 'isValid': isValid, + if (error != null) 'error': error, +}; + +Map _unsignedPayJson() => { + 'unsignedTx': _unsignedPayHex, + 'tokenAddress': '0x111111111111111111111111111111111111ac01', + 'recipient': '0x222222222222222222222222222222222222bc02', + 'amountWei': '5000000000000000000', + 'chainId': 11155111, +}; + +void main() { + late _MockFaucet faucet; + late _MockBlockchain blockchain; + late _MockAppStore appStore; + late _MockWallet wallet; + late _MockWalletAccount account; + late _MockWalletService walletService; + late SessionCache session; + late FakeBitboxCredentials creds; + + setUp(() { + faucet = _MockFaucet(); + blockchain = _MockBlockchain(); + appStore = _MockAppStore(); + wallet = _MockWallet(); + account = _MockWalletAccount(); + walletService = _MockWalletService(); + session = SessionCache(_MockCacheRepository()); + // Pre-seed an auth token so the service skips its sign-message round-trip. + session.setAuthToken('jwt-test'); + + creds = FakeBitboxCredentials(signDelay: Duration.zero); + + when(() => appStore.wallet).thenReturn(wallet); + when( + () => appStore.apiConfig, + ).thenReturn(const ApiConfig(networkMode: NetworkMode.mainnet)); + when(() => appStore.sessionCache).thenReturn(session); + when(() => appStore.primaryAddress).thenReturn(creds.address.hexEip55); + when(() => wallet.walletType).thenReturn(WalletType.bitbox); + when(() => wallet.currentAccount).thenReturn(account); + when(() => account.primaryAddress).thenReturn(creds); + when(() => walletService.ensureCurrentWalletUnlocked()).thenAnswer((_) async {}); + when(() => walletService.lockCurrentWallet()).thenAnswer((_) async {}); + }); + + // Build a real [RealUnitPayService] backed by [client]. The cubits talk to + // this service object — there is no service-level stub between the cubit + // and the HTTP boundary. + RealUnitPayService buildPayService(http.Client client) { + when(() => appStore.httpClient).thenReturn(client); + return RealUnitPayService(appStore, walletService); + } + + group('pay OCP flow cross-layer: cubit → BitBox boundary → service → MockClient', () { + test( + '1 EUR / 0.95 ZCHF quote with a 1-share swap preview becomes PayQuoteReady', + () async { + // Original screenshot bug: 0 REALU sold / grey Pay. The MockClient + // plays the fixed API (targetAmount 0.95 → amount: 1, isValid: true). + // Ready with 1 share is the fix — the harness does not ceil locally. + Map? swapBody; + final client = MockClient((request) async { + if (request.method == 'GET' && request.url.path == _lnurlpPath) { + return http.Response(jsonEncode(_lnurlpJson()), 200); + } + if (request.method == 'PUT' && request.url.path == _swapPath) { + swapBody = jsonDecode(request.body) as Map; + return http.Response( + jsonEncode(_swapInfoJson(amount: 1, isValid: true)), + 200, + ); + } + fail('unexpected ${request.method} ${request.url.path}'); + }); + + final cubit = PayQuoteCubit(buildPayService(client), _paymentLinkId); + await cubit.load(); + + expect(cubit.state, isA()); + final state = cubit.state as PayQuoteReady; + expect(state.fiatAsset, 'EUR'); + expect(state.fiatAmount, 1); + expect(state.zchfAmount, 0.95); + expect(state.realuAmount, 1); + expect(state.realuEstimatedZchf, 1.05); + + expect(swapBody, isNotNull); + expect(swapBody!['targetAmount'], 0.95); + expect(swapBody!.containsKey('amount'), isFalse); + + await cubit.close(); + }, + ); + + test('invalid 0-share swap preview is PayQuoteError, never Ready', () async { + // Same lnurlp bill; the API returns amount: 0 / isValid: false. The app + // surfaces AmountTooLow 1:1 and does not invent a 1-share Ready state. + final client = MockClient((request) async { + if (request.method == 'GET' && request.url.path == _lnurlpPath) { + return http.Response(jsonEncode(_lnurlpJson()), 200); + } + if (request.method == 'PUT' && request.url.path == _swapPath) { + return http.Response( + jsonEncode( + _swapInfoJson(amount: 0, isValid: false, error: 'AmountTooLow'), + ), + 200, + ); + } + fail('unexpected ${request.method} ${request.url.path}'); + }); + + final cubit = PayQuoteCubit(buildPayService(client), _paymentLinkId); + await cubit.load(); + + expect(cubit.state, isA()); + expect(cubit.state, isNot(isA())); + expect((cubit.state as PayQuoteError).message, 'AmountTooLow'); + + await cubit.close(); + }); + + test('process pays the unsigned amountWei (full ZCHF), not the 0.95 quote', () { + fakeAsync((async) { + // The sign step uses `Future.delayed(Duration.zero)` (FakeBitboxCredentials), + // which is a zero-duration *timer* under fakeAsync — `flushMicrotasks` alone + // does not fire it. Elapsing zero repeatedly drains the whole await chain + // (each MockClient future + every zero-delay sign timer) until the cubit + // settles. Then elapse 3s for the Completed status poll. + void drain() { + for (var i = 0; i < 40; i++) { + async.flushMicrotasks(); + async.elapse(Duration.zero); + } + } + + Map? swapBody; + Map? submitBody; + + final client = MockClient((request) async { + final path = request.url.path; + if (request.method == 'GET' && path == _lnurlpPath) { + return http.Response(jsonEncode(_lnurlpJson()), 200); + } + if (request.method == 'PUT' && path == _swapPath) { + swapBody = jsonDecode(request.body) as Map; + return http.Response( + jsonEncode(_swapInfoJson(amount: 1, isValid: true)), + 200, + ); + } + if (request.method == 'PUT' && path == _swapUnsignedPath) { + return http.Response(jsonEncode({'swap': '0x02f8aa'}), 200); + } + if (request.method == 'PUT' && path == _swapBroadcastPath) { + return http.Response(jsonEncode({'txHash': '0xswaptx'}), 200); + } + if (request.method == 'PUT' && path == _payUnsignedPath) { + return http.Response(jsonEncode(_unsignedPayJson()), 200); + } + if (request.method == 'PUT' && path == _paySubmitPath) { + submitBody = jsonDecode(request.body) as Map; + return http.Response(jsonEncode({'txId': '0xpaytx'}), 200); + } + if (request.method == 'GET' && path == _payStatusPath) { + return http.Response(jsonEncode({'status': 'Completed'}), 200); + } + fail('unexpected ${request.method} ${request.url.path}'); + }); + + // _unsignedPay fixture is chainId 11155111 (Sepolia). PayProcessCubit + // binds the RLP chainId to apiConfig.asset.chainId; mainnet would fail + // as unsignedTxMismatch. + when( + () => appStore.apiConfig, + ).thenReturn(const ApiConfig(networkMode: NetworkMode.testnet)); + final payService = buildPayService(client); + + final cubit = PayProcessCubit( + payService: payService, + faucetService: faucet, + blockchainService: blockchain, + walletService: walletService, + appStore: appStore, + paymentLinkId: _paymentLinkId, + zchfNeeded: 0.95, + ); + cubit.start(); + drain(); + + expect( + cubit.state, + anyOf(isA(), isA()), + ); + + expect(swapBody, isNotNull); + expect(swapBody!['targetAmount'], closeTo(0.95 * 1.03, 0.0001)); + expect(swapBody!.containsKey('amount'), isFalse); + + expect(submitBody, isNotNull); + expect(submitBody!['unsignedTx'], _unsignedPayHex); + expect(submitBody!['r'], isNotNull); + expect(submitBody!['s'], isNotNull); + expect(submitBody!.containsKey('v'), isTrue); + + async.elapse(const Duration(seconds: 3)); + drain(); + expect( + cubit.state, + anyOf(isA(), isA()), + ); + + cubit.close(); + async.flushTimers(); + }); + }); + }); +} From efbd552837b6bd911337eeaece3ba96e95989d17 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Wed, 16 Sep 2026 16:07:41 +0200 Subject: [PATCH 17/23] Show localized pay-retry copy for non-API broadcast failures A timeout after the swap is signed must not dump Exception.toString onto the retry sheet. API messages stay 1:1. --- .../pay/cubits/pay_process/pay_process_cubit.dart | 9 ++++++++- test/screens/pay/pay_process_cubit_test.dart | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index f8d33151d..7b1f5a27e 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -284,7 +284,14 @@ class PayProcessCubit extends Cubit { } catch (e) { if (isClosed) return; if (_swapCompleted) { - emit(PayProcessPayRetry(PayRetryReason.transient, message: ApiException.userFacingMessage(e))); + // API errors 1:1; transport/timeout has no user copy — the retry sheet + // falls back to payRetryTransient (ZCHF stays until pay succeeds). + emit( + PayProcessPayRetry( + PayRetryReason.transient, + message: e is ApiException ? e.message : null, + ), + ); return; } emit(PayProcessFailure(PayProcessFailureReason.generic, message: ApiException.userFacingMessage(e))); diff --git a/test/screens/pay/pay_process_cubit_test.dart b/test/screens/pay/pay_process_cubit_test.dart index 6d739692c..3e9b1ab3e 100644 --- a/test/screens/pay/pay_process_cubit_test.dart +++ b/test/screens/pay/pay_process_cubit_test.dart @@ -1001,6 +1001,7 @@ void main() { final state = await retry as PayProcessPayRetry; expect(state.reason, PayRetryReason.transient); + expect(state.message, isNull); expect(cubit.swapCompleted, isTrue); await cubit.close(); }); From af84afed7b6eb178260b6f0fb97ba8bc6155f956 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Thu, 17 Sep 2026 08:13:46 +0200 Subject: [PATCH 18/23] List PayScanPage and PayProcessPage in the screen inventory The inventory claimed every screen. OpenCryptoPay scan and process pages have goldens and no handbook slot. --- docs/screens.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/screens.md b/docs/screens.md index 8dd255612..fa67b8d81 100644 --- a/docs/screens.md +++ b/docs/screens.md @@ -13,7 +13,8 @@ Column meaning: **not a route**: it is shown inside a parent route (KYC steps, status sub-pages, disclaimer steps). - **Handbook** — the handbook screenshot slot number(s) that document the - screen, or `—` if the screen has no Golden baseline. Each slot is a + screen, or `—` if the screen has no handbook slot (it may still have a + Visual-Regression Golden). Each slot is a Visual-Regression Golden under `test/goldens/`, mapped to its handbook position by `scripts/assemble-handbook-screenshots.sh`. The handbook now covers a **curated subset of Golden baselines** — screens **plus selected @@ -57,7 +58,9 @@ Column meaning: | Dashboard & trading | `SellBankAccountSelectionPage` | — | — | `121`, `122` | | Dashboard & trading | `ReceivePage` | `receive` | `/receive` | `101`, `102` | | Dashboard & trading | `PayInfoPage` | `pay` | `/pay` | `293` | +| Dashboard & trading | `PayScanPage` | — | — | — | | Dashboard & trading | `PayQuotePage` | — | — | `294`, `295` | +| Dashboard & trading | `PayProcessPage` | — | — | — | | Dashboard & trading | `ConnectBitboxPage` | — | — | `137`, `138`, `139`, `140`, `141`, `142`, `143`, `144`, `145`, `146` | | Dashboard & trading | `BitboxAddressRecoveryPage` | `bitboxAddressRecovery` | `/bitboxAddressRecovery` | `147` | | Dashboard & trading | `WebViewPage` | `webView` | `/webView` | — | @@ -124,14 +127,15 @@ Column meaning: | Shared widgets | `PhoneNumberField` | — | — | `268` | | Shared widgets | `ReferralPayoutTransactionRow` | — | — | `282` | -83 screens — 48 routed (`GoRoute`) + 35 non-routed. The table also carries +85 screens — 48 routed (`GoRoute`) + 37 non-routed. The table also carries two shared-widget baselines (`PhoneNumberField`, `ReferralPayoutTransactionRow`), which are not screens. Referral surfaces have Golden baselines (`276`–`292`); the handbook documents the programme in `#spec-referral`. Overlay slots `291` and `292` are listed on `DashboardPage` (the host screen), not as a second shared-widget row. OpenCryptoPay pay rounding cards `293`–`295` are documented in -`#spec-81`. +`#spec-81`. `PayScanPage` and `PayProcessPage` have Visual-Regression goldens +under `test/goldens/screens/pay/` and no handbook slot. ## Notes From b63aaf570491d379f8244eef74f0b80c540a0407 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Thu, 17 Sep 2026 09:14:59 +0200 Subject: [PATCH 19/23] Note PayScan and PayProcess handbook dashes in the screen legend The inventory listed those pages with no handbook slot; the legend still said only WebViewPage and KycPageManager carry a dash. --- docs/screens.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/screens.md b/docs/screens.md index fa67b8d81..2b438c5a8 100644 --- a/docs/screens.md +++ b/docs/screens.md @@ -31,9 +31,10 @@ Column meaning: default plus its state variants), so most cells now carry a range rather than a single anchor. One Golden is a shared form widget rather than a screen: slot `268` is `PhoneNumberField` under `test/goldens/widgets/form/`. - Only `WebViewPage` (no active Golden) and `KycPageManager` (the orchestrator - has no Golden of its own — its states are the individual KYC pages) still - carry `—`. Slot ↔ Golden mapping in + `WebViewPage` (no active Golden) and `KycPageManager` (the orchestrator + has no Golden of its own — its states are the individual KYC pages) carry + `—`, as do `PayScanPage` and `PayProcessPage` (Visual-Regression goldens + exist, no handbook slot). Slot ↔ Golden mapping in `scripts/assemble-handbook-screenshots.sh`, slot ↔ HTML block in `docs/handbook/de/index.html`. See `docs/handbook/README.md`. From ea8e9422883c9311ed3beafc7d0c3a847db8bbb9 Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Thu, 17 Sep 2026 09:42:09 +0200 Subject: [PATCH 20/23] Drop the unused insufficient-ZCHF terminal failure reason Invalid swap quotes already surface the API error. Keep the post-swap retry reason; it is still emitted when the fresh quote exceeds holdings. --- assets/languages/strings_de.arb | 1 - assets/languages/strings_en.arb | 1 - .../pay/cubits/pay_process/pay_process_state.dart | 4 ---- lib/screens/pay/pay_process_page.dart | 1 - test/screens/pay/pay_process_page_test.dart | 13 ------------- 5 files changed, 20 deletions(-) diff --git a/assets/languages/strings_de.arb b/assets/languages/strings_de.arb index 6f49fa41c..827b7130a 100644 --- a/assets/languages/strings_de.arb +++ b/assets/languages/strings_de.arb @@ -182,7 +182,6 @@ "payFailureBitboxRequired": "Bitte verbinden Sie Ihre BitBox, um fortzufahren.", "payFailureGeneric": "Bei der Zahlung ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", "payFailureInsufficientEth": "Es konnten nicht genügend ETH für die Netzwerkgebühren bereitgestellt werden. Bitte versuchen Sie es später erneut.", - "payFailureInsufficientZchf": "Ihr REALU-Bestand reicht für diesen Betrag nicht aus.", "payFailureQuoteExpired": "Das Zahlungsangebot ist abgelaufen. Bitte scannen Sie den Code erneut.", "payFailureSignatureUnsupported": "Diese Wallet kann keine Transaktionen signieren. Wechseln Sie zu einer Software- oder BitBox-Wallet.", "payFailureTitle": "Zahlung fehlgeschlagen", diff --git a/assets/languages/strings_en.arb b/assets/languages/strings_en.arb index 00e4b7eb8..fe5738880 100644 --- a/assets/languages/strings_en.arb +++ b/assets/languages/strings_en.arb @@ -182,7 +182,6 @@ "payFailureBitboxRequired": "Please connect your BitBox to continue.", "payFailureGeneric": "Something went wrong with the payment. Please try again.", "payFailureInsufficientEth": "Could not provision enough ETH for network fees. Please try again later.", - "payFailureInsufficientZchf": "Your REALU holdings are not enough for this amount.", "payFailureQuoteExpired": "The payment quote expired. Please scan the code again.", "payFailureSignatureUnsupported": "This wallet cannot sign transactions. Switch to a software or BitBox wallet.", "payFailureTitle": "Payment failed", diff --git a/lib/screens/pay/cubits/pay_process/pay_process_state.dart b/lib/screens/pay/cubits/pay_process/pay_process_state.dart index 1a512e003..24be3412f 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_state.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_state.dart @@ -3,10 +3,6 @@ part of 'pay_process_cubit.dart'; /// Why the pay flow failed. Each reason maps to a localized, user-facing /// message in the view — the cubit carries the reason, not the copy. enum PayProcessFailureReason { - /// The swap quote came back invalid (e.g. not fundable for the requested - /// ZCHF amount after the slippage buffer). - insufficientZchf, - /// Not enough ETH to cover gas and the faucet top-up did not arrive. insufficientEth, diff --git a/lib/screens/pay/pay_process_page.dart b/lib/screens/pay/pay_process_page.dart index faa4fbde6..71baef6dc 100644 --- a/lib/screens/pay/pay_process_page.dart +++ b/lib/screens/pay/pay_process_page.dart @@ -117,7 +117,6 @@ class PayProcessView extends StatelessWidget { return apiText; } return switch (state.reason) { - PayProcessFailureReason.insufficientZchf => S.of(context).payFailureInsufficientZchf, PayProcessFailureReason.insufficientEth => S.of(context).payFailureInsufficientEth, PayProcessFailureReason.signatureUnsupported => S.of(context).payFailureSignatureUnsupported, PayProcessFailureReason.bitboxRequired => S.of(context).payFailureBitboxRequired, diff --git a/test/screens/pay/pay_process_page_test.dart b/test/screens/pay/pay_process_page_test.dart index 26bd21e61..531232b94 100644 --- a/test/screens/pay/pay_process_page_test.dart +++ b/test/screens/pay/pay_process_page_test.dart @@ -294,19 +294,6 @@ void main() { expect(find.byIcon(Icons.check_circle_rounded), findsNothing); }); - testWidgets('insufficient-zchf failure emits a failure sheet', (tester) async { - await pumpWithState( - tester, - const PayProcessFailure(PayProcessFailureReason.insufficientZchf), - ); - - // payFailureTitle also renders as the progress-label behind the sheet, - // so it appears twice; the reason message is the sheet-unique assertion. - expect(find.text(S.current.payFailureTitle), findsWidgets); - expect(find.text(S.current.payFailureInsufficientZchf), findsOne); - expect(find.byIcon(Icons.error_rounded), findsOne); - }); - testWidgets('insufficient-eth failure message', (tester) async { await pumpWithState( tester, From 1bcf2de26afdf1239bed0501b94a4775b246f36f Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Thu, 17 Sep 2026 10:17:43 +0200 Subject: [PATCH 21/23] Capture the quote navigator before the process route Analyzer flags Navigator.of(context) after the async process push. Use the pre-await navigator for both push and the leave-quote pop. --- lib/screens/pay/pay_quote_page.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/screens/pay/pay_quote_page.dart b/lib/screens/pay/pay_quote_page.dart index 665dc4bc6..f32196ee7 100644 --- a/lib/screens/pay/pay_quote_page.dart +++ b/lib/screens/pay/pay_quote_page.dart @@ -137,9 +137,10 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { : () async { if (_navigating) return; setState(() => _navigating = true); + final navigator = Navigator.of(context); bool? swapCompleted = false; try { - swapCompleted = await Navigator.of(context).push( + swapCompleted = await navigator.push( MaterialPageRoute( builder: (_) => PayProcessPage( paymentLinkId: state.paymentLinkId, @@ -156,7 +157,7 @@ class _PayQuoteReadyViewState extends State<_PayQuoteReadyView> { } } if (mounted && swapCompleted != false) { - Navigator.of(context).pop(); + navigator.pop(); } }, child: Text(S.of(context).payConfirmButton), From cbec26732f137163b94afc5c2140b0c76060f2fc Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Thu, 17 Sep 2026 10:29:54 +0200 Subject: [PATCH 22/23] Hide non-API retry errors after the REALU swap Quote refresh and the pay leg already retry after swap. Transport timeouts must not dump Exception.toString onto the retry sheet. --- .../pay/cubits/pay_process/pay_process_cubit.dart | 14 ++++++++++++-- test/screens/pay/pay_process_cubit_test.dart | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart index 7b1f5a27e..8f935e9a3 100644 --- a/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart +++ b/lib/screens/pay/cubits/pay_process/pay_process_cubit.dart @@ -323,7 +323,12 @@ class PayProcessCubit extends Cubit { // Transient/network error fetching the quote — NOT a genuine expiry. // Retry the pay leg; the swapped ZCHF stays in the wallet. if (isClosed) return; - emit(PayProcessPayRetry(PayRetryReason.transient, message: ApiException.userFacingMessage(e))); + emit( + PayProcessPayRetry( + PayRetryReason.transient, + message: e is ApiException ? e.message : null, + ), + ); return; } @@ -396,7 +401,12 @@ class PayProcessCubit extends Cubit { // by retrying the pay leg — never by re-swapping. Surface the retryable state rather than a // terminal failure. if (isClosed) return; - emit(PayProcessPayRetry(PayRetryReason.transient, message: ApiException.userFacingMessage(e))); + emit( + PayProcessPayRetry( + PayRetryReason.transient, + message: e is ApiException ? e.message : null, + ), + ); } } diff --git a/test/screens/pay/pay_process_cubit_test.dart b/test/screens/pay/pay_process_cubit_test.dart index 3e9b1ab3e..036699c09 100644 --- a/test/screens/pay/pay_process_cubit_test.dart +++ b/test/screens/pay/pay_process_cubit_test.dart @@ -1018,6 +1018,7 @@ void main() { // A transient fetch error is NOT a genuine expiry — it routes to the // pay-only retry, never to a re-scan → re-swap. expect(state.reason, PayRetryReason.transient); + expect(state.message, isNull); await cubit.close(); }); From 9251b8a4f563a6da7fb02b18e87950f01e9378eb Mon Sep 17 00:00:00 2001 From: TaprootFreakAI <315477232+TaprootFreakAI@users.noreply.github.com> Date: Thu, 17 Sep 2026 10:48:20 +0200 Subject: [PATCH 23/23] Pin post-swap pay-retry messages in the cubit tests Transport submit failures must have a null message. API submit errors must surface the backend text unchanged. --- test/screens/pay/pay_process_cubit_test.dart | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/screens/pay/pay_process_cubit_test.dart b/test/screens/pay/pay_process_cubit_test.dart index 036699c09..6a2e31571 100644 --- a/test/screens/pay/pay_process_cubit_test.dart +++ b/test/screens/pay/pay_process_cubit_test.dart @@ -11,6 +11,7 @@ import 'package:realunit_wallet/packages/config/network_mode.dart'; import 'package:realunit_wallet/packages/service/app_store.dart'; import 'package:realunit_wallet/packages/service/dfx/dfx_blockchain_api_service.dart'; import 'package:realunit_wallet/packages/service/dfx/dfx_faucet_service.dart'; +import 'package:realunit_wallet/packages/service/dfx/exceptions/api_exception.dart'; import 'package:realunit_wallet/packages/service/dfx/exceptions/bitbox_exception.dart'; import 'package:realunit_wallet/packages/service/dfx/models/faucet/faucet_response_dto.dart'; import 'package:realunit_wallet/packages/service/dfx/models/payment/pay/dto/lnurlp_payment_dto.dart'; @@ -425,11 +426,29 @@ void main() { final state = await retry as PayProcessPayRetry; // The swap is done; a failed pay must NOT force a re-swap. + // Transport errors must not dump Exception.toString onto the retry sheet. expect(state.reason, PayRetryReason.transient); + expect(state.message, isNull); expect(cubit.state, isNot(isA())); await cubit.close(); }); + test('pay submit API error after swap surfaces the message 1:1', () async { + wireHappyPath(); + when(() => payService.submitPay(any())).thenThrow( + const ApiException(code: 'QUOTE_EXPIRED', message: 'Quote is no longer valid'), + ); + + final cubit = build(); + final retry = cubit.stream.firstWhere((s) => s is PayProcessPayRetry); + await cubit.start(); + final state = await retry as PayProcessPayRetry; + + expect(state.reason, PayRetryReason.transient); + expect(state.message, 'Quote is no longer valid'); + await cubit.close(); + }); + test('unsigned pay tx "to" does not match DTO tokenAddress → unsignedTxMismatch, never signed', () async { wireHappyPath();